A saner keyboard

I think keyboards are fascinating devices, from design, technological, and linguistic perspectives. After all, a keyboard encompasses the tasks of (i) communicating in written language, (ii) operating and controlling the machine, and (iii) programming in computer language.

Shortly after starting to use GNU Emacs, I found myself thinking extensively about the position of the keys on my keyboard. After researching a bit, the first information I found was about the different layouts, particularly qwerty and dvorak.

Qwerty Layout

Qwerty Layout

Dvorak Layout

Dvorak Layout

At first, dvorak's proposal to distribute the keys according to letter frequency seemed sound to me. However, in a context of writing in different languages, the frequency and positions would have to change for each language. For that reason alone, I ended up deciding to stick with qwerty for now.

Although the linguistic layout had an impact, I was more concerned with the position of the operational keys. For example, to me, it did not make sense for CAPS to be an easier-key-to-press than ESC. While reading the book Mastering Emacs, I ended up discovering that the keyboards, at the time of GNU Emacs creation, were completely different in terms of modifiers.

A much older joke is that Emacs stands for “Escape Meta Alt Control Shift.” (…) Back then, most Emacs keys were bound to a larger range of physical keyboard modifiers but when the keyboard maker (and the business that made the machines the keyboards were plugged into) went bust, Emacs had to change with the times. Instead of undoing the cornerstone of Emacs, the developers shuffled the keys around and made them work on normal, boring PC keyboards.

— Mickey Petersen, in Mastering Emacs (2015)

When I saw the photo of a Space Cadet used on the first Lisp machines, many traditional GNU bindings started to make even more sense, beyond their mnemonic aspect. For example, the fact that the current Alt key is called M (Meta).

Space Cadet

Space Cadet used with the LM-21

Until this moment I was using the formidable KMonad to swap the position of CAPS and ESC. I also spent some time customizing different layers to have a little more comfort even on a traditional keyboard design. One of KMonad's most powerful features is the ability to assign different commands to the same key based on the press type. For instance, I programmed my SPC key to act like s (Super) when pressed for more than 500ms without affecting its default functionality.

 1  #| --------------------------------------------------------------------
 2                     KMonad: BR abnt-2 100% template
 3  -------------------------------------------------------------------- |#
 4
 5  (defsrc
 6    esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ssrq slck pause
 7    grv 1 2 3 4 5 6 7 8 9 0 - = bspc ins home pgup nlck kp/ kp* kp-
 8    tab q w e r t y u i o p [ [ ret del end pgdn kp7 kp8 kp9 kp+
 9    caps a s d f g h j k l ; ' ] kp4 kp5 kp6
10    lsft 102d z x c v b n m , . ; / rsft up kp1 kp2 kp3 kprt
11    lctl lmet lalt spc ralt cmp rctl left down rght kp0 kp.
12  )
13
14  (deflayer base
15    caps f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ssrq slck pause
16    grv 1 2 3 4 5 6 7 8 9 0 - = bspc ins home pgup nlck kp/ kp* kp-
17    tab q w e r t y u i o p [ [ ret del end pgdn kp7 kp8 kp9 kp+
18    @ces a s d f g h j k l ; ' ] kp4 kp5 kp6
19    lsft 102d z x c v b n m , . ; / rsft up kp1 kp2 kp3 kprt
20    lctl lmet lalt @dwm ralt @swt rctl left down rght kp0 kp.
21  )
22
23  (deflayer xfk
24    esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ssrq slck pause
25    grv 1 2 3 4 del 6 7 8 9 0 - = bspc ins home pgup nlck kp/ kp* kp-
26    tab q w @db @df t y @bw up @fw p [ [ ret del end pgdn kp7 kp8 kp9 kp+
27    caps a ret bspc f g home left down rght end ' ] kp4 kp5 kp6
28    lsft 102d z x c v b n m , . ; / rsft up kp1 kp2 kp3 kprt
29    lctl lmet lalt spc ralt @swt rctl left down rght kp0 kp.
30  )
31
32  (deflayer switch
33    _ @s1 @s2 _ _ _ _ _ _ _ _ _ _ _ _ _
34    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
35    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
36    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
37    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
38    _ _ _ _ _ @swt _ _ _ _ _ _
39
40  )
41
42
43  (defalias
44    dwm (tap-hold 500 spc lmet)
45    swt (layer-toggle switch)
46    ces (tap-hold 500 esc lctl)
47    s1 (layer-switch base)
48    s2 (layer-switch xfk)
49
50    bw (around ctl left)
51    fw (around ctl right)
52    db (around ctl bspc)
53    df (around ctl del)
54  )

However, even after customizing my entire keyboard using KMonad, I was still bothered by the physical position of the keys. Furthermore, the idea of ​​running a separate program to modify them did not appeal to me that much either. It was then that I discovered the X-Bows keyboard.

X-Bows

X-Bows

The X-Bows has alternative keys for the thumb position, which was previously used primarily to press SPC. With these new keys, I can control the C, M and S modifiers only with that finger. I also have DEL and RET within easy reach. In short, the keyboard relieves combinations from the weakest finger, the little finger, to stronger fingers near the keyboard's center. That, along with the spacing and angulation, represents huge gains in comfort and performance.

Aside from the ergonomic benefits, the ability to use thumb modifiers is also a boon when using GNU Emacs. Additionally, I found adapting to the keyboard to be quicker than expected. I will write more about that in an upcoming post on touch typing.

In advance, I have been using the X-Bows for just over 3 months now. The only disadvantage I have noticed so far is that I have become so used to its design that it feels odd typing on other keyboards, especially on laptops. I have become somewhat dependent on it, which is not necessarily a bad thing. Ideally, it would be great to have laptops with the thumb cluster design one day. Or rather, if this design became a widespread standard.

Until then, the most viable option has been carrying the X-Bows with me whenever necessary.


1

Retro-Computing Society of Rhode Island, via Wikimedia Commons.

∗ ∗ ∗

notes   computing  

Comment by email ↪

Back to blog ↩