























给常用应用设置快捷键可以极大提升效率,不仅节省时间,更主要的是减少思路的中断次数。
尤其在使用原生的 ⌘Command + Tab 或者 Mission Control 切换应用时,需要从正在思考的问题中跳出来,用眼睛去识别和定位要打开或者要切换的应用。
SpaceLauncher 是 Mac 下的一个快捷键工具,通过按住空格键并按下另一个按键,它可以执行相应的动作。这里的动作可以是打开一个 URL(包括应用、网页等),模拟按键或者嵌套更多按键。
如视频不能正常显示,请访问 官网 观看。
如果你了解 Brett 的 「Hyper key」,SpaceLauncher 实际上就是把空格键作为了一个更大的 「Hyper key」。1
用 Alfred 的时候,看到了 Tim Stringer 的 Alfred 2 Hotkeys Screencast,对常用的应用和文件夹设置了快捷键,后来转 LaunchBar,没有这个功能,于是就想找个替代方法。
我记不清当时知不知道 「Hyper key」。现在看来,Caps Lock 的键位对我来说还是不太舒服,主要是纠结于原来用小指按的「1」、「Q」、「A」、「Z」得用无名指按。
既然 LaunchBar 没有设置全局快捷键的功能,我就只能找别的工具来实现。既然要自己配置,那就尽可能配置一个最顺手的快捷键。看着键盘,最大的那个按键就是空格了,用来按空格键的拇指的事情也相对较少,可以好好利用下。当时也没想太多,考虑先试试看。
为了测试一下这个「空格快捷键」的概念,我先用 Karabiner2 实现了一个简单的版本,当时的感觉是,「我这个想法太好了」,然后发到了 微博 上,好像也没啥反应。后来又根据自己的习惯做了一些调整,那种指哪打哪的感觉让我持续夸了自己一个星期。逐渐习惯之后,也就意识不到它的存在了。直到 macOS 出了新版本 10.12,Karabiner 失效。

我先后两次在升级到 macOS 10.12 之后降级了系统,主要原因是 Karabiner 失效。最后一次不得不升级是因为最新版的 Xcode 只支持 10.12。
升级到 10.12 之后过了一段时间,我就在想,为什么没有「空格快捷键」我会觉得这么别扭。因为切换应用是个很频繁的操作,如果每次切换都要去识别一下应用的名字或者图标,都会分散注意力,而且是会频繁地分散注意力。当然,也怪我懒,没去做其它类似 「Hyper key」 的设置、一直在用 ⌘Command + Tab 切换应用。
初次接触这种方法可能会觉得通过快捷键切换应用也会分散注意力,但实际操作中会发现,经过短时间的适应,切换应用时并不需要去想,手指会习惯性地去按相应的键,好像形成了肌肉记忆,就像打游戏一样。
用空格做快捷键的一个好处就是双手不需要任何程度的扭曲,让切换应用的整个过程更加顺畅。
这么好用的功能不能用了,于是决定自己来实现。现在看来,当时严重低估了工作量。
(注意:SpaceLauncher 当前版本 1.3.7,之后版本功能可能会有变动。)
SpaceLauncher 的功能本身已经非常简单,默认设置可以满足一般需求,初始动作列出了一些例子,并不需要额外的操作说明。
个人建议,先添加一些最常用的应用,需要时再添加新的,不然会很快忘掉,而且忘掉的不只是某个应用的快捷键是什么,而是是否给某个应用设置过快捷键。
就我而言,我最常用的几个应用,Safari(S)、Xcode(X)、Terminal(T)、Tower(G)、Dash(W)、nvALT(A),我大部分时间都是在这几个应用之间切换。当频繁地感觉到切换某个应用很麻烦,才会考虑给它设置快捷键。
这样做能够尽快地通过最少的配置有效提高效率,按照 80/20 法则,可能对于大部分人来说,80% 的应用切换操作集中在 20% 的应用当中。
并不是每个人都需要 SpaceLauncher 的每一个功能,时间精力允许的话可以多了解一些,有需求当然没问题,但千万不要为了用某个功能强行制造需求。
个人认为上面提到的方法同样适用于大部分通用软件:优先满足主要需求;让软件服务自己,而不是为了让软件物尽其用而「折磨」自己。
当长按空格超过一定时间之后,SpaceLauncher 会弹出一个提示窗口,列出当前可用的快捷键。如果按照上面的方法,只设置常用的快捷键,这个提示窗口很少会用得着。
提示窗口中对很少使用的快捷键会加粗显示,经常使用的快捷键会通过调整灰度使其看起来淡一些,虽然看起来有点乱,实用更重要。


