缘起

LaunchBar 和 Keyboard Maestro 是两个我日常使用最多的效率工具。据 Keyboard Maestro(简称 KM) 在 About 界面显示,两台 Mac 上的 KM分别为我节省了 5 个月和 3 个月时间。

我个人应该是自 2016 年起开始使用 KM,感觉这个数字可能只是略有夸张,可以想见本人日常使用的频繁程度。对我个人而言,KM 实如其名,确实是“键盘大师”,其是“大师”,但是有点过于依赖键盘,优缺点都很明显。优点在 KM 有丰富的功能模块,而且可以通过积木式的可视化排列实现几乎无穷的可能,限制你的只是自己的想象力。具体可以看少数派已有的教程,如:

  

这些文章入门很好,但是涉及到的 KM 功能可能不到全部的 1/3。个人觉得 KM 最为有用的是可以感知系统环境,如剪切板是否改变及其内容,当前软件名称、窗口位置和大小、用户的输入等等。KM 的缺点在其唤起较为困难,虽然 KM 的 Macro 启动方式(trigger)已经很丰富,如可以通过热键、剪切板改变、Status_Menu 等,此外还有在 Macro Group 介面可以设置 Palette(一个根据当前软件判断是否弹出的列出了所有 Macro 的界面)。

KM 官网列出的 Trigger 以及一个 Palette 示例

以上提到的启动方式在 Macro 比较少时还算方便,当 Macro 较多时想找到想要的就会力不从心,如果设置的热键过多,难免记忆混淆;如果依赖 Palette ,每个软件弹出的 Palette 信置不同,需要视觉辅助去寻找,找到后仍需要通过点击或者所提示的热键进行启动。

LaunchBar 作为启动器软件,其在感知系统环境方面没有 KM 的优势,但在启动方面有先天优势:LaunchBar 系统自带了丰富的 Action、可以对检索到的条目进行二次筛选、其独特的 Retype 机制可以不用删除错误字符即可重新筛选等。因此如果可以通过 LaunchBar 来筛选 KM 的 Macro,将会达到事半功倍的效果。之前已经有部分用户考虑到这个需要,如以上提到的文章“ Keyboard Maestro 入门指南”中就列出了一个 LaunchBar 的 Action,通过这个名为Keyboard Maestro Macros (以下称 KMM)的 Action,可以检索 KM 中所有可用的 Macro,然后再通过输入字母将需要的 Macro 筛选出,回车以执行。

KMM 运行流畅,很有实用价值,但其缺点是将所有 KM 的 Macro 都列出来了,这样丧失了 KM 感知系统环境的灵魂。因为多数情况下,我最需要的是只能运行在当前软件下的 Macro,而不是针对其它软件制作的 Macro。此外则是每次需要检索 KM 的 Macro 时,需要通过⌘+Space唤起 LaunchBar,然后输入 “keyboard maestro macros” 或 “kmm”回车进行二次筛选,虽然费时不多,但是打断了思路,影响了流程。受到KMM 启发,想到可以通过制作 LaunchBar 的 Action 和 KM 的 Macro 相配合,实现单击⌘+Space 时唤起 LaunchBar 以供日常启动使用,双击⌘+Space 时就唤起当前软件的 Macro,因考虑到日常工作习惯,有时也需要检索 KM 中其它可用于全局的 Macro(如处理剪切板的 Macro),因此最好是当前软件对应 Macro 在前,全局 Macro 在后,如此岂不美哉。

具体实现

Keyboard Maestro 部分

KM 部分需要制作三个 Macro。第一个是用于生成所有全局可用的 Macro 属性 JSON 文件的 Macro。

用于生成所有全局 Macro 信息JSON的 Macro

第二个用于生成当前软件可用的 Macro 属性并拼接前面 JSON 文件的 Macro:

第三个是用于启动 LaunchBar 的 Macro(命名为 KM to Active LaunchBar),并将 KM 中的变量“LB”传递到 LaunchBar 用于显示和筛选。

LaunchBar 部分

LaunchBar 需要制一个 Action 用于接收 KM 生成的 JSON 文件并展示出来。

LaunchBar 需要制作的 Action

 

 

请以你的名字呼唤我

到了这里,只需要最后一步:如何设置总击⌘+Space 为打开 LaunchBar,而双击⌘+Space 为激活KM to Active LaunchBar,这时需要另一个软件:Karabiner-Elements

Karabiner-Elements 是一个改键软件,但是除了改键之外,还有其他功能,如可以运行 shell 语句。因此可以通过在 Karabiner-Elements 上设置双击时激活KM to Active LaunchBar(KM 上也有双击击活的 trigger,但是如果在KM to Active LaunchBar 的 trigger 中设置为双击 ⌘+Space,无法激活)。

 

在 Karabiner-Elements 的 Complex modifications 中增加一条设置:

{
    "description": "Double Command Spacebar to run shell",
    "manipulators": [
        {
            "conditions": [
                {
                    "name": "count",
                    "type": "variable_if",
                    "value": 1
                }
            ],
            "from": {
                "key_code": "spacebar",
                "modifiers": {
                    "mandatory": [
                        "left_gui"
                    ]
                }
            },
            "to": [
                {
                    "shell_command": "osascript -e 'tell application \"Keyboard Maestro Engine\" to do script \"KM to Active LaunchBar 的UUID\" with parameter \"Whatever\" ' "
                }
            ],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "spacebar",
                "modifiers": {
                    "mandatory": [
                        "left_gui"
                    ]
                }
            },
            "to": [
                {
                    "set_variable": {
                        "name": "count",
                        "value": 1
                    }
                },
                {
                    "key_code": "spacebar",
                    "modifiers": [
                        "left_gui"
                    ]
                }
            ],
            "to_delayed_action": {
                "to_if_canceled": [
                    {
                        "set_variable": {
                            "name": "count",
                            "value": 0
                        }
                    }
                ],
                "to_if_invoked": [
                    {
                        "set_variable": {
                            "name": "count",
                            "value": 0
                        }
                    }
                ]
            },
            "type": "basic"
        }
    ]
}

 

将第 22 行的 UUID 更改为之前标出的 UUID,即可实现双击激活对应 Macro。

至此大功基本告成。

尾声

因为 LaunchBar是通过英文字符、数字等对内容进行筛选,因此需要在 KM中制作 Macro 时标题加上英文,或者拼音缩写等字符。KM 中可以通过名称对 Macro进行排序,具体可见Palette Organizer v1.3 (updated Dec 3, 2021)的说明。


说明 1:本文基于 macOS Catalina(10.15.7)、Keyboard Maestro(10.0.2)、LaunchBar(6.15)。因为感觉高版本 macOS 没有重要的值得更新的内容,所以没有升级,高版本是否可用,还请自行测试。

说明 2:以上提到的 Macro 和 LaunchBar Action 可在此处下载

 

 

 

 

 

 

 

9
16