我注意到某些程序(例如 hg)允许用户使用制表符完成命令的特定部分。例如,如果在 hg 存储库工作目录中,我键入:
hg qpush --move b8<TAB>
它将尝试使用我的补丁队列中以“b8”开头的任何 mercurial 补丁来完成命令。
我想做的是在我的程序中模仿这种行为。也就是说,我有一系列命令依赖于某个目录中的文件,我希望能够在 shell 中提供制表符补全。是否有用于在 Ubuntu Linux 上提供此功能的 API(最好使用 python,因为这是我的脚本编写的)?
我注意到某些程序(例如 hg)允许用户使用制表符完成命令的特定部分。例如,如果在 hg 存储库工作目录中,我键入:
hg qpush --move b8<TAB>
它将尝试使用我的补丁队列中以“b8”开头的任何 mercurial 补丁来完成命令。
我想做的是在我的程序中模仿这种行为。也就是说,我有一系列命令依赖于某个目录中的文件,我希望能够在 shell 中提供制表符补全。是否有用于在 Ubuntu Linux 上提供此功能的 API(最好使用 python,因为这是我的脚本编写的)?
为此,您需要为您的 shell 编写制表符完成模块。大多数 Linux 发行版中的默认 shell 是bash
,因此您应该编写一个完成脚本(通常是一个 shell 脚本)。编写脚本后,将其添加到/etc/bash_completion.d/
. 这应该与您的程序一起分发(对于 Linux 发行版,包含在包中)。
Debian Administration 有一个编写完成脚本的指南。要在 Mac 上使用完成,请参阅https://trac.macports.org/wiki/howto/bash-completion。
有关完成文件的示例,请查看bash-completion
来自 Debian 的项目(也在Github 上)。另请参阅https://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial。
如果你使用hack.augusto 链接到文档,用于编写zsh
完成。
查看 Python 库中“cmd”模块的来源。它支持命令完成。