У меня есть класс-завершитель с автозаполнением функция. Простая версия:
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.