Ubuntu 13.10和fish 2.1.0我想自己写一个Python脚本来从命令行执行一些任务。脚本将需要命令行参数。
我如何编写我的脚本,以便fish可以请求并获得给定参数的可能值。潜在值的列表是动态的。也就是说,它将以编程方式确定(例如,匹配某些标准的文件夹名称的列表)。
我想要的最终结果是这样的:
user@machine ~> myprog argument=fol<TAB>
folder1 folder2 folder3
字符串
其中myprog
是我的脚本文件,argument
是参数名称,folder1
等是由我的脚本中的某个函数生成的有效值。
这可能吗?如果可能,又是如何做到的呢?
3条答案
按热度按时间33qvvth11#
改编自zanchey在GitHub上的评论:
如果你有一个程序
myprog
,它接受--_completion
选项,你可以为myprog
写一个完整的存根,看起来像这样:字符串
然后,您的程序将作为
myprog --_completion myprog some arguments here
被调用,您可以使用适当的补全来响应。它应该只返回当前正在完成的token(您也可以使用(commandline -ct)
将其传递给程序,或者自己标记它),然后可以选择一个选项卡和一个简短的描述。多个完成用新行分隔。备注:
--_completion
是python-selfcompletion库建议的约定,但是您可以使用任何您想要的东西,并且这个答案不是Python特有的对于Python脚本,以下库可能会在将来的某个时候支持fish补全(但目前还没有):
lvjbypge2#
你应该为你的脚本创建一个fish autocomplete function和
source
,或者把它放在~/.config/fish/completions/myprog.fish
文件夹中。参考:fish docs
yduiuuwa3#
我想在一些边缘情况下完成@lofidevops的答案。
在我的例子中,我使用的是https://pkg.go.dev/github.com/jessevdk/go-flags,它的工作原理类似,但希望所有参数都单独传递,而不仅仅是一个带有空格的参数。
(commandline -cp)
不返回参数列表,而是返回一个带空格的字符串。在我的例子中,以下完整的函数工作起来很有魅力:
字符串