zsh-Vervollständigungsregeln - Dateierweiterung aus Vervollständigungsergebnis entfernen

zsh-Vervollständigungsregeln - Dateierweiterung aus Vervollständigungsergebnis entfernen

Ich versuche, einfache Zsh-Vervollständigungsregeln für ein Passwort-Manager-Skript zu erstellen pass.

passspeichert seine Passwörter in einer Verzeichnisstruktur, die Dateien selbst sind .gpgDateien.

Ich möchte Verzeichnisse und Dateien im angegebenen Pfad vervollständigen $HOME/passwords, sodass Verzeichnisnamen einfach vervollständigt werden und Dateinamen ohne .gpgErweiterung 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)': *.gpgDateien 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_filesdurchgeht zucompadd.

_path_files -W $HOME/passwords -g '*(/)' -S /
_path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' '

verwandte Informationen