article_image

本文选自《Keyboard Maestro 进阶指引》第二章,欢迎选购完整作品。
Keyboard Maestro 进阶指引
Keyboard Maestro 进阶指引

大约在2018年以前,macOS 上的窗口管理工具仍然百花齐放,但亦已渐现颓势。

在第一条叙事线上,各种既得利益者和企图分一杯羹的新秀像烤箱里的鱿鱼一样——疯狂内卷:老牌软件 Moom 仍然有一批传教士,但它似乎陷入各种畸形的窗口比例,让人怀疑是否有必要把笔记本电脑的屏幕搞成监控屏幕、铺满那么多窗口;AutoLayout 为代表的一批新软件则开始推广所谓智能窗口管理,宣称可以自动将当前窗口铺满屏幕,但是这种蒙得里安瓷砖画式的、将屏幕空间压榨到一个像素点都不剩的布局1,恐怕只考虑了利用率而完全不管用户是否会患上斜眼症。换言之,这些工具已经高度特化、进入军备竞赛的最后阶段,只为不同而不同,不断通过推出新奇但基本没有用的功能来吸引用户,完全陷入了功能主义。

第二条叙事线人迹罕至。我从一开始就避开所有图形化的窗口管理工具,取道基于 Lua 脚本语言的 Hammerspoon2——刚好在我为数不多的游戏经历中,接触过 Lua 语言。Hammerspoon 让我意识到,窗口管理,主要是调整窗口的大小位置,而那些华丽到令人发笑的演绎,也不出此道。Hammerspoon 固然太晦涩,但它留给我的“第一性原理”,则在 Keyboard Maestro 中继续发力。

2018年前后,我因故将所有窗口管理工作迁移到 Keyboard Maestro 上,由于其过于全能,当时我宣称,“窗口”(Window)只是窗口管理的中等颗粒度层级,往下还有标签页(Tab),往上则有虚拟桌面(Desktop),并各编写了一系列动作。时过境迁,事实证明标签页管理还是过于细碎,我又转向了 LaunchBar3;但窗口和桌面两个层级,仍然可供 Keyboard Maestro 纵横。

基础的分屏操作

自 OS X(当时的称呼)引入左右分屏功能以降,分屏功能就涤清了异端魔法的身份,正式进入 macOS。但是,Apple 仅提供了最基础的左右分屏,并未在此道上继续深入,macOS 上的探索甚至不如 iPad。这就给窗口管理工具留下发展余地。4

从最经典的各种分屏操作入手,最容易理解窗口管理是什么——前面也已经提过了——调整窗口的大小和位置。本质就是这两项参数。我提供的示例动作也非常传统,典型的用法就是左边阅读材料、右边做笔记。所涉 Macro 如下:

  • 通过快捷键 ⌃Control-⌥Option-⌘Command-<,将窗口分配到左边半屏;
  • 通过快捷键 ⌃Control-⌥Option-⌘Command->,将窗口分配到右边半屏;
  • 通过快捷键 ⌃Control-⌥Option-⌘Command-?,将窗口移到屏幕正中间;
  • 通过快捷键 ⌃Control-⌥Option-⌘Command-",恢复窗口到上一步的位置(未避免复杂化,仅记忆一次操作)。
Alt text
左右分屏以及恢复原始窗口

分屏操作最重要的是 Move 和 Resize 两步,前者控制窗口位置,后者决定窗口大小——这是一道再简单不过的几何题。以将窗口铺满左半屏为例,需要先用 SCREENVISIBLE Token 获取当前屏幕的长宽数据,然后稍加换算,得到所需的座标以及尺寸:

  • SCREENVISIBLE(Front,Left):当前屏幕最左侧的横座标;
  • SCREENVISIBLE(Front,Top):当前屏幕最上边的纵座标;
  • SCREENVISIBLE(Front,Width)*50%:当前屏幕宽度的一半,即“半屏”,*50% 这个表达式就是取一半的意思;
  • SCREENVISIBLE(Front,Height):当前屏幕的高度,左半屏布局仅是宽度取一半,高度仍然占满。
