Ich versuche, einfache Zsh-Vervollständigungsregeln für ein Passwort-Manager-Skript zu erstellen pass
.
pass
speichert seine Passwörter in einer Verzeichnisstruktur, die Dateien selbst sind .gpg
Dateien.
Ich möchte Verzeichnisse und Dateien im angegebenen Pfad vervollständigen $HOME/passwords
, sodass Verzeichnisnamen einfach vervollständigt werden und Dateinamen ohne .gpg
Erweiterung vervollständigt werden
Die folgenden Regeln vervollständigen Verzeichnisnamen korrekt,
#compdef pass
_pass() {
_arguments '1: :->directory'
case $state in
directory)
_directories -W $HOME/passwords
;;
esac
}
aber es vervollständigt Dateinamen mit ihrem vollständigen Namen, d. h foo.gpg
.
Wie kann ich Dateien ohne die Erweiterung vervollständigen .gpg
?
Antwort1
Die Grundidee ist _files -g '*.gpg(:r)'
: *.gpg
Dateien vervollständigen, dabei aber ihre Erweiterung entfernen, mit demr
Verlaufsmodifikatorbestanden alsGlob-Qualifizierer. Allerdings wird nach erfolgreicher Vervollständigung nicht automatisch ein Leerzeichen eingefügt.
Also rufe_path_files
/
getrennt für Verzeichnisse und Dateien, um das entsprechende Suffix ( oder ein Leerzeichen) explizit hinzuzufügen -S
(das _path_files
durchgeht zucompadd
.
_path_files -W $HOME/passwords -g '*(/)' -S /
_path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' '