Posiadam rodzaj klasy zakończenia z funkcją autouzupełniania. Prosta wersja:Jak dopasować wyświetlanie autouzupełniania Pythona?
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
i wykonać coś takiego dostać autouzupełnianie z readline:
import readline
readline.parse_and_bind("tab: complete")
completer = Completer()
readline.set_completer(completer.complete)
user_input =raw_input("> ")
Tak, istnieją 3 wyrazy do automatycznego uzupełniania [ "pomocy", "mkdir "," mktbl "] w przykładzie.
jeśli użytkownik wykonuje:
> he<tab>
użytkownik otrzymuje:
> help
ale jeśli użytkownik wykonuje
> mk<tab>
nic się nie dzieje, ponieważ nie są pojedynczy mecz (mkdir i mktbl)
Jak wyświetlić opcje w przypadku kilku dopasowań? Podobnie jak Bash z autouzupełnianiem nazw plików?
Zatem użytkownik whold uzyskać coś takiego:
> mk<tab>
mktbl mkdir
> mk<cursor>
PS: Próbowałem umieścić
_readline.insert_text (...) _
i
druku ...
do funkcji Completer ale hamulce wprowadzenie, więc użytkownik dostaje coś takiego:
> mk<tab>
> mkmktbl mkdir <cursor>
PPS Potrzebuję rozwiązania linuxowego.
To nie jest kompletna odpowiedź i może to być przesada dla czegoś tak prostego, ale użycie 'curses' jest dobrym (choć złożonym) sposobem na zrobienie tego rodzaju rzeczy: http://docs.python.org /library/curses.html Obejrzyj samouczek: http://docs.python.org/howto/curses.html#curses-howto –
Może być! Dziękuję Ci! Ale jesteśmy absolutnie zadowoleni z funkcjonalności readline. A jedyne, czego potrzebujemy, to wyświetlanie opcji w autouzupełnianiu. Przyjrzeliśmy się klątwom, ale jest to zbyt skomplikowane, jeśli chodzi o tylko jedną drobną rzecz. – MajesticRa
Interesujące pytanie, miałem pomysły na podobną rzecz. – Skurmedel