Alt text
分屏的步骤

微调上列中的 LeftTop 和数值,就能制作出其他的布局,包括设置 1/3、1/4 或者 2/3、3/4 等比例,也不一定是左右分,还可以上下分——只要这些比例确实于你有用。我有一个占满屏幕 87% 空间的窗口布局,空出来的一列桌面位置用于放一些临时文件,比如用 Safari 检索文献时,下载下来的文件就会自动从上到下排到屏幕右侧,如同一个置物架。至于为何是 87%,则是由图标大小(尽可能小)、文字数量(尽可能多)以及文字位置(在图标右边)等一系列要求综合得出的,自下而上,是我重新思考桌面布局的结果,而非从广告商或生产力网红那里领受一个先验的参数。各位不妨突破传统的比例,多多观察自己的真实工作场景,再调配出切实有用的窗口布局。

Alt text
一种特殊窗口布局:左侧浏览、检索资料,右侧留一窄列汇集新文件

除了 Move 和 Resize,Keyboard Maestro 还提供更精细的定位工具,可以瞄准特定名称或 ID 的窗口(或标签页),暗示了更加精细的标签页管理。然而,鉴于标签页数量往往巨大,而 LaunchBar 等启动器可以实施索引大部分软件的标签页、超大号列表界面也更惬意,实无必要用 Keyboard Maestro 再造轮子。5

记忆并恢复窗口大小

有时候,分屏结果可能令人不满意,或者干脆就是误按了快捷键6,所幸 Keyboard Maestro 可以设置变量,记住一部分操作历史。7上一节展示分屏操作的动图中,就包含了恢复窗口到上一步状态的 Macro。

既然要记忆窗口状态,仅凭单个 Macro 就不够,而是要在所有窗口管理的 Macro 中——负责恢复的除外——添加记忆窗口位置和大小的步骤。上一节展示左半屏操作时,只有最后一步真正负责操控窗口,前两步均用于获取并存储窗口状态数据:

  • %WindowSize%1% 保存到自定义变量 WindowSize,即存下了窗口大小;
  • %WindowPosition%1% 保存到自定义变量 WindowPosition,即存下了窗口位置。
Alt text
恢复窗口的步骤

有两个向量,就能创造世界。有位置和大小数据,就能像像量子传送一样把窗口状态保存在变量中,有需要时再恢复原状。类似保存状态的思路也见诸其他 Keyboard Maestro Macro,例如要动到剪贴板前,我一半都会先保存当前剪贴板中的内容,待其他步骤结束后再恢复剪贴板内容,以避免剪贴板污染。

等比放大或缩小窗口

调整窗口布局,有时候是为了在锱铢必较的笔记本电脑屏幕上合理分配屏幕空间,但也有时候是单纯为了照顾视觉效果。IINA 播放器有一个绝妙的设计,即通过双指开合控制当前窗口大小,轻轻松松就能获得一个舒服的尺寸,而不需要用光标去点窗口边角——一般都会开枪开错,点到背后的窗口。

双指手势那么奢侈的操作,Keyboard Maestro 不敢想,但快捷键还可以一试,至少远远好过扮演一个使用触控板或鼠标的蹩脚狙击手。我设计了一组 Macro,分别以 10% 为单位,等比放大或缩小当前窗口大小:

  • 用快捷键 ⌃Control-⌥Option-⌘Command-加号,等比放大当前窗口;
  • 用快捷键 ⌃Control-⌥Option-⌘Command-减号,等比缩小当前窗口。

注意,由于像素只能是整数,故缩小时 Keyboard Maestro 会取整,导致有个别像素点的偏差,下面的动图先缩小、后放大,尺寸就没有完全恢复原样。话说回来,本文的缩放操作本就旨在模仿手势、代替光标,而这两者本来也都不擅长像素严格的操作。

Alt text
放大或缩小窗口

