2012-05-22 15 views
5

Mam funkcję tak:zsh funkcja autouzupełniania na podstawie 2 argumentów

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

Wtedy mogę wpisać:

p "Client here" "Project here" 

i zajmuje mi:

~/Clients/Client here/Projects/Project here 

Nothing specjalne dzieje tutaj. Ale jak zaimplementować autouzupełnianie dla tej funkcji? Udało mi się dostać pracę autouzupełniania dla pierwszego argumentu (klienci):

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

Ale jak mogę autouzupełniania drugi argument (projektów)? Musi być autouzupełniany z folderu na podstawie klienta:

Mam nadzieję, że ktoś może pomóc! :-)

Odpowiedz

6

Zdolny człowiek (Mikachu) IRC pomagał:

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: Zmiana $ słowa [prądowo-1] do $ {(Q) słowa [prąd 1]} aby działał z katalogami zawierającymi spacje:

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