Verwenden Sie Pythons readline
Bindungen. Zum Beispiel
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)
Die offizielle Moduldokumentation ist nicht viel detaillierter, siehe die Readline-Dokumentation für weitere Informationen.
Befolgen Sie die cmd-Dokumentation und Sie werden in Ordnung sein
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()
Ausgabe für tab -> tab -> send -> tab -> tab -> f -> tab
(Cmd)
help send
(Cmd) send
[email protected] [email protected] [email protected]
(Cmd) send [email protected]
(Cmd)
Da Sie in Ihrer Frage "NOT Interpreter" sagen, möchten Sie vermutlich keine Antworten mit Python-Readline und dergleichen. (bearbeiten :im Nachhinein ist das offensichtlich nicht der Fall. Ho hm. Ich denke, diese Informationen sind trotzdem interessant, also lasse ich sie hier. )
Ich denke, Sie könnten hinter dem her sein.
Es geht darum, beliebigen Befehlen eine Vervollständigung auf Shell-Ebene hinzuzufügen und die eigene Tab-Vervollständigung von bash zu erweitern.
Kurz gesagt, Sie erstellen eine Datei, die eine Shell-Funktion enthält, die mögliche Vervollständigungen generiert, speichern Sie sie in /etc/bash_completion.d/
und registrieren Sie es mit dem Befehl complete
. Hier ist ein Ausschnitt von der verlinkten Seite:
_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 diesem Fall die Eingabe von foo --[TAB]
gibt Ihnen die Werte in der Variablen opts
, also --help
, --verbose
und --version
. Für Ihre Zwecke sollten Sie im Wesentlichen die Werte anpassen, die in opts
eingefügt werden .
Schauen Sie sich das Beispiel auf der verlinkten Seite an, es ist alles ziemlich einfach.