SpaceLauncher 适用于 macOS

SpaceLauncher 的故事

故事开始于 2013 年,和 Alfred 有关。

我读到一篇关于在 Alfred 里添加 App 热键的文章,立刻觉得这件事很对:用一个键跳到某个 App,比先搜索它要快得多。

那时候也有很多人把 Caps Lock 改成“hyperkey”,但这一直不适合我。我对打字有点老派,每个键都有固定手指负责;Caps Lock 和 1、Q、A、Z 都由左手小指负责。按住 Caps Lock 时,小指就被占住了,反而碰不到那些我想和它组合的键。像 Caps Lock + A 这样的组合,我的手根本做不出来。

后来我转向 LaunchBar,但它没有这个功能。于是我开始用 Karabiner。既然已经要改键,我不如选一个最舒服的键。最舒服的键已经在拇指下面,就是 Space。我完全用 Karabiner 拼出了一个和今天 SpaceLauncher 很接近的东西。(旧配置在这里,现在大概早就坏了。)所以,是的,Karabiner 可以做这件事。对一些人来说它现在仍然可以。但不是对所有人都可以,原因后面会说。

后来一次 macOS 更新来了,Karabiner 还没跟上。我已经太习惯这种打字方式,没法不用它。当时我误以为 Karabiner 已经停止维护,于是决定自己做一个。(其实它完全没有停止维护,直到今天还在更新。谢谢 Karabiner。)

比看起来更难的部分

真正做出来并交给其他人用以后,我才学到一件没预料到的事:每个人的打字节奏都不一样。

真实打字是重叠的。下一个键常常会在上一个键完全抬起之前按下,在 Space 周围尤其常见。为了让 Space 同时作为快捷触发器和普通空格键,我必须写很多逻辑,比一开始想象得多得多。Karabiner、Hammerspoon、Keyboard Maestro 这类通用改键和自动化工具可以近似处理其中一部分,但 SpaceLauncher 是专门围绕 Space 时序问题构建的。这个问题就是它存在的原因。

老实说,我不是一个很厉害的程序员,这团时序逻辑经常让我头晕。如果早知道它这么难,我可能会直接等 Karabiner 更新。两件事让我继续做下去:第一,我自己每天都用它。第二,时不时会有用户发来很友善的消息,或者带来值得解决的问题。

一段很长的绕路

这条路并不笔直。

每当 App 达到一个稳定状态,我就会失去动力,因为新功能真的很难加。到了 2022 年左右,有用户问能不能把单个修饰键轻按作为前导键。我喜欢这个想法。我做出了一种通过窗口接收触发键的方法,足够干净,可以放到 App Store,于是它变成了 keyseq。我也认真打磨了它;修饰键同样需要区分“前导键”和“正常使用”,所以里面也有同类细碎的修补,只是稍微简单一些。

然后我想:也许 keyseq 可以成为 SpaceLauncher 的核心。于是有了 SpaceLauncher 2,它支持今天所有类型的前导键。但底层结构有一个根本缺陷:通过窗口接收触发键,后来证明很容易给自己制造麻烦。到那时它已经太绕了,我不想再打开它。于是我慢慢转向了 keyseq。SpaceLauncher,对不起。

还在继续

然后,2026 年初,AI 终于变得足够好了。

我说的是字面意思:刚刚足够好,就在这个时间点。六个月前的 AI 还没法解开这么拧巴的逻辑。有了这些帮助,我终于可以回到多年来一直想做的事情。

所以这个故事还没有结尾。SpaceLauncher 还没有完成,而这正是最好的部分。更好的版本正在路上。我来了。