本文将介绍:
- macOS上的全键盘控制软件Homerow,以及一键启动Homerow两个核心功能,从而让Mac进入“全键盘模式”的方案。
- 上述方案所采用的两个可迁移的通用技巧。
- 通用技巧1:用Karabiner-Elements实现某一按键与其他按键同时按下时为修饰键,单独按下时实现特定功能。
- 通用技巧2:用Keyboard Maestro的
tapped n times
Trigger 实现同一按键点击不同次数触发不同功能。
Homerow及其功能唤醒方案
近期有朋友在论坛讨论macOS下的全键盘控制方案,在讨论中Minja推荐的软件Homerow解决了全键盘控制的部分痛点。下载体验后,Homerow迅速成为我的Mac上系统级的核心应用,我使用的主要的功能有1:
- 模拟点击:用键盘实现模拟鼠标点击2屏幕上的特定元素;
- 模拟滚动:用键盘实现在选中的特定区域模拟鼠标滚轮滚动。
更多介绍及下载链接,可见官网:Homerow — Keyboard shortcuts for every button in macOS。Homerow虽然是一个付费软件,但免费版提供的功能已经足够完善,每唤醒50次弹出的付费提示也近乎无感。如果你愿意付费,开发者承诺“一次付费,完全拥有,直到宇宙热寂”("Homerow is a one-time purchase. You own it completely, 'til the heat death of the universe."),可以算是很良心了~~(除了50刀的价格)~~。
想要实现全键盘控制,换言之即尽可能用键盘代替鼠标,至少要求——在轻度鼠标需求的场景下,如看网页时滚动页面、在谷歌搜索结果页跳转搜索结果链接——使用键盘的效率不能低于原来使用鼠标的效率,所以必然要为Homerow的功能唤起设置一枚方便的按键。
模拟点击功能,官方默认配置的快捷键是⌘+⇧+Space
,不能说不科学。但在我的设备上,该按键已经被占用3,且需要三个键同时按下,相对还是不够方便。因此我决定将短按Caps Lock
设置为唤起该功能的按键。
模拟滚动功能,官方默认配置的快捷键是⌘+⇧+J
,但同样是组合键,面临不够方便的问题。因此我考虑短按两次Caps Lock
唤起该功能。
短按Caps Lock一次唤起模拟点击
通用技巧1:用Karabiner-Elements实现某一按键与其他按键同时按下时为修饰键,单独按下时实现特定功能。
借鉴Hum的文章征服macOS 快捷键(三)——修饰键的分层和原则中Hyper和小Hyper键的定义,我用Karabiner-Elements将长按Caps Lock
映射为⌃+⌥+⇧
,我将其称为Super键。4
而Karabiner-Elements其实还支持分别定义一枚按键"与其他键同时按下时"和"单独按下时"的功能。因此,可以设置将单独按下Caps Lock
映射为一个实体键盘上并不存在的按键,并将这个按键设置为Homerow模拟点击功能的唤醒键。5具体步骤如下:
第一步,在Karabiner-Elements中设置改键规则。依次点击 Complex Modifications - Add your own rule,在弹出的代码框中删除默认代码,粘贴我给出的代码后点击保存。
{
"description": "Change caps_lock. Hold to Super (⌃+⌥+⇧), tap to f19",
"manipulators": [
{
"from": {
"key_code": "caps_lock",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_control",
"left_option"
]
}
],
"to_if_alone": [
{
"key_code": "f19"
}
],
"type": "basic"
}
]
}
以上代码的功能是将Caps Lock
键与其他按键同时按下时设置为Super键⌃+⌥+⇧
,单独按下时设置为f19
。代码中"from""to""to_if_alone"的表述非常容易理解,你也可以根据你自己的偏好另行设置(如使用Shift
而不是Caps Lock
作为触发键,或修改Caps Lock
作为修饰键时映射的组合键)。想要更高级的设置,可以参考官方文档:Documentation | Karabiner-Elements。
第二步,打开Karabiner-EventViewer(默认与Karabiner-Elements一同安装)。分别测试Caps Lock
单独按下、与其他按键同时按下时的键盘事件,确定上一步设置成功。
第三步,打开Homerow的设置界面。由于唤起模拟点击的快捷键为f19
(键盘上实际按下的是Caps Lock
),为便于记忆和使用,我把Homerow的搜索可点击元素功能唤起按键设置为Super+F
(键盘上实际按下的是Caps Lock+F
)。先设置Clicking的Search Shortcut,再设置Shortcut。
至此设置完成,此时你点击Caps Lock
,可以唤起Homerow的模拟点击功能,屏幕上会出现很多标有字母的小标签,输入小标签对应的字母组合即可实现模拟点击屏幕上的元素。
短按Caps Lock两次唤起模拟滚动
通用技巧2:用Keyboard Maestro的
tapped n times
Trigger 实现同一按键点击不同次数触发不同功能。
Homerow为模拟滚动功能默认设置的⇧+⌘+J
按键,在键位设计上已经比较合理,因为⇧+⌘
是左手非常自然的放置位置,而J
键作为Vim风格方向键的下键,使用频率最高。但完成上一节的设置后,为追求逻辑的连贯性,将短按Caps Lock两次作为唤起模拟滚动的方案更为合理,且该方案的按键负担更小。
要完成以上设置,仅需设置一个全局的Keyboard Maestro动作:
如果你的⇧+⌘+J
快捷键被占用,还可以在Homerow的"Scroll"设置项下与Keyboard Maestro Macro的Action中同时修改快捷键。
小结
模拟鼠标控制,可以算是一项系统级的功能。将全局性的Super键(以Caps Lock
实现)作为其触发的快捷键,恰如其分。
然而,展示个人需求与个人方案终究面临众口难调问题。所幸本文所展示的两种通用技巧之组合不局限于Homerow,可以轻松迁移到其他应用场景中去,在不影响原修饰键功能的前提下拓展出一批新按键,为诸如唤起AI之类的“一键”需求凿通道路。
- 除此之外的Search功能,在基于GUI的自动化流程中也有一定的用武之地。 ↩
- 包括单击左键、单击右键、按住⌘同时单击左键、双击左键。 ↩
- 我用
⇧+Space
组合键映射删除键的功能,因此⌘+⇧+Space
组合键等于⌘+Backspace
,对应的功能是删除整行。 ↩ - 为啥采取了一个不是很主流的方案呢?因为
Caps Lock
的这个位置很容易用小拇指按到,同时小拇指在该键位上时大拇指自然地在⌘
的位置。因此在不显著增加按键难度的情况下,这套方案不仅实现了原Hyper键的功能(⌃+⌘+⌥+⇧
),且拓展出一个Super键(⌃+⌥+⇧
),相当于多了一层修饰键。 ↩ - 这里的思路并不是我的原创,源自Sylv在v2ex发布的帖子。该帖提到的切换输入法的方案也被我稍加改造后自己使用至今。 ↩