правила завершения zsh - удалить расширение файла из результата завершения

правила завершения zsh - удалить расширение файла из результата завершения

Я пытаюсь создать простые правила завершения 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 ' '

Связанный контент