问题简介
一般使用图形化界面进入System Preferences手动设置快捷键,例如这篇文章,Mac系统中自定义快捷键的方法
但手动设置则不能将配置加入到自动化脚本中。本文给出用脚本自动设置mac快捷键的方法,方便开发者将自己的快捷键设置脚本化,从而能够进行备份和自动配置。
解决方案
以下Applescript
脚本可以自动在System Preferences
中设置Xcode
下的Highlight Occurences of Symbol
功能的快捷键为⇧⌘F11
。这是以设置XcodeBoost的快捷键之一Highlight Occurences of Symbol
为例的。
tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.keyboard"
reveal anchor "shortcutsTab" of pane id "com.apple.preference.keyboard"
end tell
tell application "System Events"
tell application process "System Preferences"
tell splitter group 1 of tab group 1 of window "Keyboard"
set selected of row 9 of table 1 of scroll area 1 to true
end tell
-- Click the "Add" button in the window "Keyboard"
click button 1 of group 1 of tab group 1 of window "Keyboard"
-- Choose the Target Application
tell pop up button 1 of sheet 1 of window "Keyboard"
click
tell menu 1
click menu item "Xcode"
end tell
end tell
-- Set the shortcut title
set value of text field 1 of sheet 1 of window "Keyboard" to "Highlight Occurences of Symbol"
-- Move the focus into the "Keyboard Shortcut" text field
keystroke tab
-- The key code of "F11" is 103
key code 103 using {shift down, command down}
-- Confirm and add the shortcut
click button "Add" of sheet 1 of window "Keyboard"
end tell
end tell
最终效果:
注:该命令成功执行的前提是Xcode
下的Highlight Occurences of Symbol
功能还未设置,即快捷键列表没有这一项。
运行方式:
打开Mac自带的Script Editor
,然后将以上脚本粘贴到编辑区域,点击运行按钮即可。如图:
预备知识:
什么是AppleScript
AppleScript是Mac系统提供的一个脚本语言,这个脚本语言简单易读,稍微懂一点脚本语言就可以快速学会了。AppleScript可以让我们的日常工作流程化,简化繁琐的固定输入,自动化完成一般的日常工作。
AppleScript如何按键
在Mac系统中有个叫“System Events”的App,AppleScript可以让它做按键或者点击鼠标的动作。key down
是按下某个按键不放,key up
是松开某个按键,keystroke
是点按一下某个按键。
AppleScript如何点击鼠标
点击鼠标脚本和按键脚本类似,不同的是用了click at
命令。
前提工作
如果想要让AppleScript自动帮我们按键,点击鼠标。首先还是要在设置里“启用辅助设备的控制”,否则AppleScript就没有权限控制我们的键盘、鼠标这些辅助设备。 打开“系统偏好设置”->“辅助功能”页面,然后勾选“启用辅助设备的控制”。
脚本解释:
整体思路:
首先启动System Preferences
应用,将快捷键设置界面anchor "shortcutsTab" of pane id "com.apple.preference.keyboard"
打开
然后启动System Events
,通过这个命令来向System Preferences
应用发送keystroke
等指令:
首先从左侧区域选中App Shortcuts
,此处使用了硬编码row 9
,因为从上到下数这个是第9。因此如果列表中增加了其他的条目或者顺序有变,脚本可能失效。但是理解这个脚本思路后,配合UI Browser 即可写出适合具体情况的脚本。
然后点击Add
按钮以增加快捷键,弹出窗口如下:
此处有三个部分要设置,即Application
, Menu Title
,Keyboard Shortcut
。
首先把Application
设置为Xcode
,这是通过点击pop up button
中的对应条目实现的。
然后Menu Title
设置为Highlight Occurences of Symbol
,此时焦点在Menu Title
。
通过keystroke tab
实现模拟用户点击Tab
键一次,此时焦点转入Keyboard Shortcut
,继续通过key code
完成快捷键的模拟输入。
最后点击"Add"按钮则完成了设置。
通过Tab
转移焦点的原因是:Keyboard Shortcut
不论是依据元素点击还是依据坐标点击,都无法正常获取焦点。原因未知。通过Tab键则是可行的。所以通过Menu Title
转入Keyboard Shortcut
的设置。
补充知识
指令位置
keystroke
与key code
指令都需要在tell application "System Events"
下执行,因为这是"System Events"
所提供的指令。可以通过查看Dictionary
来确定。
如何查看Dictionary
- 运行
OS X
自带的Script Editor
,然后点击File->Open Dictionary
。
Dictionary界面:
- 从中找到
System Events
,然后Choose
,出现界面:
- 在右上角输入
key
,即可看到key code
和keystroke
两个命令。
UI元素结构查看工具
- 免费软件可以使用Apple提供的UIElementInspector:
图片来源:How To Use Applescript’s UI Scripting [Mac] - 收费软件可以用UI Browser (30天试用期)。
如何使用UI Browser查看元素结构并生成Applescript代码
前提:给予UI Browser权限,类似于Applescript的设置。
- 打开UI Browser。
- 点击
Switch to Screen Reader
, 出现UI Browser Screen Reader
界面。
-
此时将鼠标移动到感兴趣的UI元素上,例如
System Preferences
的Keyboard
面板。鼠标放在红圈处,即Add
按钮。左侧UI Browser则显示出了相关信息。此时保持鼠标位置,按快捷键Command+Control+S
,这样便切换回Browser
界面。
-
此时便获取到了需要的信息。见
Path to Element
部分。
假如此时要实现用脚本点击步骤3中的加号,则点击工具栏的
AppleScript->Click Selected Element
, 得到:
- 得到了
click button 1 of group 1 of tab group 1 of window "Keyboard"
这一实现我们想要的功能的AppleScript
代码。
如何获取Key code
使用Key Codes免费软件。打开软件后,直接按键盘上想知道key code的键即可显示。
参考资料:
用AppleScript在Mac系统下实现按键精灵的功能以及在游戏中的运用
Scriptable System Preferences
How To Use Applescript’s UI Scripting [Mac]
6 Beginner Resources For Learning Mac Programming