Как сделать так, чтобы отображение автозаполнения python соответствовало?

У меня есть класс-завершитель с автозаполнением функция. Простая версия:

class Completer:
    def __init__(self):
        self.words = ["mkdir","mktbl", "help"]
        self.prefix = None

    def complete(self, prefix, index):
        if prefix != self.prefix:
            self.matching_words = [w for w in self.words if w.startswith(prefix)]
            self.prefix = prefix
        else:
            pass                
        try:
            return self.matching_words[index]
        except IndexError:
            return None

И выполните что-то вроде этого, чтобы получить автозаполнение с помощью строки чтения:

import readline
readline.parse_and_bind("tab: complete")

completer = Completer()
readline.set_completer(completer.complete)
user_input =raw_input("> ")

Итак, есть 3 слова для автозаполнения [« help », « mkdir ] "," mktbl "] в примере.

если пользователь выполняет:
> he
, пользователь получает:
> help

, но если пользователь выполняет
> mk
ничего не происходит, потому что нет ни одного совпадения (mkdir и mktbl)

Как отобразить параметры, если совпадений несколько? Как Bash делает с автозаполнением имен файлов?

Таким образом, пользователь может получить что-то вроде:
> mk
mktbl mkdir
> mk


PS У меня есть пробовал поставить
_readline.insert_text (...) _
и
print ...
в функцию завершения, но это тормозит вставку, поэтому пользователь получает что-то вроде этого:
> mk
> mkmktbl mkdir

PPS I требуется решение для Linux.

7
задан MajesticRa 1 February 2011 в 23:34
поделиться