2013-02-14 34 views
7

我注意到某些程序(例如hg)允許用戶製表命令的特定部分。例如,如果在一個汞庫的工作目錄,I型:如何讓我的程序使用選項卡完成?

hg qpush --move b8<TAB>

它將嘗試與我的補丁隊列以「B8」啓動任何含汞補丁來完成命令。

我想要做的是模仿我的程序這種行爲。也就是說,我有一系列依賴於特定目錄內的文件的命令,我希望能夠在shell中提供製表符完成。有沒有在Ubuntu Linux上提供此API的API(最好使用python,因爲這是我的腳本編寫的)?

+1

也許是這樣的:http://tldp.org/LDP/abs/html/tabexpansion.html – mgilson 2013-02-14 15:29:35

+2

正如@ mgilson的迴應所暗示的,必須配置shell以便爲您的程序提供自動完成功能,而不是其他方式。 – ziu 2013-02-14 15:33:41

回答

3

這是readline模塊是什麼。

其實readline的是一個通用的C庫,因此它在許多語言綁定。我可以說,我有很多樂趣。

享受B)

+5

我認爲提問者想知道如何讓* shell *自動完成他的程序的子命令,而不是如何在程序中使用自動完成*。 – 2013-02-14 23:36:08

+1

對不起,對於最近的回覆,但實際上,我正在用Python編寫一個程序,我希望自動完成標籤(對於支持它的shell)。 – jwir3 2015-04-24 01:36:01

+0

@ jwir3 then'import readline;輸入()' – cat 2016-02-22 04:22:06

1

你可能想嘗試zsh外殼,它具有與噸的應用程序的支持有很大完成系統。

完成系統寫入與shell語言,但如果你真的想使用Python可以運行從你的完成函數中解釋。不利的一面是,如果你想爲自己的軟件寫完成,你需要做一些閱讀(例如user manualmanpage)。

5

要做到這一點,你需要爲你的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

如果使用zshhack.augusto linked to the documentation for writing completions

1

查看Python庫中'cmd'模塊的源代碼。它支持命令完成。

相關問題