2013-07-26 27 views
8

Kendi komut dizim için otomatik tamamlama veya sekme tamamlama özelliğini geliştirmeye çalışıyorum.İç içe geçmiş, çok düzeyli alt komutları otomatik olarak nasıl tamamlarım?

Örneğin, foo benim ikili olduğunu varsayalım:

CLI>> foo [TAB] [TAB] 

ana komutlar configure ve show göstermelidir. - nasıl ikinci alabilirim

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

Ben sadece ne kadar ilk seviye için sekme tamamlama ve ekran biliyorum: Ben configure seçerseniz

Sonra, alt komutunu CM, DSP ve NPU göstermelidir seviyesi de mi?

Bunu /etc/completion.d ürününe yerleştireceğim.

Benim Kod:

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

Ben CMDSPNPUconfigure altındaki alt komutları nasıl ekleneceği olarak sıkıştım.

_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 
: - (bunlar durumda alakalı değilseniz sadece bu üç satırlık silebilirsiniz nasıl yapıldığını göstermek için show ait alt komutlarının bir bölümle) İşte

cevap

15

senin iki seviyeli durumlar için örnek bir senaryo

Umarız, bu örnekten üç düzeyli komutlara vb. Nasıl genişleteceğiniz de oldukça açıktır.

+0

Tam olarak ihtiyacım olan şey buydu. Ben ilerlediğimde size geri döneyim. – Puneeth

+0

İlginç, ne kadar havalı şeyler burada bulabilirsiniz ;-) – GhostCat