我注意到某些程序(例如hg)允许用户选项卡完成命令的特定部分。例如,如果在hg存储库工作目录中输入:
hg qpush --move b8<TAB>
它将尝试使用以“b8”开头的补丁队列中的任何mercurial补丁完成命令。
我想做的是在我的程序中模仿这种行为。也就是说,我有一系列依赖于某个目录中文件的命令,我希望能够在shell中提供制表符完成。是否有一个API在Ubuntu Linux上提供此功能(最好使用python,因为这是我的脚本编写的内容)?
答案 0 :(得分:7)
为此,您需要为shell编写制表符完成模块。大多数Linux发行版中的默认shell是bash
,因此您应该编写完成脚本(通常是shell脚本)。编写脚本后,将其添加到/etc/bash_completion.d/
。这应该与您的程序一起分发(对于Linux发行版,包含在包中)。
Debian Administration已a guide for writing your completion scripts。要在Mac上使用完成功能,请参阅https://trac.macports.org/wiki/howto/bash-completion。
有关完成文件的示例,请查看bash-completion
project from Debian(也是on Github)。另请参阅https://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial。
如果您使用zsh
,hack.augusto linked to the documentation for writing completions。
答案 1 :(得分:3)
答案 2 :(得分:1)
你可能想尝试zsh
shell,它有一个很好的完成系统,支持大量的应用程序。
完成系统是用shell语言编写的,但是如果你真的想使用python,你可以从完成函数内部运行解释器。如果您想为自己的软件编写完成,则需要进行一些阅读(例如user manual和manpage)。
答案 3 :(得分:1)
看一下Python库中'cmd'模块的来源。它支持命令完成。