regras de conclusão zsh - remova a extensão do arquivo do resultado de conclusão

regras de conclusão zsh - remova a extensão do arquivo do resultado de conclusão

Estou tentando criar regras simples de conclusão zsh para um script de gerenciador de senhas pass.

passarmazena suas senhas na estrutura de diretórios, os arquivos em si são .gpgarquivos.

Quero completar diretórios e arquivos em determinado caminho $HOME/passwords, para que os nomes dos diretórios sejam simplesmente preenchidos e os nomes dos arquivos sejam concluídos sem .gpgextensão

As regras a seguir completam os nomes dos diretórios corretamente,

#compdef pass

_pass() {
    _arguments '1: :->directory'
    case $state in

    directory)
        _directories -W $HOME/passwords
    ;;

    esac
}

mas completa os nomes dos arquivos pelo nome completo, ou seja foo.gpg, .

Como posso completar arquivos sem a .gpgextensão?

Responder1

A ideia básica é _files -g '*.gpg(:r)': completar *.gpgos arquivos, mas retirar suas extensões ao fazê-lo, usando or modificador de históricopassou como umqualificador global. No entanto, isso não insere automaticamente um espaço após a conclusão bem-sucedida.

Então ligue_path_filesseparadamente para diretórios e arquivos para adicionar o sufixo apropriado ( /ou um espaço) explicitamente com -S(que _path_filespassa paracompadd.

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

informação relacionada