简体   繁体   English

在 python prompt-toolkit-3.0.2 上添加键绑定会破坏建议和历史搜索

[英]Adding a key binding on python prompt-toolkit-3.0.2 breaks the suggestion and history search

I am trying to add a different way to finish the multiline input.我正在尝试添加一种不同的方式来完成多行输入。 Should be simple, but I am getting an unexpected result: After adding the new binding the history and suggest features stop working.应该很简单,但我得到了一个意想不到的结果:添加新的绑定后,历史和建议功能停止工作。

I try to use the load_basic_bindings but it did not help.我尝试使用 load_basic_bindings 但它没有帮助。

If I comment on the key binding, the suggestion and historic work again.如果我再次评论键绑定,建议和历史性工作。

from prompt_toolkit import PromptSession
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.key_binding import KeyBindings

session = PromptSession()

# load empty binds
bindings = KeyBindings()

# reading from the basic binds did not work either
# bindings = load_basic_bindings()

# HERE IS THE PROBLEM
# After adding this the history and suggest stop working
# should just add a new way to exit
# I have tested with the eager True and False, with no changes
@bindings.add('#')
def _(event):
    event.app.exit(result=event.app.current_buffer.text)

while True:
    text = session.prompt(
        '> ',
        auto_suggest=AutoSuggestFromHistory(),
        key_bindings=bindings,     # if I comment the key bindings, the history and search work againg
        multiline=True,            # this bug just happens on multiline, if put this False the bug does not happens
        enable_history_search=True
    )
    print('You said: %s' % text)

If I use load_basic_bindings() I can accept command using Alt+Enter and it adds it to history.如果我使用load_basic_bindings()我可以使用Alt+Enter接受命令并将其添加到历史记录中。
For # I had to add function which adds command to history对于#我必须添加将命令添加到历史记录的函数

session.history.append_string(event.app.current_buffer.text)

Using arrows I can select from history.使用箭头,我可以从历史中进行选择。 And it shows suggestion from history.它显示了历史的建议。

Tested on Linux Mint 19.2 (based on Ubuntu 18.04), Python 3.7.6, Prompt Toolkit 3.0.2在 Linux Mint 19.2(基于 Ubuntu 18.04)、Python 3.7.6、Prompt Toolkit 3.0.2 上测试


from prompt_toolkit import PromptSession
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.key_binding.bindings.basic import load_basic_bindings

session = PromptSession()

# load empty binds
#bindings = KeyBindings()

# reading from the basic binds did not work either
bindings = load_basic_bindings()

# HERE IS THE PROBLEM
# After adding this the history and suggest stop working
# should just add a new way to exit
# I have tested with the eager True and False, with no changes
@bindings.add('#')
def _(event):
    session.history.append_string(event.app.current_buffer.text)
    event.app.exit(result=event.app.current_buffer.text)

while True:
    text = session.prompt(
        '> ',
        auto_suggest=AutoSuggestFromHistory(),
        key_bindings=bindings,     # if I comment the key bindings, the history and search work againg
        multiline=True,            # this bug just happens on multiline, if put this False the bug does not happens
        enable_history_search=True
    )
    print('You said: %s' % text)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM