使用脚本设置mac快捷键--自动化管理MacOSX系统偏好

问题简介

一般使用图形化界面进入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

最终效果:


使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第1张图片
最终效果

注:该命令成功执行的前提是Xcode下的Highlight Occurences of Symbol功能还未设置,即快捷键列表没有这一项。

运行方式:

打开Mac自带的Script Editor,然后将以上脚本粘贴到编辑区域,点击运行按钮即可。如图:

使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第2张图片
运行示例

预备知识:

什么是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按钮以增加快捷键,弹出窗口如下:

使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第3张图片
快捷键设置窗口

此处有三个部分要设置,即Application, Menu TitleKeyboard 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的设置。

补充知识

指令位置

keystrokekey code指令都需要在tell application "System Events"下执行,因为这是"System Events"所提供的指令。可以通过查看Dictionary来确定。

如何查看Dictionary

  1. 运行OS X自带的Script Editor,然后点击File->Open Dictionary
使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第4张图片
`File->Open Dictionary`

Dictionary界面:


使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第5张图片
Dictionary
  1. 从中找到System Events,然后Choose,出现界面:
使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第6张图片
System Events
  1. 在右上角输入key,即可看到key codekeystroke两个命令。
    使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第7张图片
    用`key`检索

UI元素结构查看工具

  • 免费软件可以使用Apple提供的UIElementInspector:
    使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第8张图片
    UIElementInspector屏幕截图

    图片来源:How To Use Applescript’s UI Scripting [Mac]
  • 收费软件可以用UI Browser (30天试用期)。
    使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第9张图片
    UI Browser屏幕截图

如何使用UI Browser查看元素结构并生成Applescript代码

前提:给予UI Browser权限,类似于Applescript的设置。

  1. 打开UI Browser。
使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第10张图片
UI Browser启动界面
  1. 点击Switch to Screen Reader, 出现UI Browser Screen Reader界面。
使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第11张图片
UI Browser Screen Reader界面
  1. 此时将鼠标移动到感兴趣的UI元素上,例如System PreferencesKeyboard面板。鼠标放在红圈处,即Add按钮。左侧UI Browser则显示出了相关信息。此时保持鼠标位置,按快捷键Command+Control+S,这样便切换回Browser界面。

    使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第12张图片
    QQ20160221-0.png

  2. 此时便获取到了需要的信息。见Path to Element部分。

    使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第13张图片
    UI Browser获取到了需要的元素信息

  3. 假如此时要实现用脚本点击步骤3中的加号,则点击工具栏的AppleScript->Click Selected Element, 得到:

使用脚本设置mac快捷键--自动化管理MacOSX系统偏好_第14张图片
自动生成的AppleScript语句
  1. 得到了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

你可能感兴趣的:(使用脚本设置mac快捷键--自动化管理MacOSX系统偏好)