从嵌套函数调用时 compadd 不起作用



我一直在做一些自定义补全,但遇到了问题。它使用一些自定义选项扩展了现有的完成脚本。完整文件可在此处找到https://github.com/rothgar/k/blob/zsh-completion/completions/zsh/k

我有一个名为__k_handle_kspace的自定义函数,它查看当前单词并执行基本的大小写语句,然后调用另一个函数。(在此处粘贴没有注释和额外选项的代码(

__k_handle_kspace() {
cur="${words[$CURRENT]}"
case $cur in
+* )
__k_kspace_parse_config_contexts
;;
@* )
__k_kspace_parse_config_clusters
esac

当我设置compdef __k_handle_kspace k时,这非常有效,所有选项卡的完成都是我想要的。完整的__k_kspace_parse_config_*功能可以在这里找到

默认情况下,完成使用调用__k_handle_word__start_k,然后调用我的__k_handle_kspace函数。

当我设置compdef __start_k k时,我可以看到我的函数被调用(使用set -x进行调试(,compadd是最后调用的东西,但没有显示选项卡完成。

当我使用默认完成时,我还必须在__k_handle_kspace函数中将cur变量更改为cur="${words[$(($CURRENT -1))]}"

我不知道是否有一个变量需要我从函数中设置/返回,或者何时可以调用compadd返回完成值的规则。


您正在扩展的完成代码是基于bashcompinit的。因此,您需要将代码编写为Bash完成函数。这意味着您应该将完成匹配项添加到数组COMPREPLY中。因为函数返回时该数组为空,所以_bash_complete会向Zsh的_main_complete报告它失败了。

因此,简而言之:将您的完成匹配项添加到COMPREPLY,而不是使用compadd,这样应该可以修复它

相关内容

  • 没有找到相关文章

最新更新