다른 표지판의 물고기 완성에 따라

다른 표지판의 물고기 완성에 따라

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

관련 정보