Estoy intentando crear reglas simples de finalización de zsh para un script de administrador de contraseñas pass
.
pass
almacena sus contraseñas en la estructura de directorios, los archivos en sí son .gpg
archivos.
Quiero completar directorios y archivos en la ruta dada $HOME/passwords
, de modo que los nombres de los directorios se completen simplemente y los nombres de los archivos se completen sin .gpg
extensión.
Las siguientes reglas completan los nombres de directorio correctamente,
#compdef pass
_pass() {
_arguments '1: :->directory'
case $state in
directory)
_directories -W $HOME/passwords
;;
esac
}
pero completa los nombres de archivos por su nombre completo, es decir foo.gpg
.
¿Cómo puedo completar archivos sin la .gpg
extensión?
Respuesta1
La idea básica es _files -g '*.gpg(:r)'
: completar *.gpg
archivos, pero quitarles su extensión mientras lo hace, usando elr
modificador de historiapasó como uncalificador global. Sin embargo, esto no inserta automáticamente un espacio después de una finalización exitosa.
Entonces llama_path_files
por separado para directorios y archivos para agregar el sufijo apropiado ( /
o un espacio) explícitamente con -S
(que _path_files
pasa acompadd
.
_path_files -W $HOME/passwords -g '*(/)' -S /
_path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' '