Я пытаюсь создать простые правила завершения zsh для скрипта менеджера паролей pass
.
pass
хранит свои пароли в структуре каталогов, сами файлы являются .gpg
файлами.
Я хочу дополнить каталоги и файлы по указанному пути $HOME/passwords
, так чтобы имена каталогов были просто дополнены, а имена файлов были дополнены без .gpg
расширения.
Следующие правила корректно дополняют имена каталогов,
#compdef pass
_pass() {
_arguments '1: :->directory'
case $state in
directory)
_directories -W $HOME/passwords
;;
esac
}
но он дополняет имена файлов их полным именем, т. е foo.gpg
. .
Как мне заполнить файлы без .gpg
расширения?
решение1
Основная идея такова _files -g '*.gpg(:r)'
: заполнять *.gpg
файлы, но при этом убирать их расширения, используяr
модификатор историипрошел какквалификатор glob. Однако это не приводит к автоматической вставке пробела после успешного завершения.
Так что звоните_path_files
отдельно для каталогов и файлов явно добавить соответствующий суффикс ( /
или пробел) с -S
(который _path_files
проходит черезcompadd
.
_path_files -W $HOME/passwords -g '*(/)' -S /
_path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' '