有句话说得好:懒人都是发明家。这些所谓的「懒人」当然不是纯粹的懒人,他们懂得利用智慧,去尽可能避免无谓的浪费时间,从而达到提高效率的目的。所以说,懒癌也就成为了一种动力,值得人们去借鉴。可问题是,怎么懒才算懒得恰到好处?

之所以要推荐 Keyboard Maestro 这款软件,除了它确实能让你用得特别爽之外,还有另一个主要原因,就是它能代替很多不同类型的软件。先不说这些软件到底是哪些,但不可否认的是,无论它们的整体费用是否超过 Keyboard Maestro 高达 $36 美元的售价,至少后者能同时满足这位用户的所有需求,大大降低了原本的高学习成本。这对新手来说,至关重要。

那么 Keyboard Maestro(下文简称 KM)属于什么类型的软件?我个人偏向于把它视作一个增强型 Automator。大家看截图也能发现,它的用户界面同 Automator 相似,也是传统的三栏式设计,从左到右依次是「Action 类别 > Action 名称 > Action 编辑」的有序区域切割,让用户能比较舒适地进行操作。

管理方面,KM 主要分为三个选项:+ 添加、- 删除、√ 允许/禁止。在第一次启动软件的时候,KM 会给出一个示例教程,教你去执行这三个操作,读者届时尝试的时候,只需按照提示完成所有步骤,就能大致有个「操作」的概念了。

此外,还有两个关于 KM 的名词需要大家掌握。一个叫 Macro 宏文件,我们可以将它理解为独立的 Workflow 工作流程,例如,打开 Finder 就是一个工作流程,只是概念上它仅有一个步骤罢了。另外一个名词叫做 Action 行为,例如,执行一段 AppleScript 脚本语言,或是点击一个 Button 按钮,都属于「行为」的一种。Macro 与 Action 的关系为父与子,Macro 为父,由其子 Action 组成,并最终以 Macro 的命名区分,通过用户拟定的 Trigger 触发,并按照有序的 Script 脚本语法特性,执行所有的 Action 行为。

实例举证

考虑到有些读者可能没有理解上文的意思,那我就结合实例进行介绍吧。

假设想生成一个以「打开 Finder 的 All My Files 窗口」为目的的 Macro,那么此时我首先要在脑中形成一组逻辑。比如,通过什么方式来触发这个 Macro?具体的步骤(Action)有几步,每步的内容有哪些?按照什么顺序去执行这些步骤?等等。针对这个 Macro,我的安排是:通过键盘快捷键触发 > 打开 Finder 并让它显示指定的窗口。

既然有了想法,那就可以开始设计了。但在实际操作过程中,我还遇到了其它的问题:

  1. Finder 是个特殊的进程,因为它一直都处于「活跃」状态。
  2. 基于上述原因,就导致了默认 Actions 中的「Activate a Specific Application 激活一个指定的应用」和「Show a Specific Application 显示一个指定的应用」间接失效了。
  3. 同样,执行 AppleScript 让 Finder 窗口 Activate 也是不行的。
  4. 如果从指定路径打开 Finder,就无法直接显示在 All My Files 窗口了。

可能你会惊讶于这些问题,但无论如何,它们在我操作的过程中都是真实存在的(并且,越复杂的 Actions 还会导致越多的问题),所以在这种情况下,我不得不去寻找代替的解决方案,好在最终我还是成功实现了这一 Macro。

如果你想触发并进入到 Trash 废纸篓所在的 Finder 窗口,可以参照以下 Action 设计。

实践证明,除了 Finder 和 Trash 这些特殊的入口外,其它自带和第三方的应用程序可以通过 AppleScript 的 Activate 特性快速激活,便于直接进入到默认的窗口位置及状态。具体的 Action 见下图。

从效率来看,类似的 Macro 无非是帮助我们免去了鼠标点击的麻烦,让更高效的键盘来帮助执行。从作用来看,它完全可以代替系统指定的 App Shortcuts 功能和第三方应用 Manico,让那些已经选择 KM 的用户省去了一笔费用。它是 KM $36 美元售价的一部分。

这个 Macro 示例向大家展示了 KM 最简单的运行逻辑,同时也提醒大家在设计 Action 的过程中,要时刻测试它的有效性,保证其将来的正常运行。当然,这一点开发商自然也已经想到,所以才会在每个 Action 窗口的右上角提供了「Try 试运行」按钮。

另外,读者在编辑 Action 的时候,也可以点击下方的「Edit 编辑」键,让 KM 根据实情自动将 Action 逻辑转换为相对更自然的语言表达形式,这样我们在检查逻辑的时候,就能更明了地找出其中的错误,望大家注意。

并行使用

