Función de autocompletar Zsh basada en 2 argumentos
Frecuentes
Visto 1,084 veces
5
Tengo una función como esta:
p() { cd ~/Clients/$1/Projects/$2; }
Entonces puedo escribir:
p "Client here" "Project here"
y me lleva a:
~/Clients/Client here/Projects/Project here
Aquí no pasa nada especial. Pero, ¿cómo implemento autocompletar para esta función? Logré obtener el trabajo de autocompletado para el primer argumento (clientes):
_p() { _files -W ~/Clients -/; }
compdef _p p
Pero, ¿cómo autocompletar el segundo argumento (proyectos)? Debe autocompletarse desde la carpeta según el cliente:
~/Clients/$1/Projects
¡Espero que alguien pueda ayudar! :-)
1 Respuestas
8
Una persona inteligente (Mikachu) en 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: Cambie $words[CURRENT-1] a ${(Q)words[CURRENT-1]} para que funcione con directorios que contengan 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
contestado el 22 de mayo de 12 a las 12:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas terminal zsh zsh-completion or haz tu propia pregunta.