open
Mac 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에서는
사실이 아닙니다. open
bash 또는 zsh의 명령 에 대한 인식이 없는 것 같습니다 . 따라서 키를 누르면 ⇥대체 기능이 사용되어 현재 작업 디렉터리의 모든 파일이 완료됩니다.
-a
bash가 명령 전환 후에 예상되는 인수를 인식하도록 하려면 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의 완료 동작에 익숙하지 않습니다.