我注意到某些程序(例如hg)允許用戶製表命令的特定部分。例如,如果在一個汞庫的工作目錄,I型:如何讓我的程序使用選項卡完成?
hg qpush --move b8<TAB>
它將嘗試與我的補丁隊列以「B8」啓動任何含汞補丁來完成命令。
我想要做的是模仿我的程序這種行爲。也就是說,我有一系列依賴於特定目錄內的文件的命令,我希望能夠在shell中提供製表符完成。有沒有在Ubuntu Linux上提供此API的API(最好使用python,因爲這是我的腳本編寫的)?
我注意到某些程序(例如hg)允許用戶製表命令的特定部分。例如,如果在一個汞庫的工作目錄,I型:如何讓我的程序使用選項卡完成?
hg qpush --move b8<TAB>
它將嘗試與我的補丁隊列以「B8」啓動任何含汞補丁來完成命令。
我想要做的是模仿我的程序這種行爲。也就是說,我有一系列依賴於特定目錄內的文件的命令,我希望能夠在shell中提供製表符完成。有沒有在Ubuntu Linux上提供此API的API(最好使用python,因爲這是我的腳本編寫的)?
你可能想嘗試zsh
外殼,它具有與噸的應用程序的支持有很大完成系統。
完成系統寫入與shell語言,但如果你真的想使用Python可以運行從你的完成函數中解釋。不利的一面是,如果你想爲自己的軟件寫完成,你需要做一些閱讀(例如user manual和manpage)。
要做到這一點,你需要爲你的shell編寫tab-completion模塊。大多數Linux發行版中的默認shell爲bash
,所以您應該編寫完成腳本(通常是shell腳本)。寫完腳本後,將其添加到/etc/bash_completion.d/
。這應該與您的程序一起分發(對於包含在軟件包中的Linux發行版)。
Debian的政府有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。
查看Python庫中'cmd'模塊的源代碼。它支持命令完成。
也許是這樣的:http://tldp.org/LDP/abs/html/tabexpansion.html – mgilson 2013-02-14 15:29:35
正如@ mgilson的迴應所暗示的,必須配置shell以便爲您的程序提供自動完成功能,而不是其他方式。 – ziu 2013-02-14 15:33:41