Chorded Keyboard

Please send comments to jecel@lsi.usp.br

People who know how to type can enter text much faster than those who write by hand. Moving those two options to a computer doesn't change that fact. Unfortunately, a keyboard normally has to be so large to be usable that it is not practical for very small machines, like PDAs. In fact, science fiction writers have always dreamed that the computer (terminals) of the future would be an electronic version of the notepad and pen. So it is no surprising that pen input (for menus as in WinCE hand helds, or menus and text as in the Palm Pilot) has become a universal feature. It does have a few downsides:

So it was decided to use a touchpad for positioning the cursor and a chorded keyboard for text entry (see the features page for more details). Since no information was available for other chorded keyboards besides the "twiddler" (which has 15 primary keys and 5 modifier keys, plus a motion sensor "mouse"), the following design was created from scratch. The first requirement was that there should only be four keys so that the fingers wouldn't have to be lifted from them and the thumb would only be used to hold the device while in operation.

A "chord" is generated by pressing more than one key at the same time. To make it easy to use, the chord is determined by what keys were pressed at the time the first of them is released. Thus there are no critical timings to worry about. The only restriction is that all four keys must be released between one chord and the next for proper recognition. The press of a single key will be called a "stroke" to distinguish this from the chords. The system described here is called the "stroke/chord" system as most characters are generated by a stroke followed by a chord.

There are six combinations of two key chords, four combinations of three key chords and only one possible four key chord. The latter will always mean "backspace", erasing the last thing typed. This easy to use correction system is specially handy in reducing frustration when learning the system. The ten other chords are used as indicated in the tables below.

The four keys are called "a" (the index finger key), "e", "i" and "o" (the little finger key) respectively. A single stroke (that is either followed by another stroke or the last key press before the cursor moves text input focus to another part of the user interface) will simply generate the indicated character. If a chord follows the stroke, however, then it is considered as simply a prefix that modifies the meaning of the chord as shown in the tables. A help system which keeps an updated status line at the bottom of the screen can be invoked at any time and is a big help in learning the system. When a stroke is generated, the corresponding character is temporarily inserted into the text and the status line shows what will be generated if one of the ten chords follows. If it turns out that this was a single stroke character, its insertion becomes permanent and the status shows the chords of the new prefix. But if a chord follows that initial stroke, the corresponding character replaces the one that was temporarily inserted and the status line is cleared.

Here is the table for lower case characters (where each column corresponds to a chord which is indicated as a combination of keys that must be pressed - "ao" means that the first and last keys are pressed together):

stroke\chord ae ei io ai eo ao aei eio aeo aio
a c m n r s u v w x z
e g j p q y , . ; [ ]
i b d f h k l t shift space symbol
o 1 2 3 4 5 6 7 8 9 0

This is just a quick and dirty allocation of the codes and will most certainly change in the future. It was just created to test if the basic idea is sound. See how the space character, one of the most used of all, got stuck with the hard to type "aeo" chord. The characters should be reordered so the most common use the two key chords. With this allocation, many of the characters used in Smalltalk are very awkward to type. And considering that this product will first released in Brazil, a system that makes typing in Portuguese should be developed.

The letters were divided according to their shape, so there would be at least a little logic behind the system. The "a" stroke is the prefix of all the characters that fit inside a small circle. Those with descenders and the basic symbols are grouped with the "e" prefix, while those that extend upwards and the control characters use the "i" prefix. The "o" stroke precedes the digits.

So the "k" character is generated by pressing the "i" key by itself (which temporarily inserts an "i") and then releasing it and pressing the "e" and the "o" keys together (which will replace that "i" with the "k"). We will indicate this as "i-eo".

Here is the table for upper case characters (either due to a shift lock being in effect by following the shift modifier code, i-eio):

stroke\chord ae ei io ai eo ao aei eio aeo aio
a C M N R S U V W X Z
e G J P Q Y < > : { }
i B D F H K L T shift

lock

space shift

symbol

o ! @ # $ % ^ & * ( )

Note that the shifted numbers generate the characters that are on the same keys in the US PC keyboards. A shifted shift is a "shift-lock" (not a "caps-lock" as numbers are also affected) and all characters that follow are taken from this table instead of the previous one. If a second shift-lock is generated, then the system returns to the lower case state.

Here is the table for a chord following the symbol modification code (i-aio):

ae ei io ai eo ao aei eio aeo aio
' ` / \ = -

The four three-key chords haven't been assigned for now. Note that in the case of these extended symbols we have a chord following another (the "=" character is generated by the sequence "i-aio-eo", for example).

Here is the table for a chord following the shift symbol modification code (i-eio-i-aio or i-aio during a shift-lock state):

ae ei io ai eo ao aei eio aeo aio
" ~ ? | + _

This will certainly have to be changed - to have to type "i-eio-i-aio-eo" to get a "+" is simply absurd, though it might not be too slow with a lot of practice. One character that is missing from these tables is "return".