调用 zsh 完成函数并获取其结果

Son*_*van 7 zsh autocomplete

我正在尝试在我自己的脚本中使用 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它只调用 (或任何合适的函数)并将结果存储在导出的变量中,以便其他函数可以访问它。但是,这也意味着以某种方式调用自定义完成函数 - 我不知道如何调用。甚至有可能在不执行实际完成的情况下获得“中间”完成结果?

ole*_*enb 5

我不确定为什么 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补全函数?