Usa readline
di Python attacchi. Ad esempio,
import readline
def completer(text, state):
options = [i for i in commands if i.startswith(text)]
if state < len(options):
return options[state]
else:
return None
readline.parse_and_bind("tab: complete")
readline.set_completer(completer)
I documenti ufficiali del modulo non sono molto più dettagliati, vedi i documenti readline per maggiori informazioni.
Segui la documentazione cmd e starai bene
import cmd
addresses = [
'[email protected]',
'[email protected]',
'[email protected]',
]
class MyCmd(cmd.Cmd):
def do_send(self, line):
pass
def complete_send(self, text, line, start_index, end_index):
if text:
return [
address for address in addresses
if address.startswith(text)
]
else:
return addresses
if __name__ == '__main__':
my_cmd = MyCmd()
my_cmd.cmdloop()
Output per tab -> tab -> invia -> tab -> tab -> f -> tab
(Cmd)
help send
(Cmd) send
[email protected] [email protected] [email protected]
(Cmd) send [email protected]
(Cmd)
Dato che dici "NON interprete" nella tua domanda, immagino che tu non voglia risposte che coinvolgono python readline e simili. (modifica :col senno di poi, ovviamente non è così. Uhm. Penso che queste informazioni siano comunque interessanti, quindi le lascerò qui. )
Penso che potresti essere alla ricerca di questo.
Si tratta di aggiungere il completamento a livello di shell a comandi arbitrari, estendendo il completamento tramite tabulazione di bash.
In poche parole, creerai un file contenente una funzione shell che genererà possibili completamenti, salvalo in /etc/bash_completion.d/
e registrarlo con il comando complete
. Ecco uno snippet dalla pagina collegata:
_foo()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--help --verbose --version"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F _foo foo
In questo caso, la digitazione foo --[TAB]
ti darà i valori nella variabile opts
, ovvero --help
, --verbose
e --version
. Per i tuoi scopi, vorrai essenzialmente personalizzare i valori inseriti in opts
.
Dai un'occhiata all'esempio nella pagina collegata, è tutto piuttosto semplice.