缩放功能特别适合预览工具和 Quick Look——没错,Quick Look 的窗口也是可以调整的——这俩兄弟永远记不住你常用的窗口布局,总是根据当前图片或 PDF 的实际大小调整窗口,导致一些高分辨率文件直接撑满整个屏幕,而分辨率不佳的内容则直接缩成袖珍玩具,两者都有碍正常阅读和观看。遇上畸大或畸小的窗口,就可以连按几次快捷键,迅速获得适中的尺寸。

切换桌面以及在桌面之间移动窗口

桌面是比窗口更高的管理层级,一个桌面可以容纳多个窗口,正如在几张不同的书桌上存放不同的参考资料和文稿。切换桌面以及在桌面之间移动窗口,主要还是利用 macOS 自带的切换快捷键,Keyboard Maestro 只是提供跳板、简化操作。

完整方案由 Keyboard Maestro 论坛上的 Tom 提出,即便出于介绍目的,我也不应该在一本收费作品中大篇幅引用他人作品,故此处仅展示效果,欲获取相关 Macro 者请阅读原文

Alt text
移动窗口到临近桌面

关键在于,无论在左右桌面中移动窗口还是直接定位到特定桌面,都需要使用系统级的 Mission Control 快捷键,Keyboard Maestro 其实是通过一系列键鼠模拟,模仿了手动拖动窗口的过程,与前几节依靠 Token 的做法截然不同。

Alt text
需要预先设置移动桌面的快捷键

这或许就是 Keyboard Maestro 的魅力。在绝大多数窗口管理工具偃旗息鼓的桌面切换领域,Keyboard Maestro 虽然没有提供直接的工具,却可以模拟人类操作解决问题。


  1. 在近几代的 macOS 中,完全压榨像素点已经不可能了,因为 Apple 引入了更显眼的圆角窗口设计,以至于屏幕上总有不少空隙。
  2. 在读大学之前我没有属于自己的电脑(iPad 不算),只能借用家人的,因此并不在意窗口管理问题。在这一点上,窗口管理就像是虚拟空间中的房屋精装修,唯有拥有所有权之后,才有必要考虑。我早就不用 Hammerspoon 了,但是大量早期杂文配图中仍然可以瞥见它的小图标。
  3. macOS 本身也增加了一些切换窗口的快捷键,以至于当时我做的跳板类快捷键不再有必要。
  4. 这一改进并无革命性的效果,尽管从历史上看,分屏其实撬动了 macOS(OS X)十年未动的窗口管理城门。后来直到 macOS Ventura,Apple 才有另一次尝试—— Stage Manager,但个人认为这只是 macOS 和 iPad 的最小公分母,两边都做得非常糟糕。正面评论可参 Eclecticlight 的文章
  5. 造轮子本身不是问题,而要考虑造价以及除了轮子,还能够获得什么。掌握 SCREENVISIBLE 就能制作出各种高度个人化的分屏 Macro,而在 Keyboard Maestro 中钻研标签页管理,则可能收效不大。另外,在早期的杂文中,我就坦言:“Keyboard Maestro 虽然属于全能选手,但是已经在使用其他窗口管理工具的读者不用全盘迁移到 Keyboard Maestro,毕竟已有现成功能的话,实在没必要自己重头折腾,大家可以根据工具的具体短板,用 Keyboard Maestro 进行弥补和辅助,让各个工具协作起来完善 macOS 窗口管理。”
  6. 重置窗口布局并非小事,布局一变,整个工作节奏都有可能要随之调整——一个在 Stage Manage 模式下漂浮于 27 寸巨型显示器正中央的明信片大小的 Markdown 编辑页面,和一个占据了整个显示器的飞机仪表盘般复杂的窗口,完全不可同日而语——为此,我避免在窗口管理快捷键中使用传统的方向键,以免用方向键和修饰键选取文本时误操作。
  7. 严格来说,可以记住全部的操作历史,可一旦来回 Redo 和 Undo,逻辑就容易混乱,故此处从简,只记上一步。

author_avatar

Lawyer, macOS/iOS Automation Amateur