从命令行访问 Finder 的“打开方式”菜单(用于选项卡完成)

Shr*_*saR 5 bash zsh command-line tab-completion macos

在 Mac OS X 上,我知道可以使用默认应用程序从命令行打开文件,open使用open -a <application name>. 因此,

open movie.avi
open -a VLC movie.avi
open movie.avi -a VLC
Run Code Online (Sandbox Code Playgroud)

所有的工作。我唯一的抱怨是当我打字时

open movie.avi -a <TAB>
Run Code Online (Sandbox Code Playgroud)

它完成了计算机上存在的所有应用程序 - 例如在 zsh 中我得到

zsh: do you wish to see all 793 possibilities (200 lines)? 
Run Code Online (Sandbox Code Playgroud)

— 虽然我希望它仅完成 Finder 的“打开方式”菜单会显示的少数应用程序。

那么有没有办法访问 Finder 知道的这个列表,并使我的 shell(zsh,但如果有帮助,我可以切换到 bash)知道该列表,这样选项卡完成将只显示那些应用程序?

Lri*_*Lri 5

所有应用程序

$ 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
Run Code Online (Sandbox Code Playgroud)

杜蒂

$ 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
Run Code Online (Sandbox Code Playgroud)

(虽然它缺少一些显示在打开菜单中的应用程序。)