2013-07-26 14 views
8

Sto provando a sviluppare una funzionalità di completamento automatico o di tabulazione completa per il mio set di comandi.Come si completano automaticamente i sottocomandi nidificati a più livelli?

Ad esempio, supponiamo foo è il mio binario:

CLI>> foo [TAB] [TAB] 

dovrebbe mostrare i comandi principali configure e show.

Poi se seleziono configure, dovrebbe mostrare i sottocomandi CM, DSP e NPU:

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

Io so solo come scheda-completa e visualizzazione per il primo livello - come posso ottenere la seconda livello pure?

Inserirò questo in /etc/completion.d.

My 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" 
} 

mi sono bloccato come il modo per aggiungere comandi secondari CMDSPNPU sotto configure.

risposta

15

Ecco un esempio di script per il vostro caso a due livelli (con una sezione per i sottocomandi di show per mostrare come si fa - si può solo eliminare quelle tre righe se non sono rilevanti per il vostro caso):

_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 

Speriamo che sia abbastanza ovvio da questo esempio come estenderlo ai comandi a tre livelli, ecc.

+0

Questo è esattamente quello di cui avevo bisogno. Permettimi di tornare da te mentre avanzo. – Puneeth

+0

Interessante, quante cose belle si possono trovare qui intorno ;-) – GhostCat

Problemi correlati