2012-05-22 8 views
5

ho una funzione come questa:Zsh funzione di completamento automatico sulla base di 2 argomenti

p() { cd ~/Clients/$1/Projects/$2; } 

allora posso digitare:

p "Client here" "Project here" 

e mi porta a:

~/Clients/Client here/Projects/Project here 

Niente speciale sta succedendo qui. Ma come posso implementare il completamento automatico per questa funzione? Sono riuscito a trovare lavoro il completamento automatico per il primo argomento (i clienti):

_p() { _files -W ~/Clients -/; } 
compdef _p p 

Ma come faccio a completamento automatico il secondo argomento (progetti)? Deve essere completato automaticamente dalla cartella basata sul client:

Spero che qualcuno possa aiutare! :-)

risposta

6

Una persona intelligente (mikachu) su IRC ha aiutato:

p() { cd ~/Clients/$1/Projects/$2; } 
_p() { 
    _arguments '1: :->client' '2: :->project' 
    case $state in 
    client) 
     _files -W ~/Clients 
    ;; 
    project) 
     _files -W ~/Clients/$words[CURRENT-1]/Projects 
    ;; 
    esac 
} 
compdef _p p 

UPDATE: Change $ parole [CORRENTE-1] a $ {(Q) parole [CORRENTE-1]} per farlo funzionare con le directory contenenti spazi:

p() { cd ~/Clients/$1/Projects/$2; } 
_p() { 
    _arguments '1: :->client' '2: :->project' 
    case $state in 
    client) 
     _files -W ~/Clients 
    ;; 
    project) 
     _files -W ~/Clients/${(Q)words[CURRENT-1]}/Projects 
    ;; 
    esac 
} 
compdef _p p