パスワード マネージャー スクリプト用のシンプルな 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
履歴修飾子として通過グロブ修飾子ただし、正常に完了した後にスペースが自動的に挿入されるわけではありません。
だから電話して_path_files
ディレクトリとファイルごとに適切なサフィックス(/
またはスペース)を明示的に追加します-S
(これ_path_files
はcompadd
。
_path_files -W $HOME/passwords -g '*(/)' -S /
_path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' '