원격 머신에 연결하는 명령이 있어서 사용자가 제공한 머신을 기반으로 완료해야 합니다. 이는 사용자가 통과하면 -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를 찾아 해당 머신에서 쿼리할 수 있습니다.