Я пишу немного CLI в Python (как расширение Подвижного) и хотел бы поддерживать заполнение клавишей Tab. А именно, я хотел бы вкладки выгоды в подсказке и показал бы список соответствия опциям (точно так же, как удар).
Пример: Введите имя раздела:
ext*TAB*
extensions
extras
Проблема, я не уверен, как поймать события Tab. Я использую ui.prompt()
API Подвижных, который просто звонит raw_input()
под капотом.
Насколько мне известно, raw_input()
только возвраты на 'входят' и если пользователь вводит вкладку, строка, возвращенная просто, включает a "\t"
.
Для этого вы используете модуль Readline
.
Прошедший код, который я могу подумать:
import readline
COMMANDS = ['extra', 'extension', 'stuff', 'errors',
'email', 'foobar', 'foo']
def complete(text, state):
for cmd in COMMANDS:
if cmd.startswith(text):
if not state:
return cmd
else:
state -= 1
readline.parse_and_bind("tab: complete")
readline.set_completer(complete)
raw_input('Enter section name: ')
Пример использования:
Enter section name: <tab>
email errors extension extra foo foobar stuff
Enter section name: e<tab>
email errors extension extra
Enter section name: ext<tab>
extension extra
Помимо завершения, READLINE
предоставляет вам:
В стандартной библиотеке в качестве модуля rlcompleter поставляется отличный пример выполнения табкомплекса совместно с readline - его нельзя использовать как есть (он завершается на основе имен, определенных в настоящее время в основном и встроенном Python'е), но он показывает, как выполнить общую задачу и как подключить его к readline
.
Вы должны почти наверняка использовать модуль CMD Module , который уже реализует заполнение вкладки и так далее, и, вероятно, другие части того, что вы пытаетесь сделать, используя модуль readline и так далее. Там нет смысла, ориентированного на колесо.