A Quick Word About Chorded Keyboards

Background

In the 1968 "Mother of All Demos" [1], Doug Engelbart demonstrated several cutting edge technologies. They were still decades away from mass adoption, but in this video he demonstrated: computer networks, video conferencing, shared editing of a digital document and the computer mouse.

If you blinked, you might have missed one particular user interface device: a Chorded Keyboard [2]. Chorded keyboards were not new, though Engelbart might have been one of the first people to use them with a digital computer.

If you look at a video of the demo [3], you can see Engelbart use the one-hand chorded keyboard at around the one minute mark. It's interesting to note it's only used while his other hand is on the mouse.

In this demo, at least, Engelbart seems to think of the mouse and the chorded keyboard as a pair of components that make up the same computer-human interface. That's a distinction that may have been lost on modern computer users.

There's no right or wrong way to use your computer, really. If it works, then it's probably "right." But the chorded demo page is intended to give people an easy way to test out one handed typing, just to see what it's like.

Development

I've been using chorded keyboards on and off for several decades. One of my favourites is/was The FrogPad™ [4]. Every interaction I had with Linda Marroquin was positive. But I guess my hands are smaller than what the FrogPad was designed for. And though my fingers never hurt while using it, it was mildly uncomfortable.

While thinking about how I would improve the FrogPad, I started thinking about Engelbart's original Keyset [5]. It struck me that Engelbart's Keyset was the solution to the problem "how can I press a few keys with one hand while my other hand is resting on the mouse." This is slightly different from other modern chording devices that seek to replace the standard keyboard completely.

Around this time an acquaintance from the retro-computing community suggested I build something that looked vaguely like the original, but with a modern USB interface.

After digging around I found references implying Engelbart's original Keyset used a very basic BCD-like mapping from key chord to character. This seemed a bit sub-optimal to me, so I set out to build a better experience.

The chord to key character mapping I found references to was a basic mapping of the 31 different chords to 26 upper case letters and 10 digits. This seems unlikely to me since 26 + 10 is greater than 31.

My first requirement was that the keyboard have five keys, one for each finger. I wanted to try something different from the FrogPad; plus, Engelbart's original design was clearly a five-key affair.

My next requirement was that the chord to character mapping be able to generate all the characters found on a modern keyboard: upper and lower case letters, digits, space, punctuation and random symbols like tilde (~) and the back-tick (`). I punted on arrow, PageUp, PageDown and other cursor movement keys because I felt positioning the cursor could be accomplished easier with the mouse.

Being a fan of Jef Raskin's work in Computer-Human Interaction, I experimented originally with what he called "Quasi-Modes" [6] to select different "sub-mappings" between chords and characters. The results were sub-optimal. Keeping one key pressed while manipulating the state of the other keys on a five-key Keyset proved uncomfortable and it didn't solve the original problem of extending the number of characters you could potentially select.

The rejection of Raskin-like Quasi-Modes means the keyboard would be modal. In the first mode, pressing the first and second keys would result in an 'E' character being emitted while in a different mode maybe that same chord would emit the '0' character. I wanted to have a small number of modes, but enough to emit all the characters of a standard modern keyboard.

At this point I should digress and mention I'm limiting the current version of the Keyset mapping to English / Latin characters. I am personally interested in adding ß, Ø and diacritics like tilde (◌̃) , grave (◌̀), acute (◌́), umlaut / diaeresis (◌̈), circumflex (◌̂), macron (◌̄), cedilla (◌̧), overring (◌̊) and caron / háček (◌̌), but I'm probably going to require the input of native Czech, German, French, Italian, Spanish and Scandinavian typists before I can do justice to those languages' alphabets. Cyrillic and Greek alphabets are also currently unsupported. My suspicion is it would be hard to wedge such alphabets into the current mapping. I'm happy to support anyone who wants to adapt the ideas here to other alphabets, but have to admit my own inexperience with non-European languages prevents me from trying to do such work myself.

Once I decided the mapping would be modal, I wanted to make it easy to set the mode to a known good state. Imagine you're typing a few characters and you get distracted. What mode is your Keyset in? My solution was to have one of the 31 chords be a "reset to the first mode" ([TOP]) command. And if we're modal, you need a "next mode" ([NEXT]) command. These keys were going to get pressed a lot, so it made sense to make them to single-finger chords. Other very common key presses were "backspace" ([BS]), "enter" ([ENTER]), and the space bar ([SPACE]).

That seemed pretty good, one-finger chords assigned to each of the common operations. But during testing I discovered I have a very weak pinkie finger. It doesn't like to be used that much. So I moved the [TOP] command to a two finger chord and started thinking about producing actually characters.

I found a character frequency chart for English somewhere and assigned vowels to various two key chords, taking care to assign 'U' (the least common vowel) to a two key chord that uses the pinkie finger.

The rest of the letter to chord mappings follow the frequency of letters, assigning chords in the order: two finger chords (without pinkie), three finger chords (without pinkie), two finger chords (with pinkie) and then three, four and five finger chords with the pinkie finger.

Assigning digits followed a similar scheme. More frequently used digits (like 0, 1, 2 and 3) would be assigned to two and three finger chords without the pinkie. Other symbols were assigned more or less at random.

So despite appearances, the mapping between chords and keys is not completely random.

References

  1. Mother of All Demos [Wikipedia]
  2. Chorded Keyboard [Wikipedia]
  3. Part 2 of 10: Engelbart and the Dawn of Interactive Computing: SRI's 1968 Demo (Highlights) [YouTube]
  4. FrogPad [Wikipedia]
  5. Historic Firsts: The Keyset [Doug Engelbart Institute]
  6. Quasi Mode [wiki.c2.com]