미디어 플레이어에 대한 zsh 완성

미디어 플레이어에 대한 zsh 완성

내에서는 다음을 제외하고 전역적으로 비활성화 .zshrc했습니다 .menu selectmpv/mplayer

zstyle ':completion:*' menu select=0
zstyle ':completion::complete:mpv:*' menu yes select

이는 예상대로 작동하지만 메뉴가 호출될 때 미디어 파일만 표시되도록 규칙을 수정하고 싶습니다 mpv(예: "mp3|mp4|mpg|avi|...").

*테스트하기 위해 로 변경해 보았지만 *.mp3작동하지 않았습니다.

규칙을 수정하려면 어떻게 해야 하나요?

답변1

zstyle완성 설정은 완성이 표시되는 방식에 영향을 주고 완성이 생성되는 방식을 조정할 수 있지만 완성을 생성하는 코드를 결정하지는 않습니다. 코드는 또는 이에 상응하는 것을 사용하여 설정 compdef됩니다 compctl.

미디어 파일만 완성 파일로 지정하려면 다음을 mpv호출하세요 .compctl.zshrc

compctl -/ -g '*.(#i)(mp3|mp4|mpg|avi)' mpv

-/옵션은 다른 완성과 함께 디렉토리도 완성함을 의미합니다(그렇지 않으면 하위 디렉토리의 파일에 액세스할 수 없습니다). 이 -g옵션은 완료할 파일을 선택하기 위한 전역 모드를 지정합니다. (#i)대소문자를 구분하지 않고 일치합니다.

compdef더 복잡한 완성 선택의 경우 (이 답변의 범위를 벗어나는) 함수를 작성하고 자동 로드 매직을 사용하거나 이를 통해 명령과 연결하십시오. 함수가 완성 생성 방법을 조정하려는 경우 zstyle 스타일을 쿼리할 수 있습니다.

답변2

우리는 지정할 수 있습니다ignored-patternszstyle다음과 같이 추가 줄을 추가합니다.

# append below line
zstyle ':completion::complete:mpv:*:*files' ignored-patterns '^*.(#i)(mp3|mp4|mpg|avi)'

추신: 패턴을 제외한 모든 것과 일치 ^할 수 있는 "전역 연산자" 이므로 위의 대략적인 의미는 zsh에게 명령의 미디어가 아닌 파일을 무시하도록 요청하는 것입니다 .^xxzstylempv

ignored-patterns

패턴 목록. 이러한 패턴 중 하나와 일치하는 시험 완료는 고려 대상에서 제외됩니다. 완료자는 _ignored완료자 목록에 나타나 무시된 일치 항목을 복원할 수 있습니다. 이는 쉘 매개변수의 보다 구성 가능한 버전입니다 $fignore.

참고하시기 바랍니다,EXTENDED_GLOB옵션은 완성 기능 실행 중에 설정되므로 ' #', ' ~', ' ^' 문자는 패턴에서 특별한 의미를 갖습니다.

---zshcompsys(1), zsh 완성 시스템, 표준 스타일

답변3

두 가지 일을 해야 합니다. (참고: 이것은 추측이 아닙니다. 테스트해본 결과 작동합니다.)

먼저 다음을 file-patterns정의 해야 합니다 .mpv.zshrc

zstyle ':completion:*:mpv:*' file-patterns \
        '%p.(mp3|mp4|mpg|avi)(#q^-/):globbed-files:"media file"' '*(-/):directories:directory' '*(#q^-/):all-files:file'

이는 Zsh의 완성 시스템이 첫 번째 시도에서 지정된 확장자로 끝나는 파일만 완성하도록 지시합니다(또는 활성화된 경우 "Media Files" 헤더로 group-name). 실패할 경우에만 디렉토리를 제공합니다. 이 작업도 실패하는 경우에만 다른 유형의 파일이 제공됩니다. ( (#q^-/)디렉터리가 아닌 (-/)디렉토리에만 일치합니다.)

하지만 그것만으로는 충분하지 않습니다. 제공된 완성 항목 mpv(이것을 설치했습니까?)도 URL을 완성으로 제공하려고 시도하기 때문입니다. 미디어 파일을 사용할 수 있을 때 이러한 내용이 표시되지 않도록 하려면 다음을 추가하세요.

zstyle ':completion:*:mpv:*' tag-order 'files'

mpv, 이 명령의 경우 먼저 파일(위의 모든 항목 포함 file-patterns)을 제공해야 하며, 실패하는 경우에만 다른 것을 제공해야 합니다.

관련 정보