2013-02-14 16 views
7

Zauważyłem, że niektóre programy (np. Hg) umożliwiają użytkownikowi wypełnianie tabulatora określonych części polecenia. Na przykład, jeśli w repozytorium hg katalogu roboczego, wpisuję:Jak mogę, aby mój program korzystał z funkcji wstawiania kart?

hg qpush --move b8<TAB>

Będzie spróbować wypełnić polecenie z wszelkimi rtęci poprawki w mojej kolejce poprawki, które zaczynają się od „B8”.

To, co chciałbym zrobić, to naśladować to zachowanie w moim programie. To znaczy, mam serię poleceń, które zależą od plików w określonym katalogu i chciałbym móc zapewnić uzupełnianie kart w powłoce. Czy istnieje interfejs API do zapewniania tego w systemie Ubuntu Linux (najlepiej przy użyciu Pythona, ponieważ jest to zapisany w moim skrypcie)?

+1

Może coś takiego: http://tldp.org/LDP/abs/html/tabexpansion.html – mgilson

+2

Jak sugeruje odpowiedź @mililona, ​​powłoka musi zostać skonfigurowana w celu zapewnienia autouzupełniania dla twojego programu, a nie dla drugiego dookoła. – ziu

Odpowiedz

3

Do tego służy moduł readline.

W rzeczywistości readline jest popularną biblioteką C, która ma powiązania w wielu językach. I mogę powiedzieć, że miałem mnóstwo zabawy z tym.

Ciesz B)

+5

Myślę, że osoba pytająca chce wiedzieć, jak uzyskać * powłokę * do autouzupełniania podkomend dla swojego programu, a nie jak używać autouzupełniania * w ramach * programu. –

+1

Przepraszamy za późną odpowiedź, ale tak naprawdę piszę program w Pythonie, który chcę _ship_ z automatycznym uzupełnianiem kart (dla powłok, które go obsługują). – jwir3

+0

@ jwir3 następnie 'import readline; input() ' – cat

1

Możecie spróbować skorupę zsh, ma wielki system uzupełniania z obsługą ton zastosowań.

System ukończenie jest napisany w języku powłoki, ale jeśli naprawdę chcesz używać Pythona można uruchomić interpreter od wewnątrz funkcji zakończenia. Wadą jest to, że jeśli chcesz napisać ukończenie dla własnego oprogramowania, będziesz musiał zrobić trochę czytania (na przykład user manual i manpage).

5

Aby to zrobić, należy napisać moduły uzupełniania kart dla powłoki. Domyślną powłoką w większości dystrybucji Linuksa jest bash, więc powinieneś napisać skrypt zakończenia (zwykle skrypt powłoki). Po napisaniu skryptu dodaj go do /etc/bash_completion.d/. To powinno być rozprowadzane z twoim programem (dla dystrybucji Linuksa, zawartych w pakiecie).

Administracja Debiana ma a guide for writing your completion scripts. Aby uzyskać informacje o zakończeniu na komputerze Mac, zobacz https://trac.macports.org/wiki/howto/bash-completion.

Przykłady plików uzupełniających można znaleźć na stronie bash-completion project from Debian (również on Github). Zobacz także https://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial.

Jeśli używasz zsh, hack.augusto linked to the documentation for writing completions.

1

Zobacz źródło modułu "cmd" w bibliotece Pythona. Obsługuje uzupełnianie poleceń.

Powiązane problemy