如何使用iPython 7.x中使用的hint_toolkit自动关闭双引号,括号和方括号?

时间:2019-07-12 17:34:15

标签: python ipython auto-close prompt-toolkit

从版本5开始的IPython使用hint_toolkit而不是readline,并且我正在尝试使用此包的实现来启用自动关闭双引号,括号和方括号。我已经知道了这段代码:

ip = get_ipython()
kb = ip.pt_app.key_bindings
@kb.add('"')
def _(event):
    buffer = event.current_buffer
    buffer.insert_text('"')
    buffer.insert_text('"')

这不能正常工作,因为它仅输入两个引号,而光标位于它们之后。 buffer对象似乎没有用于将光标移回的方法。尽管document包含一个buffer对象,该对象具有在光标位置之前或之后插入文本的方法。因此,修改代码:

ip = get_ipython()
kb = ip.pt_app.key_bindings
@kb.add('"') 
def _(event): 
    buffer = event.current_buffer 
    doc = buffer.document 
    doc.insert_before('"') 
    doc.insert_after('"')

当在键盘上按下'“'时,这不会产生任何输出。我从hint_toolkit文档中收集到该文档现在应该呈现到屏幕上,但是我不知道如何完成此操作。感谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决当前问题的方法-我的代码缺少参数:

def _(event):
    buffer = event.current_buffer
    buffer.insert_text('"')
    buffer.insert_text('"', move_cursor=False)

对于document对象的呈现,我们将不胜感激,因为其他相关操作(例如删除匹配的引号)将需要此答案。