【问题标题】:How to get the current cursor position in python readline如何在python readline中获取当前光标位置
【发布时间】:2020-02-01 15:33:23
【问题描述】:

我有一个自定义的 python readline 完成函数,在完成函数中我调用readline.get_line_buffer(),它为我提供当前文本输入,以便我可以以上下文相关的方式完成当前单词。

我现在缺少的是获取当前光标位置的可能性。例如,如果要完成可能的参数,则需要位置来确定前面的命令。

the python readline module documentation,我还没有找到确定位置的方法,那是怎么做到的呢?

【问题讨论】:

  • 我也有同样的问题。我在 Windows 上使用 pyreadline,在 pyreadline 源代码中的 rlmain.py 中没有看到任何简单的内容。我想知道 before = readline.get_line_buffer(), readline.insert_text("t"), after = readline.get_line_buffer(), readline.insert_text("\b") 是否可行。然后你可以前后比较,看看他们第一次不同的地方。取决于退格 ("\b") 是否有效。
  • 另一个想法是在 tab_complete 钩子中使用 text 变量。我测试了,只要光标位于单词的末尾并且前面没有空格,并且行上没有任何重复的文本,您就可以在行缓冲区中获取当前位置:|。

标签: python readline


【解决方案1】:

我下载了pyreadline source code 并解决了这个问题。以下适用于 Python 2.7 上的 pyreadline(readline 的 Windows 端口):

from pyreadline import Readline
readline = Readline()
cursor = readline.mode.l_buffer.point

请注意,这适用于 pyreadline (Windows),但不适用于 GNU readline(根据下面 Binabik 的评论)。

【讨论】:

  • 我在使用 Python 3.9 的 GNU/Linux 上导入 'readline' 而不是像你一样的 'pyreadline'。 'readline' 模块不提供 'mode' 属性,因此仅复制代码会失败,但出现以下异常:模块 'readline' 没有属性 'mode'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
相关资源
最近更新 更多