Заполнение клавишей Tab в Интерфейсе командной строки Python - как поймать события Tab

Я пишу немного CLI в Python (как расширение Подвижного) и хотел бы поддерживать заполнение клавишей Tab. А именно, я хотел бы вкладки выгоды в подсказке и показал бы список соответствия опциям (точно так же, как удар).

Пример: Введите имя раздела:

 ext*TAB*  
 extensions  
 extras

Проблема, я не уверен, как поймать события Tab. Я использую ui.prompt() API Подвижных, который просто звонит raw_input() под капотом.

Насколько мне известно, raw_input() только возвраты на 'входят' и если пользователь вводит вкладку, строка, возвращенная просто, включает a "\t".

5
задан Martin Geisler 19 January 2012 в 07:16
поделиться

3 ответа

Для этого вы используете модуль 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 предоставляет вам:

  • редактирование линии
  • конфигурации ключей (режимы EMACS и VI)
  • История (стрелка вверх по вспомнить, предыдущие значения)
  • История истории, сохранение и загрузка
15
ответ дан 18 December 2019 в 09:07
поделиться

В стандартной библиотеке в качестве модуля rlcompleter поставляется отличный пример выполнения табкомплекса совместно с readline - его нельзя использовать как есть (он завершается на основе имен, определенных в настоящее время в основном и встроенном Python'е), но он показывает, как выполнить общую задачу и как подключить его к readline.

2
ответ дан 18 December 2019 в 09:07
поделиться

Вы должны почти наверняка использовать модуль CMD Module , который уже реализует заполнение вкладки и так далее, и, вероятно, другие части того, что вы пытаетесь сделать, используя модуль readline и так далее. Там нет смысла, ориентированного на колесо.

1
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: