자동 완성: 프로그램 의욕 저하

자동 완성: 프로그램 의욕 저하

프로그램을 패키징하는 사람들은 자신이 만든 bash 자동 완성 설정에서 볼 수 있듯이 자신의 프로그램을 사용하여 여는 파일 형식에 대해 지나치게 광범위한 견해를 갖고 있는 것 같습니다. 예를 들어 a.svg 및 a.jpg 파일이 있는 경우가 자주 발생합니다. 여기서 a.jpg는 비트맵으로 렌더링된 a.svg입니다. svg 파일을 편집하려면 inkscape를 사용하고 jpg 파일을 편집하려면 gimp를 사용합니다. 그러나 "inkscape a" 또는 "gimp a"를 입력하고 자동 완성 탭을 클릭하면 이러한 각 프로그램은 a.svg 또는 a를 편집하고 싶다고 상상하면서 지나치게 열정적인 강아지처럼 작동합니다. 나는 명확하게해야합니다.

더 어리석은 예(버그처럼 보이는)는 gimp가 a.odt(libre Office 파일)를 열라고 제안하지만 실제로 그렇게 하려고 하면 오류가 발생하는 것입니다.

이러한 프로그램의 자동 완성 설정을 줄여 불편을 최소화하는 사용자 정의 설정을 가지려면 어떻게 해야 합니까?

답변1

먼저 귀하의 질문에 대한 몇 가지 오해를 해결하겠습니다.

  • 일반적으로 완성 설정은 개별 프로그램이 아닌 셸을 통해 배포됩니다. 개별 프로그램은 데스크톱 실행 프로그램 및 메뉴 항목과 함께 번들로 제공되는 것처럼(적어도 주요 데스크톱 배포판에서는) 완성 설정과 함께 번들로 묶일 수 있지만, 응용 프로그램 프로그래머는 실제로 완성 설정을 작성하지 않지만 셸 개발자는 작성합니다.
  • 완료는 일반적으로 가장 일반적인 경우뿐만 아니라 유용한 모든 것을 완료하도록 조정됩니다. 예를 들어 Inkscape는 일반적으로 사용하기에 가장 좋은 프로그램은 아니지만 JPEG 파일을 열 수 있으므로 *.jpg해당 파일은 완성 파일에 포함됩니다 inkscape. 또한 완성에는 기본적으로 모든 파일이 포함됩니다.

Bash의 경우 완성 설정은 별도로 배포됩니다.배쉬 완료팩. 버전 2.1부터는 설정이 없으므로 gimp매개변수만 입력하면 gimp모든 파일이 제공됩니다. 의 경우 inkspace완성 기능은 몇 가지 옵션을 알고 있으며 대규모 이미지 파일 확장자 세트를 완성합니다.

다음 명령을 사용하여 Bash에서 완료 설정을 표시하거나 수정할 수 있습니다.complete내장. 예를 들어:

$ complete -p inkscape
complete -F _inkscape inkscape
$ type _inkscape
_inkscape is a function
_inkscape () 
{ 
    local cur;
    COMPREPLY=();
    cur=${COMP_WORDS[COMP_CWORD]};
    if [[ "$cur" == -* ]]; then
        COMPREPLY=($( compgen -W '-? --help --usage -V --version \
                        -z --without-gui -g --with-gui -f --file= -p --print= \
                        -e --export-png= -d --export-dpi= -a --export-area= \
                        -w --export-width= -h --export-height= -i --export-id= \
                        -j --export-id-only  -t --export-use-hints -b --export-background= \
                        -y --export-background-opacity= -l --export-plain-svg= -s --slideshow' -- $cur ));
    else
        _filedir '@(ai|ani|bmp|cur|dia|eps|gif|ggr|ico|jpe|jpeg|jpg|pbm|pcx|pdf|pgm|png|ppm|pnm|ps|ras|sk|svg|svgz|targa|tga|tif|tiff|txt|wbmp|wmf|xbm|xpm)';
    fi
}
$ complete -p gimp
complete -F _minimal gimp

이 기능이 마음에 들지 않으면 _inkscape직접 작성하세요. 의 경우 bash는 완료에 대해 알지 못합니다. 한 번 이상 완료를 시도하면 완료 기능으로 gimp기록됩니다 . _minimal뭔가 다른 것을 원한다면 자신만의 함수를 정의하세요(보통 이라고 부르지 _gimp만 의무사항은 아닙니다).

complete -F _gimp gimp
_gimp () {
  _filedir '@(ai|ani|bmp|cur|gif|ggr|ico|jpe|jpeg|jpg|pbm|pcx|pgm|png|ppm|pnm|ras|sk|targa|tga|tif|tiff|wbmp|wmf|xbm|xpm)'
}

Zsh는 더 복잡한 메커니즘을 제공합니다예를 들어 제한된 세트를 완료했지만 경쟁이 없으면 더 넓은 세트로 돌아가는 것입니다.

관련 정보