Ho una sorta di classe di completamento con una funzione di completamento automatico. Versione semplice:Come rendere le corrispondenze di visualizzazione del completamento automatico di 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
ed eseguire qualcosa di simile a questo per ottenere il completamento automatico con readline:
import readline
readline.parse_and_bind("tab: complete")
completer = Completer()
readline.set_completer(completer.complete)
user_input =raw_input("> ")
Quindi, ci sono 3 parole per il completamento automatico [ "aiuto", "mkdir "," mktbl "] nell'esempio.
se un utente esegue:
> he<tab>
l'utente ottiene:
> help
ma se l'utente esegue
> mk<tab>
non sta succedendo niente perché non ci sono una singola partita (mkdir e mktbl)
Come visualizzare le opzioni in caso ci siano più partite? Come il Bash fare con un completamento automatico dei nomi di file?
Così utente whold ottenere qualcosa di simile:
> mk<tab>
mktbl mkdir
> mk<cursor>
P.S. Ho cercato di mettere
_readline.insert_text (...) _
e
stampa ...
in funzione di completamento, ma i freni l'inserimento, in modo che un utente ottiene qualcosa di simile:
> mk<tab>
> mkmktbl mkdir <cursor>
PPS Ho bisogno di una soluzione Linux.
Questa non è una risposta completa, e potrebbe essere eccessivo per qualcosa di così semplice, ma usare 'curses' è un buon (anche se complesso) modo di fare questo genere di cose: http://docs.python.org /library/curses.html Dai un'occhiata al tutorial qui: http://docs.python.org/howto/curses.html#curses-howto –
Potrebbe essere! Grazie! Ma siamo assolutamente soddisfatti della funzionalità fornita da readline. E l'unica cosa di cui abbiamo bisogno è mostrare queste opzioni al completamento automatico. Abbiamo esaminato le maledizioni, ma è davvero troppo complesso solo per una piccola cosa come questa. – MajesticRa
Interessante domanda, ho avuto idee su una cosa simile. – Skurmedel