如何在Mac OS X中为特定文件类型设置默认应用程序?

12

我想在Mac OSX Lion系统中为特定的文件类型设置默认应用程序。使用以下Apple脚本,我们可以为特定的“file.abc”文件设置默认应用程序。

tell application "System Events"
set default application of file "/Users/test/Desktop/file.abc" to "/Applications/TextEdit.app"
end tell

我希望将相同的应用程序设置为所有文件类型或扩展名为“abc”的文件的默认应用程序。

我尝试了以下内容来实现此操作。它在<HOME>/Library/Preferences/com.apple.LaunchServices.plist中添加了一个条目。但文件没有使用指定的应用程序打开。

defaults write com.apple.LaunchServices LSHandlers -array-add "<dict><key>LSHandlerContentTag</key><string>abc</string><key>LSHandlerContentTagClass</key><string>public.abc</string><key>LSHandlerRoleAll</key><string>com.apple.textedit</string></dict>"

希望有人能知道我缺少了什么才能实现它。


找到答案:

defaults write com.apple.LaunchServices LSHandlers -array-add "<dict><key>LSHandlerContentTag</key><string>ugurugu</string><key>LSHandlerContentTagClass</key><string>public.filename-extension</string><key>LSHandlerRoleAll</key<string>org.videolan.vlc</string></dict>"
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user
3个回答

6
也许你没有做错什么,只是需要重新加载com.apple.launchservices文件。您可以注销,等待几分钟或强制重新启动launchservices。在下面的示例中,我说public.comma-separated-values-text文件(注意:这并不意味着每个CSV文件都属于此内容类型)必须使用TextEdit而不是Excel打开。
do shell script "defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.comma-separated-values-text\"; LSHandlerRoleAll = \"com.apple.TextEdit\"; }'"

do shell script "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user"

尝试使用"com.apple.textedit"应用程序创建了一个名为"xyz"的文件类型。但是并没有起作用。你确定上面两行脚本是可行的吗? - Mathan Kumar
感谢您的帮助和时间。根据您的答案进行了一些修改,现已更新如上。 - Mathan Kumar
1
@GrahamPerrin:只有在重新加载启动服务注册表时,更改才会反映出来。这是因为您的更改不会在已加载的缓存中可用。 - Mathan Kumar
如果你想知道如何将-array-add命令定制到你的情况中,可以使用mdls并指向一个文件来获取它的kMDItemContentType。这是LSHandlerContentType的值。例如,mdls path/to/some/readme.md输出(其中之一)kMDItemContentType = "net.daringfireball.markdown" - Janosh
此外,根据您的使用情况的复杂程度,值得一看duti - Janosh
显示剩余2条评论

4

我不确定你是否只是想以编程方式完成这个操作。你是吗?

否则:

在文件上,选择“获取信息”,在“打开方式”下选择应用程序的名称。 点击“全部更改”按钮。


我想以编程方式执行“全部更改”操作,位于“打开方式”下。 - Mathan Kumar
1
感谢您的帮助和时间。我的Mac上的工作答案已经更新。 - Mathan Kumar

0
你可能想要查看RCDefaultApp及其源代码。这是一个程序,可以让你设置哪些应用程序打开Launch Services中的哪些文件类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接