登录
首页 >  Golang >  Go问答

是否可以通过外部完成命令动态修改 compopts?

来源:stackoverflow

时间:2024-04-09 14:09:33 119浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《是否可以通过外部完成命令动态修改 compopts?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我正在用 golang 编写一个 bash 补全程序。事实上,该程序是它自己的完成程序,因为它会查找 comp_line 环境变量,如果存在,则输出完成选项,如果不存在,则继续运行主程序。

然后使用以下命令安装完成:

complete -C /path/to/my-program my-program

这个效果很好。对于我的大多数补全,我希望在单词补全后添加一个空格,但是对于一些标志,我不希望发生这种情况。

定义完成后,您可以设置 -o nospace 选项以在完成单词时省略尾随空格。然而,所有需要空格的补全都必须明确添加到补全单词列表中。

有什么方法可以让我的程序根据它返回的完成情况动态修改完整的选项?这是否公开为完成命令可以设置的环境变量?

我希望避免在所有其他完成中附加一个空格,只是为了避免在边缘情况下出现一个我不希望发生这种情况的标志。


解决方案


我的 perl 框架 (Perinci::CmdLine) 也做了同样的事情:脚本是自己完成的,使用完整的 -c scriptname scriptname 激活(当脚本位于 path 中时)。与使用 shell 函数相比,使用外部命令完成有其优点和缺点。为了解决您遇到的问题,我输出了一个带有额外空格的虚拟答案。由于答案不止一个,bash 不再自动添加空格。因此,不要只是返回(以 json 表示法):

["-o"]

你返回:

["-o","-o "]

我在完成路径时也使用了这个技巧。为了允许用户通过“向下钻取”完成路径,当有一个目录匹配时,我输出:

["dirname/","dirname/ "]

这样用户就可以再次按 tab 来深入了解路径内部,而不是在“dirname/”之后获取空格,并且必须再次退格并按 tab。

好了,本文到此结束,带大家了解了《是否可以通过外部完成命令动态修改 compopts?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>