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

Posted

技术标签:

【中文标题】以编程方式将键盘快捷键添加到 Mac 系统偏好设置【英文标题】:Programmatically add keyboard shortcut to Mac System Preferences 【发布时间】:2011-11-05 08:33:11 【问题描述】:

如果我转到系统偏好设置、键盘、键盘快捷方式,然后是应用程序快捷方式,我可以定义要在 Mac 上使用的自定义快捷方式。

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

【问题讨论】:

【参考方案1】:

快捷方式存储在 ~/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文章中有所描述。

【讨论】:

【参考方案2】:

System Preferences 本身无法使用 Applescript 编写脚本,您必须通过 GUI Scripting 与之交互。 GUI 脚本实际上是最后的手段,它允许您通过显式声明和调用控件来与它们进行交互,并且不需要太多放弃 GUI 脚本。即使是有经验的 Applescript 程序员也很难实现。你会在网上找到一些introductory tutorials,但其他的不多。

【讨论】:

系统偏好确实有一个基本的字典,但是没有系统事件你不能修改个人偏好。不过,可以在属性列表中编辑许多首选项(如应用程序快捷方式)。 @Lri:是的,但正如您所指出的“......没有系统事件,您无法修改个人偏好。”这样一来,Apple 甚至都不应该打扰。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

另外很高兴知道:Services 的快捷方式在 pbs.plist 中,并且使用与 NSUserKeyEquivalents 不同的属性进行存储。

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

Set Services keyboard shortcut via script 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"

【讨论】:

以上是关于以编程方式将键盘快捷键添加到 Mac 系统偏好设置的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式获取/设置 Macos 默认系统键盘快捷键

以编程方式启动 Mac 的系统偏好设置屏幕 -> 声音

mac idea 快捷键设置

如何在Mac 上的“自动操作”中使用所选文件创建工作流程?

Mac 开发环境搭建(JDKMavenGItMySQLNavicat)

新手指南如何更改mac中默认Launchpad快捷键?