article_image

用户自动化的瓶颈从来不在于能做什么——毕竟,就连处于事实弃养状态的 Shortcuts 都能跑好几种脚本语言——而在于究竟在什么时候做这些。换言之,触发机制是自动化的全部艺术所在。

Keyboard Maestro 固然拥有成打的预设触发机关,不过在复杂的工作环境中,预设再多,也是百密一疏。作为一个经典问题,判断当前是否处于文字输入状态,就令多数 Keyboard Maestro 玩家捉襟见肘。但如果更换思路,则不仅问题本身得以圆满解决,还可以开启一类新的触发机制:基于菜单栏的情景化。

原因在于,键盘本身是一种多功能输入设备,在准备输入文字时下,字母按键司其本职;而在处理文件或浏览网页时,原本用于输入文本的字母按键又身兼数职。问题在于,多数自动化工具,只是在按键或按键组合与自动化功能之间建立对应关系,却忘了同一组按键,在文字输入与其他场景下,很可能需要加以区分。易言之,花哨的自动化按键配置,以不耽误打字为要。

一般而言,混淆多是由于玩家弄巧成拙,遂要补救。而在 DEVONthink 这种飞机驾驶室级别的复杂软件中,软件自身就常常模糊了文本输入和文件处理,最令我恼火的,无过于在处理文件时,⌘Command-V 快捷键竟有个兜底用途:如果剪贴板中没有文件,DEVONthink 就挖空心思,将其他任何内容创建为新文件。最严重的一次,DEVONthink 将剪贴板中的草稿并入了拟提交法院的资料,惊恐之余,我迁移了 DEVONthink 中的全部工作数据,如今它除了用来读 RSS,别无他用。软件不应该伤害使用者。

Alt text
DEVONthink 会把剪贴板中的内容存为独立文件

鉴于律师工作不允许失误,我彻底隔离了数据,但这不意味着技术问题不需要解决。依据社区传统,这类问题可化约为“防误触”,通常加一道缓冲即可,例如防止手滑关退出浏览器。但 ⌘Command-V 这一键位地位特殊,它在文本编辑与文件处理中均有功用,如果贸然限制甚至禁止,连打字都遭池鱼之殃,未免太过。

至于区分是否处于打字状态,Keyboard Maestro 本身没有提供线索,其他自动化软件也没有。不过,我们还有另一类机关:菜单栏。抛开网页套壳的垃圾不谈,多数软件,会讲相当一部分功能置于顶部菜单栏中,根据当前状态,菜单栏也有变化,例如在输入文本时,DEVONthink 就会提供插入列表标记、换行符、换页符、日期和时间等选项,而在处理文件时,前述功能毫无意义,自然不再可用。这种菜单栏状态的变动,提供了更加情景化的自动化契机。

Alt text
是否处于文本输入状态,DEVONthink 菜单栏中部分项目有差异

Keyboard Maestro 的触发机关(Trigger)并不包含菜单栏变化,不过,可以在保留监视 ⌘Command-V 快捷键的前提下,增加一步条件判断,如果当前文本相关的菜单栏项可用(选一个即可),就正常粘贴文本,否则就弹出提示,经确认后再粘贴文件或创建新项目。

Alt text
如果在处理文件,粘贴前要求确认
Alt text
如果在打字,就正常粘贴文本

Keyboard Maestro 动作下载(GitHub)

由于菜单栏布局在不同语言的环境乃至每个系统或每个软件版本中都可能有变动,我不担保你下载动动作可以直接使用,请根据您的菜单栏现状,重新指定触发机关。

Alt text
Keyboard Maestro 步骤

在 DEVONthink 之外的软件中, 菜单栏也可以作为触发线索,例如在 Finder 中,同样可以看出文本输入和文件处理两种情形下的菜单栏差异:在前一种情况下,你可以插入联系人信息或密码(macOS 14.7.5)。我制作过一个带拟撤销内容提示的动作,取代 Finder 自带的撤销操作,为避免它干扰打字——打字时,不必系统提示你要撤销的内容是什么,但在移动文件时可不一样,风险差了几个级别——我再次利用菜单栏,区分两种场景。

Alt text
是否处于文本输入状态,Finder 菜单栏中部分项目有差异

惟需注意,菜单栏方案之所以不寻常——我从未见到别人提及——只因各软件的菜单栏本就不同,有些压根没有菜单栏(多是套壳的垃圾),但这不妨碍我们多储备一种自动化触发机制。理智的玩家不会强求一种思路适用于所有软件,至少,没必要因为它不兼容垃圾套壳软件就嗤之以鼻。


author_avatar

律师, macOS/iOS 自动化业余玩家。有效即合法,无效的优雅有罪。