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