我想为Fish命令实现选项的动态制表符完成。对于-a
开关来说,这很容易,但是我不知道如何为-l
开关做到这一点。
请考虑以下几行:
$ complete -c foo -a '(echo bar\nbaz\nbiz)' -f
$ complete -c foo -l '(echo bar\nbaz\nbiz)' -f
我的外壳的行为如下:
$ foo b<tab>
bar baz biz
$ foo --<tab>
foo --\(echo\ bar\\nbaz\\nbiz\)
相反,我希望它建议三个选项--bar
,--baz
和--biz
。这可能吗?
答案 0 :(得分:1)
edit:现在我了解得更多了。您可以通过使“参数”以短划线开头来实现。下面是使用函数进行说明的示例:
function get_foo_completions
echo --bar
echo --baz
echo --biz
set prev_arg (commandline -pco)[-1]
test "$prev_arg" = print
and echo --conditional
end
complete -c foo -a '(get_foo_completions)' -f
仅当前一个参数为--conditional
时,才会显示print
参数,这说明它们可以是动态的。
据我所知这还不可能。选项是声明性的,只有这些选项的参数可以是动态的。
如果您提供有关用例的更多详细信息,我也许可以建议其他方法。