使用脚本设置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

最终效果:


最终效果

注:该命令成功执行的前提是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 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
`File->Open Dictionary`

Dictionary界面:


Dictionary
  1. 从中找到System Events,然后Choose,出现界面:
System Events
  1. 在右上角输入key,即可看到key codekeystroke两个命令。
    用`key`检索

UI元素结构查看工具

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

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

  1. 打开UI Browser。
UI Browser启动界面
  1. 点击Switch to Screen Reader, 出现UI Browser Screen Reader界面。
UI Browser Screen Reader界面
  1. 此时将鼠标移动到感兴趣的UI元素上,例如System PreferencesKeyboard面板。鼠标放在红圈处,即Add按钮。左侧UI Browser则显示出了相关信息。此时保持鼠标位置,按快捷键Command+Control+S,这样便切换回Browser界面。

    QQ20160221-0.png

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

    UI Browser获取到了需要的元素信息

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

自动生成的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,552评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,666评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,519评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,180评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,205评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,344评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,781评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,449评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,635评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,467评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,515评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,217评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,775评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,851评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,084评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,637评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,204评论 2 341

推荐阅读更多精彩内容