习惯用「键盘快捷键」这块功能的用户还要留意,Keyboard Maestro 不存在「按键重叠导致失效」这一说,因为它会自动将同一快捷键下的所有 Macro 都归纳至一个独立的窗口中,用户在敲击键盘快捷键时,这个窗口就会显示,然后再按照排列顺序,点击数字键就可以运行对应的 Macro。而不是像很多快速启动类应用那样,同时执行该快捷键下的所有功能。

何为同步工作?

Keyboard Maestro 还能实现其它很多简单但实用的功能,我本人用到的有这两个。

在 Safari 开启时,自动打开指定 URL 地址。由于这个 Macro 的触发器是 Safari 本身,所以我们要选择「Application Trigger 基于应用程序的触发器」而不是上文所述的「Hot Key Trigger 基于键盘快捷键的触发器」Action,然后选择 Safari 就算完成了触发器设置阶段。

接着,我们只需设置指定的 URL 地址以便 Safari 在启动的同时打开,就可以了。请注意,当你在使用 Safari 或 Chrome 浏览器时,可以在 Action Categories 里选择已经定制好了的 Actions,而其它浏览器则只能通过 Web 标签页下的 Open a URL 实现。URL 的打开顺序同 KM Action 的排列顺序是一样的,因为文章开头就有说过:KM 对于每个 Action 的执行方式都是按步骤执行的,而不是同时运行。

在连接到指定 Wi-Fi 时,打开 GoAgentX 客户端。GoAgentX 是帮助我实现科学上网的,所以才想到创建这个 Macro。它的 Action 设计也不难,只是触发器改为了 Wireless Network Trigger 罢了,具体内容见下图。

这两个示例就是「同步工作」的代表,意味着让指定对象和 Action 之间相互触发,从而使电脑变得更加自动化。类似的例子有太多,我这里也就不一一介绍了,读者们可以自行尝试制作一些初级的 Macro,久而久之,你就会发现 KM 的便捷之处啦。

关于修饰键

过去我曾大力推荐过一款叫作 BetterTouchTool 的软件,因为它可以为系统默认的触摸板和键盘操作,提供一些修饰性的控制方式,说得明白些,这就是一款可以让用户自定义快捷键和多指触控方式的应用。但它有个比较严重的问题,就是在 OS X 10.10 环境下,用户在将「睡眠」状态的设备唤醒后,BTT 可能会无法自动运行。

正是因为这个理由,我一直都想找其它的软件代替它。坦白地说,虽然 KM 对触摸板的支持没有那么全面,但至少它对键盘操作的支持是非常强大且稳定的,所以看在它良好的综合性能上,我最终还是选择了 KM。相信看了接下来的介绍,大家就能有所体会。

回到正题。KM 不仅能像 BTT 那样修饰一些 OS X 默认的快捷键设定,还能针对某些特定按键提供新的操作模式。前者可以通过一个叫作 Type a Keystroke 的 Action 实现(在「Simulate Keystroke 模拟…按键」处键入新的组合键即可),但「特殊按键」又是什么呢?

其实,我所谓的「特殊按键」是指 right command、left command、control、fn、reject、option 等这些修饰键(释义见下方引用文本框),但是 KM Action 中的 Device Trigger 则可以为其单独赋予功能,从而让用户实现一键操作,例如:右 CMD 键隐藏当前 Cocoa 窗口。

修饰键的概念:通常情况下,它们需要配合一个或多个数字、字母或符号键进行组合,才能使用,并不能独立执行,例如:CMD+M 可以最小化窗口。但某些非 Sandbox 应用就可以做到所谓「独立修饰」的效果,Keyboard Maestro 就是其中的一个代表。


虽然我已经有点「根本停不下来」的感觉,但本文暂且就先写到这里。客观地说,这篇文章给出的所有 Macro 似乎都太简单了,不过这倒也符合「入门」的要求,至少能让「零基础」的读者更好认识并上手这款工具。最后再回顾一下本文的要点:

  • Keyboard Maestro 是个强大的 Automator 类工具。
  • 其中最简单的元素是:Macro 宏 > Action 独立的行为/步骤。
  • 每个 Macro 中的所有 Action 都是按照排列顺序运行的。
  • 每个 Macro 都必须有 Trigger 触发器。
  • 一个 Hot key 快捷键可以同时进行多个 Macro 的运行。
  • 合理利用「编辑」等功能进行排故,避免 Macro 无法运行。

另外,预告一下下篇文章将会继续介绍的内容:

  • 通过 Time Trigger 实现 Reminder 效果。
  • 使用 USB Device Trigger 执行特殊命令。
  • 模拟鼠标移动、点击、滚动等方法实现类似 Shortcat 的效果。
  • 触发 Notifications 通知类提示,并进行互动。
  • Variables 变量的定义和使用。