我不介意 macOS 拥有一套异于 Windows 的窗口交互逻辑,但我不乐意看到 macOS 和 iOS 近亲繁殖(并且诞下智力残障);设计师还要往火上泼油,宁可忙着给它俩人工授粉,也不抽出时间修复 macOS 本身的交互不一致(实际上,不断从 iOS 中引入新的不一致)。
老用户,尤其是习于快捷键的熟练用户,应当对 Finder 的显示方式窗口感到深恶痛绝:你可以像在任何一个软件中一样,正常地用快捷键打开它(⌘Command-J),但是当你调试之后,居然不能用通用的窗口关闭快捷键 ⌘Command-W 干掉它,相反,被干掉的是当前 Finder 窗口。
诚然,你可以继续用 ⌘Command-J 隐去显示方式窗口,但这并不符合一贯的交互逻辑,至少我比较愚钝,耗费了十七八年也没掌握。
在技术上,这种交互设计之所以令人难以忍受,是因为显示方式窗口默认不激活——即便它浮在最上方!——无法全键盘控制,必须施以鼠标或触控板,此时多数人只好腾出右手,而左手则自然置于 ⌘Command-W 所在的区域。引入一枚 ⌘Command-J,既不统一,也不符合逻辑。于是我写了一个 Keyboard Maestro 动作,在涉及 Finder 显示方式窗口的开关时,恢复通用的 ⌘Command-W 键。
惟需指出,制作这个动作的难点,恰恰在于 Finder 显示窗口诡异的交互逻辑:它默认不激活,在勾选几个选框或拖动图标尺寸条之后依然不激活,必须手动点击窗口顶部栏或空白处方能激活,而即便如此,也依旧不能使用正常的 ⌘Command-W 键位,因为聪明的设计师希望你继续使用他发明的开关二合一 ⌘Command-J。1
碰巧,这种糟糕透顶的交互逻辑——如果有任何逻辑可言的话——恰恰踩到了交互自动化的一个三不管地带:传统快捷键失效,窗口管理逻辑混乱,菜单栏项目变动而不固定。这是好主意的炼金术坩埚,尤其可以挖掘冷僻的 Keyboard Maestro 模块。
我转而加入第二个动作,形成一种主动作加 Helper 动作的组合机制,详言之:
主动作以 ⌘Command-J 为触发机关,监测 Finder 显示方式窗口是否开始开启,触发后,先正常打开窗口——因为 ⌘Command-J 作为触发线索已经被消耗了,还需借用 Keyboard Maestro 打开一次——随即启用 Helper 动作,同时主动作进入待命状态,等待关闭显示方式窗口。
Helper 动作以 ⌘Command-W 为触发机关,不做任何操作,相当于临时覆盖了 Finder 自带的键位,以便给主动作腾出操作空间。当你沿着肌肉记忆用 ⌘Command-W 关闭窗口时,主动作也会监测到这一按键信号,关闭显示方式窗口,并禁用 Helper 程序,以免影响日常操作。
从功能上看,这种 Hepler 机制似乎过于复杂,但根据特斯勒复杂守恒定律,如果想要使用简单(在这里主要是能耗低),设计就要承担更多的复杂度。确实,我可以用 Keyboard Maestro 取代系统的 ⌘Command-W 键位,每次按下时都判断目前是否有显示方式窗口,再分而处之,但这样的动作就会频频运行,连续关闭多个窗口时还可能打架。相较之下,展示显示方式窗口的 ⌘Command-J 少见得多,更适合作为第一道触发机关,之后再临时用 Helper 动作监测 ⌘Command-W,功耗更低。
不仅单个动作功能齐备,动作之间还能并行配合,产生解剖学视角完全无法预料的新自动化模式,这也是 Keyboard Maestro 卓尔不群之处。
- 有需要时,可以开关二合一,我自己也在 Keyboard Maestro 中设计过类似机制。但有通用交互习惯时,再强制二合一就不合理,至少也应该兼容通用操作,而不是以创意键位取而代之。 ↩

