zsh에서 사용자 정의 완성 기능이 있는 경로에 자동 완성을 추가하는 방법은 무엇입니까?

zsh에서 사용자 정의 완성 기능이 있는 경로에 자동 완성을 추가하는 방법은 무엇입니까?

저는 입니다 audtool. 예를 들면 다음과 같습니다.

#compdef audtool

_audtool() { 
    local state

_arguments \
    '1: :->csi'\

case $state in
csi)
    _arguments '1::(
    --current-song
    --current-song-filename 
    --help
    --playlist-addurl)'
;;
esac
}

_audtool "$@"

위 함수는 자동 완성 후 파일에 경로를 추가하려고 할 때 경로가 확장되지 않는 한 가지 결함을 제외하고는 잘 작동합니다. 내가 묻고 싶은 것은 왜 안 되느냐는 것이다.

audtool --playlist-addurl /h

다음으로 확장

audtool --playlist-addurl /home/ 

을 누른 후 Tab.

누구든지 이 문제를 해결하도록 도와줄 수 있다면. 감사합니다!

답변1

나는 그것을 해결했다. 전체 경로를 표시하도록 매개변수를 추가하려면 다음 줄을 추가하기만 하면 됩니다.

_arguments '*:filename:_files'

따라서 최종 함수는 다음과 같습니다.

#compdef audtool

_audtool() { 
    local curcontext="$curcontext" state line
    typeset -A opt_args

    _arguments \
        '1: :->csi'\
        '2: :->file'

    case $state in
    csi)
        _arguments '1: :(
            --current-song
            --current-song-filename 
            --current-song-length
            --playlist-addurl)'
    ;;
    file)
        _arguments '*:filename:_files'
    ;;
    esac
}

_audtool "$@"

관련 정보