我正在尝试在我自己的脚本中使用 zsh 的完成小部件。在某一时刻,我希望能够访问 zsh 中活动的每个完成的结果,或者更确切地说,我希望获得完成链的最终结果。
function foo() {
do_unrelated_stuff()
# call zsh completion
comp_results=_main_complete_() # won't work like this, can only be called from within a completion function
if [[ "$#comp_results" -gt "0" ]]; then
# do something
echo "results:"
else
# do something else
echo "no results"
fi
}
我已经考虑过创建一个自定义完成函数,该函数仅调用
_main_complete
(或任何合适的函数)并将结果存储在导出的变量中,以便其他函数可以访问它。然而,这也意味着以某种方式调用自定义完成函数 - 而且我不知道如何调用。是否有可能在不执行实际完成的情况下获得“中间”完成结果?
答案1
我不知道为什么 zsh 不提供这个功能...幸运的是有人做了一个 hack 实用/非交互地使用完成系统:https://github.com/Valodim/zsh-capture-completion
$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>
这仅允许访问已完成的完成列表。 IE。不是内部 zsh 对象(描述等)
(类似的问题:是否可以手动调用 zsh 完成功能?)