2013-07-26 4 views
8

Ich versuche, eine Autocomplete- oder Tab-Complete-Funktion für meine eigenen Befehle zu entwickeln.Wie vervollständige ich verschachtelte, mehrstufige Unterbefehle automatisch?

Zum Beispiel sei angenommen foo meine binär ist:

CLI>> foo [TAB] [TAB] 

Es sollten die wichtigsten Befehle configure und show zeigen.

Dann, wenn ich configure wählen, sollte es zeigen die Subbefehle CM, DSP und NPU:

CLI>> foo [TAB] [TAB] 
DSP NPU CM` 

ich nur wissen, wie man Tabula vollständige und Anzeige für die erste Ebene - wie kann ich die zweite bekommen Niveau auch?

Ich werde dies in /etc/completion.d platzieren.

Mein Code:

_foo() 
{ 
    local cur prev opts 
    COMPREPLY=() 
    cur="${COMP_WORDS[COMP_CWORD]}" 
    prev="${COMP_WORDS[COMP_CWORD-1]}" 
    words=("${COMP_WORDS[@]}") 
    cword=$COMP_CWORD 
    opts="configure show" 
} 

Ich bin fest, wie wie Unter Befehle CMDSPNPU unter configure hinzuzufügen.

Antwort

15

Hier ist ein Beispiel-Skript für Ihren Zwei-Ebenen-Fall (mit einem Abschnitt für Subbefehle von show zu zeigen, wie es gemacht wird - man kann nur diese drei Zeilen gelöscht werden, wenn sie zu Ihrem Fall nicht relevant sind):

_foo() 
{ 
    local cur prev 

    cur=${COMP_WORDS[COMP_CWORD]} 
    prev=${COMP_WORDS[COMP_CWORD-1]} 

    case ${COMP_CWORD} in 
     1) 
      COMPREPLY=($(compgen -W "configure show" -- ${cur})) 
      ;; 
     2) 
      case ${prev} in 
       configure) 
        COMPREPLY=($(compgen -W "CM DSP NPU" -- ${cur})) 
        ;; 
       show) 
        COMPREPLY=($(compgen -W "some other args" -- ${cur})) 
        ;; 
      esac 
      ;; 
     *) 
      COMPREPLY=() 
      ;; 
    esac 
} 

complete -F _foo foo 

Hoffentlich ist es ziemlich offensichtlich von diesem Beispiel, wie Sie es zu Drei-Ebenen-Kommandos usw. auch erweitern würden.

+0

Genau das brauchte ich. Lass mich zu dir kommen, wenn ich weiterkomme. – Puneeth

+0

Interessant, wie viel cooles Zeug man hier finden kann ;-) – GhostCat

Verwandte Themen