使用'$'的Python readline选项卡完成

我正在使用Cmd.py创建一个自定义的交互式控制台,并使用readline来完成标签。 这正在使用python 2.7.1在Mac上进行测试。

我使用complete_ [cmd_name]定义完成候选项,以便cmd.py可以使用它来获取可能的完成列表。 正在完成的论点是一个字符串。 我的候选人完成是一个字符串列表。 一切正常情况下工作。 问题是当参数以'$'开头时。 Readline显然是剥离了领先的'$'字符,当我构建候选列表时,它正在搞乱我的比较。

例如:

completion_list = ['test', 'another_test', '$t_problem_case']

输入:cmd te [选项卡]正确完成“测试”一词。

输入:cmd $ t_ [tab]未完成

输入:cmd $ te [制表符]错误地完成到$ test

好的,所以这个问题起初似乎很明显。 我认为readline使用'$'作为分隔符。 这很容易通过使用:

readline.set_completer_delims(readline.get_completer_delims().replace("$", ""))

只有这不起作用。 同样的事情仍然发生。

完成函数需要参数'text'和'line',其中text是正在完成的参数(缺少'$'的参数),line是完整的行。 试图智胜readline我检查,看看是否实际上有一个$的线,如果是这样我追加这个参数我检查,以便我可以正确过滤候选人。 这几乎可行。

输入:$ t [tab]几乎正确地完成字符串...。 因为readline忽略了我的'$',所以不用去除替换上的这个字符。 结果实际上是“$$ t_problem_case”。

作为最后的努力,我修改了cmd.py的默认完整函数,以返回与从前面取下的'$'匹配。 这样readline实际上会替换为't_problem_case',并且一切看起来都是正确的。 这是朝正确方向迈出的一步,但问题在于制表符补全建议现在不显示'$'。 所以在建议中'$ t_problem_case'会显示为't_problem_case'。

有没有解决这个问题的正确方法?

链接地址: http://www.djcxy.com/p/56417.html

上一篇: Python readline tab completion with '$'

下一篇: Java : Alpha Beta Pruning