.png)
Estou escrevendo funções de conclusão zsh para alguns comandos do mesmo kit de ferramentas.
Os comandos são diferentes o suficiente para que eu queira escrever conclusões diferentes para eles em arquivos diferentes. (ou seja, a conclusão de do_thingA
está em um arquivo _do_thingA
com um #compdef do_thingA
cabeçalho e a conclusão de do_thingB
está em _do_thingB
with #compdef do_thingB
).
Por mais diferentes que sejam, todos os comandos têm um argumento em comum. Portanto, com todas as coisas que diferem entre os comandos, em algum momento todos _do_thing
os arquivos contêm algo parecido
...
_arguments \
...
'-c[common option]:common option:_helper_function' \
...
Gostaria de evitar ter o mesmo _helper_function
definido em todos _do_thing
os arquivos. E ainda por cima, gostaria de permitir que os usuários forneçam os seus próprios (melhor personalizados _helper_function
).
Qual é a melhor maneira de conseguir isso?
coisas consideradas:
guarda de definição
Eu já sei que posso evitar sobrescrever _helper_function
se já estiver definido com
(( $+functions[_helper_function] )) ||
_helper_function() {
...
}
que eu poderia colocar em cada um dos _do_thing
arquivos. Mas eu preferiria terceirizar isso _helper_function
em um arquivo separado _helper_function
.
colocando o corpo da função em arquivo separado
Se eu criar um arquivo _helper_function
(e tê-lo em algum lugar no arquivo fpath
), seu conteúdo se tornará o corpo da função _helper_function
. Nesse cenário, não vejo como colocar a proteção de definição em volta do _helper_function()
cabeçalho (já que não escrevo mais).
Responder1
Um método seria colocar _helper_function
em algum lugar fpath
e depois em.zshrc
autoload -U _helper_function
Então, se o usuário quiser personalizá-lo, basta colocar um novo _helper_function
arquivo fpath
de forma que a versão dele seja encontrada antes da sua, por exemplo, em um firstfuncdir
:
% cd
% mkdir firstfuncdir
% fpath=(~/firstfuncdir $fpath)
% print -l $fpath
/Users/jhqdoe/firstfuncdir
/Users/jhqdoe/.zsh/functions/darwin
/Users/jhqdoe/.zsh/functions
/usr/local/share/zsh/site-functions
/opt/local/share/zsh/site-functions
/opt/local/share/zsh/5.5.1/functions
%