我有一个命令,可以连接到远程计算机,因此完成应该基于用户提供的计算机。这意味着,如果用户通过,-D DEVICE_ID
我希望完成为该特定机器提供项目。
我找不到访问参数函数中现有参数的方法。例如我有这样的完成:
complete --command xxx --force-files --arguments "(__fish_complete_pids) (get_process_names)"
我希望 get_process_names 使用提供的标志从正确的机器获取进程。
答案1
您可以通过解析命令行文本以查找感兴趣的标记来实现此目的。内置commandline
函数可以方便地遍历当前进程的标记(因此我们不会在管道的其他部分获取 -D 标记)。
这是一个提供先前标记的完成的示例。如果您完成,example -D alpha -D beta
它将提供“ALPHA”和“BETA”作为完成:
function example_completer
# Tokenize the current process, up to the cursor.
# Find the indices of the "-D" tokens.
# Offer the next tokens as completions (but uppercase).
# -o means tokenize, -p means current process only, -c means stop at cursor.
set tokens (commandline -opc)
for idx in (seq (count $tokens))
if test $tokens[$idx] = '-D'
set next_idx (math $idx + 1)
string upper -- $tokens[$next_idx]
end
end
end
complete -c example --no-files --arguments '(example_completer)'
由此您应该能够找到 DEVICE_ID 并从相应的机器进行查询。