为了账号安全,请及时绑定邮箱和手机立即绑定

Python prompt_toolkit:当用户按下回车键时选择最佳模糊匹配

Python prompt_toolkit:当用户按下回车键时选择最佳模糊匹配

GCT1015 2022-10-06 16:12:55
我正在通过 CLI使用FuzzyCompleterfrom for 。prompt_toolkit我另外传递complete_while_typing=True给prompt函数。如果我提供包含例如“测试”的列表并且用户键入“tst”,它将显示为第一个建议。但是如果用户随后按下回车,prompt函数的结果将是“tst”,而不是“Testing”。如果用户按 Tab 然后输入,它当然可以工作。我希望该prompt函数仅返回完成列表中的值,而不是用户键入以快速匹配的“tst”之类的无意义的字符串。输入前的制表符不应该是必需的。我怎样才能做到这一点?
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

您可以创建自定义键绑定以在用户按 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)

将被覆盖的键绑定当前位于shortcuts/prompt.py和中key_binding/bindings/basic.py


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


查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信