从版本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文档中收集到该文档现在应该呈现到屏幕上,但是我不知道如何完成此操作。感谢!
答案 0 :(得分:0)
我找到了解决当前问题的方法-我的代码缺少参数:
def _(event):
buffer = event.current_buffer
buffer.insert_text('"')
buffer.insert_text('"', move_cursor=False)
对于document
对象的呈现,我们将不胜感激,因为其他相关操作(例如删除匹配的引号)将需要此答案。