2013-02-14 5 views
7

Я заметил, что некоторые программы (например, hg) позволяют пользователю выполнять отдельные части команды. Например, если в хранилище рабочей директории рт.ст., я печатаю:Как заставить мою программу использовать вкладку?

hg qpush --move b8<TAB>

Он будет пытаться выполнить команду с любыми ртутными пластырями в моей очереди патча, которые начинаются с «b8».

Что бы я хотел сделать, это подражать этому поведению в моей программе. То есть, у меня есть ряд команд, которые зависят от файлов в определенном каталоге, и я хотел бы иметь возможность предоставить вкладку в оболочке. Есть ли API для обеспечения этого на Ubuntu Linux (желательно с использованием python, так как это то, что написано в моем скрипте)?

+1

Возможно, что-то вроде этого: http://tldp.org/LDP/abs/html/tabexpansion.html – mgilson

+2

Как следует из ответа @mgilson, оболочка должна быть настроена для обеспечения автозаполнения для вашей программы, а не для другого наоборот. – ziu

ответ

3

Это то, для чего нужен модуль readline.

На самом деле, readline является общей библиотекой C, поэтому она имеет привязки на многих языках. И я могу сказать, что у меня было много удовольствия.

Наслаждайтесь B)

+5

Я думаю, что искатель хочет знать, как получить * shell * в подзапросах автозаполнения для своей программы, а не как использовать автозаполнение * внутри * программы. –

+1

Извините за поздний ответ, но на самом деле, я пишу программу на Python, которая мне нужна _ship_ с автоматическим заполнением вкладки (для оболочек, которые ее поддерживают). – jwir3

+0

@ jwir3 затем 'import readline; вход() ' – cat

1

Вы можете попробовать zsh оболочку, она имеет большую систему заканчивания с поддержкой тонн приложений.

Система завершения написана с языком оболочки, но если вы действительно хотите использовать python, вы можете запустить интерпретатор из вашей функции завершения. В нижней части это означает, что если вы хотите написать завершение для своего собственного программного обеспечения, вам нужно будет сделать некоторое чтение (например, user manual и manpage).

5

Для этого вам необходимо написать модули завершения табуляции для вашей оболочки. По умолчанию оболочка в большинстве дистрибутивов Linux - bash, поэтому вы должны написать скрипт завершения (обычно это сценарий оболочки). После того, как вы написали свой скрипт, добавьте его в /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.

1

Посмотрите на источник модуля cmd в библиотеке Python. Он поддерживает завершение команды.

Смежные вопросы