Execute o comando na conclusão da tabulação no zsh

1

Estou tentando configurar uma função zsh que me levará de volta ao diretório git de nível superior com um argumento opcional para mover em relação a esse diretório. Eu tenho atualmente isso que funciona:

alias gitdir='git rev-parse --show-toplevel'
cdgit() { cd $(gitdir)/$1 }

O problema é que a conclusão da tabulação não funciona corretamente, ela será preenchida automaticamente de qualquer diretório em que eu esteja quando executar cdgit , mas eu quero que ela seja concluída a partir de $(gitdir) . Se eu digitar a seguinte linha antes de executar cdgit , a conclusão funcionará corretamente (de $(gitdir) ):

compctl -W $(gitdir) -/ cdgit

No entanto, não quero digitar esse comando todas as vezes antes de digitar cdgit apenas para concluir a tabulação. Existe alguma maneira que eu possa fazer uma função de conclusão para cdgit que de alguma forma irá executar esse comando para que minha conclusão esteja correta?

    
por Josh Sherick 10.06.2016 / 22:31

1 resposta

2

Sugiro escrever uma função de conclusão para sua função cdgit .

Coloque este arquivo chamado _cdgit em um diretório que esteja em $fpath , por exemplo. /usr/share/zsh/site-functions , depois inicie uma nova instância de shell:

#compdef cdgit

local expl
local ret=1

[[ CURRENT -eq 2 ]] && _wanted directories expl 'git toplevel directory' \
    _path_files -/ -W $(git rev-parse --show-toplevel) && ret=0

return ret

Isto é emprestado de uma das últimas linhas na função _cd de conclusão, que é claro, muito mais complexa.

Demo:

/usr/src/linux-git/Documentation/x86> cd [TAB]
local directory
i386/    x86_64/

/usr/src/linux-git/Documentation/x86> cdgit [TAB]
git toplevel directory
Documentation/  crypto/         include/        lib/            scripts/        usr/                          
arch/           drivers/        init/           mm/             security/       virt/                         
block/          firmware/       ipc/            net/            sound/                                      
certs/          fs/             kernel/         samples/        tools/                                      
    
por 15.06.2016 / 18:46