我知道我可以这样做来获得python sure中制表符完成的效果。
import readline
COMMANDS = ['extra', 'extension', 'stuff', 'errors',
'email', 'foobar', 'foo']
def complete(text, state):
for cmd in COMMANDS:
if cmd.startswith(text):
if not state:
return cmd
else:
state -= 1
readline.parse_and_bind("tab: complete")
readline.set_completer(complete)
raw_input('Enter section name: ')
我现在对目录的制表符补全很感兴趣。(/home/user/doc〉tab)
我该如何着手做这样的工作呢?
5条答案
按热度按时间yvfmudvl1#
下面是一个如何执行文件系统路径增量补全的快速示例。我修改了您的示例,将其组织到一个类中,其中名为
complete_[name]
的方法表示顶级命令。我已经将完成函数切换为使用内部readline缓冲区来确定整个完成的状态,这使得状态逻辑简单了一些,路径完成在
_complete_path(path)
方法中,我已经连接了extra命令来对其参数执行路径完成。我确信代码可以进一步简化,但它应该为您提供一个不错的起点:
用法:
更新如果用户键入
/
,则将完成从根目录开始的路径:a0zr77ik2#
这足以支持raw_input()的内置目录制表符完成功能:
bprjcwpo3#
这个版本是针对python3的,使用pathlib,并且是一个用tab完成files/dirs的简约版本。它基于上面的一些答案,但是只对files/dirs有效。
lvmkulzt4#
用于路径完成
请注意,我改进了https://gist.github.com/iamatypeofwalrus/5637895中的代码
3htmauhk5#
在Some Systems™上,需要使用不同的绑定,例如,我没有GNU readline,所以需要使用不同的parse_and_bind文本: