パスワードマネージャスクリプト用の簡単な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 ' '