我正在尝试在我自己的脚本中使用 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
}
Run Code Online (Sandbox Code Playgroud)
我已经想过创建一个自定义完成函数,_main_complete
它只调用
(或任何合适的函数)并将结果存储在导出的变量中,以便其他函数可以访问它。但是,这也意味着以某种方式调用自定义完成函数 - 我不知道如何调用。甚至有可能在不执行实际完成的情况下获得“中间”完成结果?
我不确定为什么 zsh 不提供此功能...幸运的是,有人进行了破解,以务实/非交互方式使用完成系统: https: //github.com/Valodim/zsh-capture-completion
$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>
Run Code Online (Sandbox Code Playgroud)
这仅允许访问已完成的完成列表。IE。不是内部 zsh 对象(描述等)
(类似的问题:是否可以手动调用zsh补全函数?)