명령줄에서 Finder의 "연결 프로그램" 메뉴에 액세스합니다(탭 완성용).

명령줄에서 Finder의 "연결 프로그램" 메뉴에 액세스합니다(탭 완성용).

openMac OS X에서는 를 사용하여 기본 응용 프로그램을 사용 하고 를 사용하여 다른 응용 프로그램을 사용하여 명령줄에서 파일을 열 수 있다는 것을 알고 있습니다 open -a <application name>. 따라서,

open movie.avi
open -a VLC movie.avi
open movie.avi -a VLC

모든 일. 내 유일한 불만은 내가 입력할 때입니다

open movie.avi -a <TAB>

끝났어모두컴퓨터에 존재하는 애플리케이션 — 예를 들어 zsh에서는

zsh: do you wish to see all 793 possibilities (200 lines)? 

— 제가 원하는 것은 Finder의 "연결 프로그램" 메뉴에 표시된 소수의 응용 프로그램만 완료하는 것입니다.

그러면 Finder가 알고 있는 이 목록에 액세스하고 내 쉘(zsh, 도움이 되면 bash로 전환할 수 있음)이 목록을 인식하도록 하여 탭 완성이 해당 응용 프로그램만 표시하도록 하는 방법이 있습니까?

답변1

모든응용프로그램 (archive.org)

$ AllApplications -h

Created 03 March 2011 by Hank McShane
version 0.1
requires Mac OS X 10.4 or higher

Use this command line tool to get the path to all applications that can open a file from Launch Services.

Usage: AllApplications -path path/to/file

$ ext=png; f=/tmp/allapps.$ext; touch $f; AllApplications -path $f; rm $f
/Applications/Preview.app
/2/copies/Safari.app
/Applications/TeX/LaTeXiT.app
/Applications/WebKit.app
/Applications/Sequential.app
/Applications/ImageOptim.app
/Applications/Acorn.app
/Developer/Applications/Graphics Tools/Core Image Fun House.app
/2/copies/Preview.app
/Developer/Applications/Dashcode.app
/Applications/GraphicConverter.app
/Applications/Google Chrome.app
/Applications/Adobe Photoshop CS5/Adobe Photoshop CS5.app
/Applications/Utilities/QuickTime Player 7.app
/Applications/Utilities/ColorSync Utility.app
/Applications/Safari.app
/Applications/Adobe Device Central CS5/Adobe Device Central CS5.app
/Applications/Firefox.app

의무

$ duti -d public.png
com.apple.Preview
$ duti -l public.png
com.SequentialX.Sequential
com.flyingmeat.Acorn
net.pornel.ImageOptim
com.apple.system-library
com.apple.ColorSyncUtility
com.apple.Preview

(그러나 열기 메뉴에 표시되는 일부 앱은 누락되었습니다.)

답변2

나에게는 그렇게 보인다.

컴퓨터에 존재하는 모든 애플리케이션에 대해 완료됩니다. 예를 들어 zsh에서는

사실이 아닙니다. openbash 또는 zsh의 명령 에 대한 인식이 없는 것 같습니다 . 따라서 키를 누르면 대체 기능이 사용되어 현재 작업 디렉터리의 모든 파일이 완료됩니다.

-abash가 명령 전환 후에 예상되는 인수를 인식하도록 하려면 open이에 대한 bash 완료 패턴을 작성해야 합니다.

complete그렇게 하려면, 내장된 쉘 에 익숙해져야 합니다.

$ help complete
complete: complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]
    For each NAME, specify how arguments are to be completed.
    If the -p option is supplied, or if no options are supplied, existing
    completion specifications are printed in a way that allows them to be
    reused as input.  The -r option removes a completion specification for
    each NAME, or, if no NAMEs are supplied, all completion specifications.

OS X Lion은 단순히 사용자에게 /Applications폴더를 보여주는 대화 상자를 알려줍니다. 거기에 있는 앱 목록을 얻으려면 다음을 사용하면 됩니다.

basename -a -s.app /Applications/*.app

open따라서 스위치를 확인하지도 않고 공백을 올바르게 처리하지도 않는 매우 기본적인 완성은 -a다음과 같습니다.

_openComp() 
{
        local WLIST cur
        COMPREPLY=()
        cur="${COMP_WORDS[COMP_CWORD]}"
        WLIST=`basename -a -s.app /Applications/*.app`
        COMPREPLY=( $(compgen -W "${WLIST}" -- ${cur}) )
        return 0
}
complete -F _openComp open

이것은 bash에 적용됩니다. 저는 zsh의 완료 동작에 익숙하지 않습니다.

관련 정보