Dynamisches Verhalten der Bash-Vervollständigung

Dynamisches Verhalten der Bash-Vervollständigung

Ich hätte gerne zwei verschiedene Verhaltensweisen von „Tab“, je nach Nutzungskontext.
Ich hätte gerne das Standardverhalten, das bind '"\t":complete'immer gilt, außer wenn Benutzer versuchen, Argumente des Befehls „mybashfunction“ zu vervollständigen. In diesem Fall rufe ich eine spezielle Funktion auf, um die Vervollständigung zu generieren, aber ich möchte, dass „Tab“ so funktioniert, als wäre es bind '"\t":menu-complete'festgelegt.

Antwort1

Ich glaube, dass die Readline-Bibliothek jeweils nur eine Art von Tab-Vervollständigungsverhalten unterstützt.

Antwort2

Antwort3

Sie können dies erreichen, indem Sie vollständige Bash-Regeln verwenden …

_myfunc() {
    _opts="zero one two"
    # COMPREPLY is bash built-in for array of possible completions
    COMPREPLY=()
    # cur & prev are current & previous words typed in shell
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    COMPREPLY=( $( compgen -W "${_opts}" -- ${cur} ))
    return 0
}
complete -F _myfunc myfunc

Dadurch wird die normale Vervollständigung von Bash nicht berührt, aber wenn Sie myfunc mit der Tab-Taste vervollständigen, stehen Ihnen als mögliche Vervollständigungen „null eins zwei“ zur Verfügung.

Bearbeiten: Oh ja, stopfen Sie das in Ihre Bashrc oder Ähnliches, damit es in neuen Shells als Quelle verwendet wird.

verwandte Informationen