2012-05-22 9 views
5

tengo una función como esta:Zsh función de autocompletar basado en 2 argumentos

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

Entonces puede escribir:

p "Client here" "Project here" 

y me lleva a:

~/Clients/Client here/Projects/Project here 

Nada especial pasando aquí. ¿Pero cómo implemento autocompletar para esta función? Me las arreglé para conseguir trabajo terminación automática para el primer argumento (clientes):

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

Pero ¿cómo Autocompletar el segundo argumento (proyectos)? Necesita ser rellenado automáticamente desde la carpeta basada en el cliente: alguien

Esperanza puede ayudar! :-)

Respuesta

6

Una persona inteligente (Mikachu) en el IRC ayudó:

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 

ACTUALIZACIÓN: cambio de $ palabras [Current-1] a $ {(Q) palabras [ACTUAL-1]} para que funcione con directorios que contienen espacios:

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 
Cuestiones relacionadas