Utiliser le readline
de Python reliures. Par exemple,
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)
La documentation officielle du module n'est pas beaucoup plus détaillée, consultez la documentation readline pour plus d'informations.
Suivez la documentation cmd et tout ira bien
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()
Sortie pour tab -> tab -> envoyer -> tab -> tab -> f -> tab
(Cmd)
help send
(Cmd) send
[email protected] [email protected] [email protected]
(Cmd) send [email protected]
(Cmd)
Puisque vous dites "PAS interprète" dans votre question, je suppose que vous ne voulez pas de réponses impliquant python readline et autres. (modifier :avec le recul, ce n'est évidemment pas le cas. Ho hum. Je pense que cette information est intéressante de toute façon, donc je vais la laisser ici. )
Je pense que vous pourriez être après ça.
Il s'agit d'ajouter une complétion au niveau du shell à des commandes arbitraires, en étendant la propre complétion par tabulation de bash.
En un mot, vous allez créer un fichier contenant une fonction shell qui générera des complétions possibles, enregistrez-le dans /etc/bash_completion.d/
et enregistrez-le avec la commande complete
. Voici un extrait de la page liée :
_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
Dans ce cas, la saisie foo --[TAB]
vous donnera les valeurs dans la variable opts
, soit --help
, --verbose
et --version
. Pour vos besoins, vous voudrez essentiellement personnaliser les valeurs qui sont mises dans opts
.
Jetez un œil à l'exemple sur la page liée, tout est assez simple.