取决于其他标志的鱼完成情况

取决于其他标志的鱼完成情况

我有一个命令,可以连接到远程计算机,因此完成应该基于用户提供的计算机。这意味着,如果用户通过,-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 并从相应的机器进行查询。

相关内容