У меня есть класс класса с функцией автозаполнения. Простая версия:
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
И выполнить что-то вроде этого, чтобы получить автозаполнение с readline:
import readline
readline.parse_and_bind("tab: complete")
completer = Completer()
readline.set_completer(completer.complete)
user_input =raw_input("> ")
Итак, в этом примере есть 3 слова для автозаполнения [" help ", " mkdir ", " mktbl "].
если пользователь выполняет:
> he<tab>
пользователь получает:
> help
но если пользователь выполняет
> mk<tab>
ничего не происходит, потому что нет ни одного совпадения (mkdir и mktbl)
Как отобразить параметры в случае нескольких совпадений? Как Bash делать с автозаполнением имен файлов?
Таким образом, пользователь получает что-то вроде:
> mk<tab>
mktbl mkdir
> mk<cursor>
P.S. Я пытался поставить
_readline.insert_text (...) _
и
печать ...
в завершающую функцию, но она тормозит вставку, поэтому пользователь получает что-то вроде этого:
> mk<tab>
> mkmktbl mkdir <cursor>
P.P.S Мне нужно решение Linux.