I am writing zsh completion functions for a couple of commands from the same toolkit.
The commands are different enough that I want to write different completions for them in different files. (i.e. the completion for do_thingA
is in a file _do_thingA
with a #compdef do_thingA
header, and the completion for do_thingB
is in _do_thingB
with #compdef do_thingB
).
As different as they are, the commands all have one argument in common. So with all the things that differ between the commands, at some point all _do_thing
files contain something along the lines
...
_arguments \
...
'-c[common option]:common option:_helper_function' \
...
I would like to avoid having the same _helper_function
defined in all _do_thing
files. And on top I would like to allow users to provide their own (better personalised _helper_function
).
What's the best way to achieve this?
things considered:
definition guard
I already know that I can prevent myself from overwriting the _helper_function
if it is already defined with
(( $+functions[_helper_function] )) ||
_helper_function() {
...
}
which I could put into every of the _do_thing
files. But I would prefer outsourcing the _helper_function
into a separate _helper_function
file.
putting function body in separate file
If I create a file _helper_function
(and have it somewhere in the fpath
) its content will become the function body of a _helper_function
function. In this scenario I don't see how to put the definition guard around the _helper_function()
header (since I don't write it myself anymore).