2013-02-14 6 views
7

Ich habe festgestellt, dass einige Programme (z. B. hg) den Benutzer erlauben, bestimmte Teile des Befehls tab-abschließen. Wenn zum Beispiel in einer hg Repository-Verzeichnis arbeiten, ich tippe:Wie kann ich in meinem Programm die Tab-Vervollständigung verwenden?

hg qpush --move b8<TAB>

Er wird versuchen, den Befehl mit alle möglichen Quecksilber-Patches in meiner Patch Warteschlange zu vervollständigen, die mit „b8“ beginnen.

Was ich tun möchte, ist dieses Verhalten in meinem Programm zu imitieren. Das heißt, ich habe eine Reihe von Befehlen, die von Dateien innerhalb eines bestimmten Verzeichnisses abhängen, und ich möchte in der Lage sein, die Tab-Vervollständigung in der Shell bereitzustellen. Gibt es eine API für die Bereitstellung auf Ubuntu Linux (vorzugsweise mit Python, wie es in meinem Skript geschrieben ist)?

+1

Vielleicht etwas wie dieses: http://tldp.org/LDP/abs/html/tabexpansion.html – mgilson

+2

Wie @mgilson Antwort impliziert, muss die Shell konfiguriert werden, um Autovervollständigung für Ihr Programm, nicht die andere zur Verfügung zu stellen andersherum. – ziu

Antwort

3

Dies ist, was das readline Modul ist.

Eigentlich ist readline eine gebräuchliche C-Bibliothek, daher hat es Bindungen in vielen Sprachen. Und ich kann sagen, ich hatte jede Menge Spaß damit.

Genießen B)

+5

Ich denke, der Fragesteller möchte wissen, wie man die * Shell * dazu bringt, Unterbefehle für sein Programm zu vervollständigen, und nicht, wie man die Autokomplettierung * innerhalb des Programms benutzt. –

+1

Sorry für die späte Antwort, aber eigentlich schreibe ich ein Programm in Python, das ich _ship_ mit automatischer Tab-Vervollständigung (für Shells, die es unterstützen) möchte. – jwir3

+0

@ jwir3 dann 'import readline; input() ' – cat

1

Sie möchten vielleicht die zsh Schal, um zu versuchen, es hat ein großes Verrohrungssystem mit Unterstützung für Tonnen von Anwendungen.

Das Komplettierungssystem ist mit der Shell-Sprache geschrieben, aber wenn Sie wirklich Python verwenden möchten, können Sie den Interpreter aus Ihrer Completion-Funktion ausführen. Der Nachteil ist, dass wenn Sie die Fertigstellung für Ihre eigene Software schreiben wollen, müssen Sie etwas lesen (user manual und die manpage zum Beispiel).

5

Um dies zu tun, müssen Sie Tab-Completion-Module für Ihre Shell schreiben. Die Standard-Shell in den meisten Linux-Distributionen ist bash, daher sollten Sie ein Abschluss-Skript (normalerweise ein Shell-Skript) schreiben. Nachdem Sie Ihr Skript geschrieben haben, fügen Sie es zu /etc/bash_completion.d/ hinzu. Dies sollte mit Ihrem Programm verteilt werden (für Linux-Distributionen, die im Paket enthalten sind).

Debian-Administration hat a guide for writing your completion scripts. Informationen zur Verwendung der Fertigstellung auf einem Mac finden Sie unter https://trac.macports.org/wiki/howto/bash-completion.

Beispiele für Abschlussdateien finden Sie unter bash-completion project from Debian (auch on Github). Siehe auch https://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial.

Wenn Sie zsh, hack.augusto linked to the documentation for writing completions verwenden.

1

Werfen Sie einen Blick auf die Quelle des Moduls 'cmd' in der Python-Bibliothek. Es unterstützt die Befehlsausführung.