正常打字时,是不希望激活 SpaceLauncher 的,只有在停止打字 0.2 秒之后按下的空格才会被 SpaceLauncher 识别。
打字比较快的时候,会出现这样的情况,前一个按键还没有松开,后一个按键已经按下。如果前一个按键是空格,那么,在按下空格之后 0.2 秒内如果按下了下一个按键,那么这个按键将不会被识别为 SpaceLauncher 的快捷键。
这三个时间设置项的默认值基本可以满足大部分用户的需求,包括打字速度较快的用户。如果需要调整,但并不完全理解某个设置项的具体含义,请 在此 提交用户支持。
(以下假设左手常放在键盘上,右手会在键盘和鼠标 / 触摸板间切换)

file:///Applications/Launchpad.appfile:///Applications/Mission%20Control.appfile:///System/Library/CoreServices/Siri.appfile:///System/Library/CoreServices/Finder.appfile:///System/Library/CoreServices/Applications/Storage%20Management.appfile://{HomeDirectory}/Library/Mobile%20Documentsspacelauncher://show-preferences-windowspacelauncher://toggle-preferences-windowspacelauncher://switch-input-method/input-method-id不同的用户可能有着完全不同的按键习惯,但就一个用户来说,其按键习惯是相对固定的。导致的结果就是,在我使用过程中从来都没有出现过的问题,可能会频繁地出现在另一个人的使用过程中。
简单说一个具体细节:
正常按键是在按下按键的时刻生效(这里的生效是指打出相应的字符),而不是松开按键的时刻,如果打得比较快,很容易出现前一个按键还没有松开、后一个按键已经按下的情况。对于 SpaceLauncher,只能让空格键在松开时生效(打出空格),因为只有在松开时才能确定用户是要输入空格,而不是准备调用 SpaceLauncher 中的某个动作。
如果用户在按下空格之后立刻按下某个按键(比如 「V」),这个时候可能空格还没有松开,在正常情况下,用户期待的是先空格再 「V」,而因为 SpaceLauncher 只能让空格键在松开时生效,如果不做特殊处理,输出会是先 「V」 再空格。
如果用户打字非常快或者有这样的习惯,可能后续的按键也是混在一起的(前一个键没松开后一个键就按下了),比如,输入 「空格vic」,「V」、「I」、「C」 几个键也都是「粘」在一起打出来的,如果不做特殊处理,空格可能出现在「vic」的后面或者中间的任一位置。
上面的问题,在我的使用过程中就很难出现,即使在连续打字过程中,我仍然会在打出空格之后有一个不太明显的停顿(0.2 到 0.5 秒)。但对于其它用户,尤其是经常输入英文的用户,他们在打出空格之后可能会紧接着按下下一个按键,于是就可能出现上面所说的字符错位的问题。
好在这些问题都已经解决了。
因为使用了非沙盒接口,所以不能上架 Mac App Store。很多事情都得自己来做。这个时候才意识到 Apple 那三成的提成其实包含了很多。
我个人对应用在未告知用户的情况下联网非常反感,所以排除掉了像 DevMate 这样的一站式解决方案。
于是,应用更新、购买、注册验证、崩溃报告收集都得自己来,好在这些都有成熟的工具,不需要完全从零开始。
关于注册验证,我认为不需要非常严格,但也不能没有(如 soma-zone )。太复杂的验证浪费开发精力,没有验证对正版用户不公平,需要权衡。SpaceLauncher 使用了 CocoaFob 验证注册码。
用户反馈方面我采用了最原始的方法——邮件,而且留下了我的私人邮箱。之前在做 SPi 双拼输入法 的时候使用了 UserVoice 的服务,邮箱也用了相应的自定义域名,确实显得专业一些,但在和用户交流的过程中总有种奇怪的说不出的感觉,倒不如现在这样感觉亲切一些。
关于产品页面,因为对某些细节比较挑剔,所以产品页面没有用模板,而自己又不擅长界面设计,所以做这个看起来很简单的页面花费了不少时间。其中的视频做了浏览器兼容,图片支持 Retina 显示屏,页面做了移动设备适配,PageSpeed Insights 评分 98/100。
推广方面,SpaceLauncher 在 Product Hunt 发布之后获得了不错的评价。这次推广,我并没有遵照网上的一些经验,只是把想说的重点用自以为最高效的方式表达出来。因为无法对照比较,我也不知道自己的一些做法是否对增加票数有帮助。

另外,如果需要录制演示视频的话,下面是一些可能有帮助的录屏建议:
以上便是我开发 SpaceLauncher 过程中值得分享的一些个人经验。如果你对 SpaceLauncher 感兴趣,欢迎前往 官方网站 进行下载。
在使用的过程中,如果有任何建议或者遇到任何问题,欢迎提交 用户支持。
同时也欢迎加入 Telegram 上的 SpaceLauncher 用户群。
在此感谢 @郝海龙 对在 SpaceLauncher 使用过程中出现的问题的耐心的反馈,使我出于愧疚不得不想出对应于时间设置项「Disable SpaceLauncher for 0.2 seconds after your last typing」的解决办法。
感谢 @JailbreakHum 和 @孙小年 对文章的修改建议。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。