Python prompt_toolkit:在用户按enter键时选择最佳模糊匹配

2024-09-27 23:23:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过CLI使用来自prompt_toolkitFuzzyCompleter。另外,我将complete_while_typing=True传递给prompt函数

如果我提供一个包含例如“Testing”和用户类型“tst”的列表,它将显示为第一个建议。但是,如果用户随后按enter键,prompt函数的结果将是“tst”,而不是“Testing”。如果用户按tab键,然后按enter键,它当然可以工作

我希望prompt函数只返回完成列表中的值,而不返回用户快速匹配的“tst”之类的无意义字符串。输入前的选项卡不应是必需的。我怎样才能做到这一点


Tags: 函数用户truetyping类型列表clitesting
1条回答
网友
1楼 · 发布于 2024-09-27 23:23:14

您可以创建自定义密钥绑定,以便在用户点击enter键时执行完成。例如:

from prompt_toolkit import prompt
from prompt_toolkit.completion import FuzzyWordCompleter
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.filters import (
    has_completions,
    completion_is_selected,
)

# Override enter key to automatically perform first completion.
key_bindings = KeyBindings()
filter = has_completions & ~completion_is_selected
@key_bindings.add("enter", filter=filter)
def _(event):
    event.current_buffer.go_to_completion(0)
    event.current_buffer.validate_and_handle()

completer = FuzzyWordCompleter([
    "Using", "Testing", "Building", "Designing", "Documenting"
])
result = prompt("$ ",
    completer=completer,
    complete_while_typing=True,
    key_bindings=key_bindings,
)
if result:
    print(result)

将被重写的键绑定当前位于^{}^{}

如果提示应用程序更复杂(例如,多行输入或多个缓冲区),则可能需要额外的逻辑来处理这些情况prompt_toolkit.filters.is_multiline可能有用

相关问题 更多 >

    热门问题