他の標識の魚の完成に応じて

他の標識の魚の完成に応じて

リモートマシンに接続するコマンドがあるため、ユーザーが提供したマシンに基づいて完了する必要があります。これは、ユーザーが合格すると、その特定のマシンの-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を見つけて、そのマシンでクエリできます。

関連情報