Модуль чтения строки Python: Установить 2 символьный разделитель - PullRequest
2 голосов
/ 02 сентября 2011

Я использую модуль readline для автозаполнения имен (имя, фамилия).

Я хочу установить 2-символьный разделитель, но, установив readline.set_completer_delims(', '), он принимает запятую и пробел в качестве разделителя. Но я хочу только комбинацию.

Проблема в том, что теперь я ввожу имя, которое существует несколько раз, с разными фамилиями. Вместо того, чтобы предлагать все возможные фамилии в завершении, readline думает, что символ пробела является разделителем, и начинает предлагать все имена снова.

Как я могу решить эту проблему?


Дополнительная информация: я уже использую пользовательскую функцию завершения:

# Configure and enable tab completion
def completer(text, state):
    """Contacts completer function for readline module"""
    options = [x[2].strip() for x in contacts
               if x[2].lower().startswith(text.strip().lower())]
    try:
        return options[state] + ', '
    except IndexError:
        return None

readline.set_completer(completer)

Проблема не в том, что функция работает неправильно. Я отладил его, и при заполнении слова, заканчивающегося пробелом (например, "simon "), значение text, передаваемое завершителю, равно " " вместо "simon ".

1 Ответ

0 голосов
/ 02 сентября 2011

Вам, вероятно, придется использовать свою собственную функцию для этого, с

readline.set_completer([function])

Из документа Python:

"Функция завершения вызывается как функция (текст, состояние), длясостояние в 0, 1, 2, ..., пока он не вернет нестроковое значение. Он должен вернуть следующее возможное завершение, начинающееся с текста. "

...