Python prompt_toolkit:当用户按下回车键时选择最佳模糊匹配
Python prompt_toolkit: Pick best fuzzy match when the user presses enter
我正在通过 CLI 使用 prompt_toolkit
中的 FuzzyCompleter
。我另外将 complete_while_typing=True
传递给 prompt
函数。
如果我提供包含例如"Testing" 并且用户键入 "tst",它将显示为第一个建议。但如果用户随后按下回车键,prompt
函数的结果将是 "tst",而不是 "Testing"。如果用户按tab然后回车,当然可以。
我希望 prompt
函数仅包含完成列表中的 return 个值,而不是像 "tst" 这样用户键入以快速匹配的无意义字符串。输入前的 Tab 不应该是必需的。我怎样才能做到这一点?
您可以创建自定义键绑定以在用户按下回车键时执行完成。例如:
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)
将被覆盖的键绑定当前位于 shortcuts/prompt.py
and key_binding/bindings/basic.py
。
如果您的提示应用程序更复杂(例如多行输入或多个缓冲区),那么您可能需要额外的逻辑来处理这些情况。 prompt_toolkit.filters.is_multiline
可能会有用。
我正在通过 CLI 使用 prompt_toolkit
中的 FuzzyCompleter
。我另外将 complete_while_typing=True
传递给 prompt
函数。
如果我提供包含例如"Testing" 并且用户键入 "tst",它将显示为第一个建议。但如果用户随后按下回车键,prompt
函数的结果将是 "tst",而不是 "Testing"。如果用户按tab然后回车,当然可以。
我希望 prompt
函数仅包含完成列表中的 return 个值,而不是像 "tst" 这样用户键入以快速匹配的无意义字符串。输入前的 Tab 不应该是必需的。我怎样才能做到这一点?
您可以创建自定义键绑定以在用户按下回车键时执行完成。例如:
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)
将被覆盖的键绑定当前位于 shortcuts/prompt.py
and key_binding/bindings/basic.py
。
如果您的提示应用程序更复杂(例如多行输入或多个缓冲区),那么您可能需要额外的逻辑来处理这些情况。 prompt_toolkit.filters.is_multiline
可能会有用。