fish - 编写 __fish_is_first_arg,但包含 arg 的参数
问题描述
我正在为谷歌的 to-webp 转换器cwebp编写一个完成文件。它的帮助说这-preset
应该出现在所有其他论点之前。考虑到这一点,我尝试使用 限制其可用性__fish_is_first_arg
,如下所示:
complete -c cwebp -x -n '__fish_is_first_arg' -o preset -a 'default photo picture drawing icon text' -d 'Preset setting'
cwebp -o -pres<Tab>
这会让它不建议-preset
,这就是我想要的。
同时,cwebp -pres<Tab>
将参数填写完整-preset
,这也是我想要的。
但是,当我在 处按 Tab 键时cwebp -preset <Tab>
,给出的唯一建议是当前目录中的文件和目录。这不是我想要的。
考虑到这一点,我想我必须编写一个“是第一个或第二个选项”函数。然而,进展并不顺利。这是我到目前为止所拥有的:
function __fish_cwebp_is_first_option_or_its_argument
set -l tokens (commandline -co)
# line alpha
switch (count tokens)
case 1
return 0
case 2
if test \( "$tokens[2]" = '-preset' \)
return 0
end
return 1
case '*'
# line beta
breakpoint
return 1
end
end
据我所知,这个函数体的工作方式与return 0
( (true)
) 相同。无论如何,-pres<Tab>
完成到-preset
,即使线条看起来像cwebp -h -H -version -pres<Tab>
。
当我在 alpha 行上设置断点时,我可以echo $tokens
看到我完全输入的所有标记(最后一个标记和光标之间至少需要一个空格)。但是,当我在 beta 行上只有一个断点时,我什至无法触发断点。甚至没有cwebp -h -H -version -pres<Tab>
如上所述。
我究竟做错了什么?
解决方案
switch (count tokens)
应该:
switch (count $tokens)
(对于其他阅读此内容的人: $ 激活变量扩展。count $tokens
扩展变量tokens
并计算其值,而count tokens
仅计算单个文字“令牌”)。
推荐阅读
- function - 如何从泛型结构调用非泛型关联函数?
- c# - 实体框架核心数据库
- scala - scala 使用的是二进制发行版附带的 akka,而不是 sbt 的发行版
- r - 如何使用 R data.frame 的多列查找平均值?
- c# - Visual Studio SourceLink Nuget 集成与单独的解决方案调试
- ms-access - MS Access - 对不同数据库的引用
- javascript - 通过添加新元素来调整容器大小的问题
- javascript - 处理 Immutable.js 列表并提取唯一对象
- java - 使用 JTable 和 JButton 搜索 ArrayList
- c - C中的“未分配被释放的指针”