9

我注意到某些程序(例如 hg)允许用户使用制表符完成命令的特定部分。例如,如果在 hg 存储库工作目录中,我键入:

hg qpush --move b8<TAB>

它将尝试使用我的补丁队列中以“b8”开头的任何 mercurial 补丁来完成命令。

我想做的是在我的程序中模仿这种行为。也就是说,我有一系列命令依赖于某个目录中的文件,我希望能够在 shell 中提供制表符补全。是否有用于在 Ubuntu Linux 上提供此功能的 API(最好使用 python,因为这是我的脚本编写的)?

4

4 回答 4

8

为此,您需要为您的 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完成。

于 2013-02-14T23:47:42.557 回答
1

这就是readline模块的用途。

实际上,readline 是一个常见的 C 库,因此它具有多种语言的绑定。我可以说,我玩得很开心。

享受 B)

于 2013-02-14T16:09:29.770 回答
0

你可能想试试zshshell,它有一个很棒的完成系统,支持大量的应用程序。

补全系统是用 shell 语言编写的,但如果你真的想使用 python,你可以从补全函数内部运行解释器。不利的一面是,如果您想为自己的软件编写完成,则需要阅读一些内容(例如用户手册和手册)。

于 2013-02-14T23:13:11.860 回答
0

查看 Python 库中“cmd”模块的来源。它支持命令完成。

于 2013-02-15T00:31:20.747 回答