HHKB(Happy Hacking Keyboard)相信程序员都会听说过,无须多说,看看 GNU 教主用 HHKB 的风采。

Richard Stallman

如果恰好你手中的 HHKB 也是教主这个型号,那么是没有蓝牙功能的。现有的选项是:

  • A 官方有售蓝牙版;
  • B 官方有售蓝牙适配器;
  • C Hacking,改造手中的键盘!!!

不用想,一定选 C。

Hacking

第一个做出 HHKB 蓝牙控制模块的人应该是 hasu了。关注了很久一直没有下单,主要原因是购买困难,首先要给作者发个邮件,然后等作者回邮 paypal 付款链接,付款后等作者从日本发货……

一直关注淘宝,盼望着有国内的大神把火种带给中国人民。最近同事购入了蓝牙版的 HHKB,我又想起了这回事,上淘宝一搜,喜出望外,竟然真有大神做出来了,还是改进版!作者是 YANG,介绍可以看这里 http://help.ydkb.io/doku.php?id=kb-mods:hhkb-ble ,购买链接也在里面。从介绍页面得知,优化的主要是省电这一块。

焦急地等了一个多星期,终于到货了。拆开后和我的 HHKB 合影,左上是主控板,中上是电池,右上是额外的 usb 连接线,可以在键盘内内置一个U盘。

开箱

安装过程非常简单,只需要螺丝刀,下图是 HHKB 拆开的样子。

安装中

换上主控板,装上电池,完成。上电连接电脑,敲几下键盘,没问题就可以把外壳装回去了。装好之后完全看不出痕迹。

安装完成

Mapping

看到这里,你以为仅仅是给 HHKB 加上蓝牙这么简单吗?No no no. 这个主控板除了给 HHKB 加上蓝牙之外,还加入了强大的编程功能。原来在 MacOS 上我用 Karabiner 改键,在 Windows 上用 SharpKeys,现在这个工作可以转移到键盘里了。

ydkb.io 的映射逻辑非常灵活。下图从 ydkb.io 引用而来,支持8层,每一层都可以设置一套按键。这些层不是单选的关系,而是层叠的关系,举个例子,打开了第1层,但是对应的按键没有配置,那么将会穿透到第0层对应按键上。

利用这个特性,我们可以很容易实现 fn 键。只需要给 fn 组合建的功能都设置到一层里,然后把 fn 键作为该层的开关即可。这是最简单的用法,我们还可以实现更复杂的功能。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Keymap: 8 Layers                   Layer: 按键矩阵
-----------------                   ---------------------
     ____________ 优先级                   _______________________
    /           / | 高                    / ESC / F1  / F2  / F3   ....
 7 /___________// |                      /-----/-----/-----/-----
 6 /___________// |                     / TAB /  Q  /  W  /  E   ....
 5 /___________/  |                    /-----/-----/-----/-----
 :   _:_:_:_:_:__ |               :   /LCtrl/  A  /  S  /  D   ....
 :  / : : : : : / |               :  /  :     :     :     :
 2 /___________// |               2 `--------------------------
 1 /___________// |               1 `--------------------------
 0 /___________/  V 低            0 `--------------------------

我的配列

HHKB 原生的配列有几处地方我一直不习惯,必须调整:

  1. 退格与|\键的位置交换了;
  2. ~` 键不在1的左边。

1好解决,轻松互换。2不好办,因为1的左边已经被esc占据,esc~`三个都是非常常用的键,怎样让它们在一个键上和平共处?

首先,~是需要按shift输入,只要让shift + esc = ~即可,这个功能在 ydkb.io 里直接有提供。其次是 ` 键,这个按键我主要用在三个地方,频次从高到低分别是:

  1. cmd + ` 在 MacOS 里是同应用不同窗口间的切换;
  2. markdown 的 fence code block;
  3. shell、sql 里用到。

我打算只解决1,因为2、3不常用,可以继续用=右边的按键。解决办法是把 cmd 改成 cmd & 层1,然后把 ` 放到层1的esc上。

这样,cmd + esc 就变成 cmd + `了。而 cmd + 其他则不受影响,因为其他键都留空,就会穿透到层0。

最后,附上我的配列。

Layer 0:

Layer 1:

Layer 2:

Happy hacking!