以编程方式将键盘快捷键添加到 Mac 系统偏好设置

问题描述 投票:0回答:5

如果我进入系统偏好设置、键盘、键盘快捷键,然后选择应用程序快捷键,我可以定义要在 Mac 上使用的自定义快捷键。

有什么方法可以通过 Applescript 访问此功能吗?

keyboard applescript macos
5个回答
17
投票

快捷方式存储在

~/Library/Preferences/.GlobalPreferences.plist
中的 NSUserKeyEquivalents 字典和应用程序的属性列表中。

defaults write -g NSUserKeyEquivalents -dict-add Duplicate '~@d' Minimize '\0'
defaults write com.apple.finder NSUserKeyEquivalents '{"Show Package Contents"="@\r";}'

快捷方式格式在Cocoa Text System文章中有描述。


4
投票

系统偏好设置本身无法使用 Applescript 编写脚本,您必须通过 GUI 脚本 与其进行交互。 GUI 脚本实际上是最后的手段,它允许您通过显式声明和调用控件来与控件进行交互,并且不需要太多就可以放弃 GUI 脚本。即使对于经验丰富的 Applescript 程序员来说,实现起来也很困难。您会在网络上找到一些介绍性教程,但除此之外就没有太多了。


4
投票

Mac OS 的内部结构正在迅速成为一门失传的艺术。在 shell 中运行以下命令,或通过 Applescript 中的 shell 运行:

defaults write com.google.Chrome NSUserKeyEquivalents '{ "Search the Web…" = "@k"; }'

1
投票

我编写了一个 AppleScript 库来以编程方式添加全局和应用程序快捷方式。我们付出了巨大的努力来解决 macOS 如何实现快捷方式的各种怪癖。

1.0 版本可在此处获取: https://forum.latenightsw.com/t/setting-other-applications-keyboard-shortcuts-using-nsuserdefaults-defaults-not-updating/3537/5

当我有时间时,我将进行一些小的 API 添加和更改,届时将在此处完整发布源代码。请注意,如上所述,服务快捷方式是使用完全不同的系统存储的,并且不在此处处理。


0
投票

还有一个好消息:Services 的快捷方式位于 pbs.plist 中,并且它们使用与 NSUserKeyEquivalents 不同的属性进行存储。

这里有关于如何编写基本脚本来更改/添加服务快捷方式的信息:

通过脚本 OSX 设置服务键盘快捷键

这是我发现的最简单的方法,而且对我来说效果很好(macOS 10.12.6 Sierra):

您还可以使用 PlistBuddy 和默认值:

/usr/libexec/PlistBuddy -c '删除 NSServicesStatus:"(null) - test2 - runWorkflowAsService"' ~/Library/Preferences/pbs.plist 2>/dev/null;默认写入 pbs NSServicesStatus -dict-add '"(null) - test2 - runWorkflowAsService"' '{key_equivalent = "^~@2";}'

如果没有现有条目,则不需要 PlistBuddy 命令 为了服务。将 test2 替换为服务名称。退出并 重新打开应用程序以应用更改。

^~@2 是控制选项命令-2。看 http://osxnotes.net/keybindings.html.

如果这可能对那些不太熟悉在 macOS 上编写/执行脚本的人有所帮助,我将脚本保存为 shell 脚本(.sh 扩展名),并使用以下命令从终端运行它:

sh "/path/to/script/scriptfile.sh"
© www.soinside.com 2019 - 2024. All rights reserved.