Colemak-Steno Hybrid in QMK
by |QMK Firmware
The Planck (pictured above) is a 40% mechanical keyboard with an ortholinear layout (the keys are arranged in columns rather than being staggered as on a traditional typewriter keyboard). The keys are laid out in a 4 × 12 grid. You can find out more about the rationale and the physical properties of the board on the OLKB website and this early writeup on my layout.
The board’s microcontroller is programmed through the free/libre QMK firmware, which allows for a great deal of flexibility in implementing keyboard layouts. QMK has some interesting features including the relatively new Combo feature:
The Combo feature is a chording type solution for adding custom actions. It lets you hit multiple keys at once and produce a different effect. For instance, hitting
A
andS
within the tapping term would hitESC
instead, or have it perform even more complex tasks.To enable this feature, [you] need to add
COMBO_ENABLE = yes
to yourrules.mk
.
Having dabbled a bit in stenography via Plover, this feature immediately caught my attention. Could one develop a hybrid input method that was typing-centric but allowed for common words to be stroked as if on a steno keyboard?
Stenographic Combos
B+C T+I L+D M+K Y+U F A S T ! → because this would make you fast!
I started out with a list of common words in English and chose chords (strokes) that felt most intuitive to me. I also took some cues from Plover steno theory, but it was impossible to imitate steno very closely because of the nature of keyboard layouts such as QWERTY, which were not designed with this sort of thing in mind. In my implementation each combo triggers SEND_STRING
in order to output a word (or word affix) followed by a space:
Combo | Translation |
---|---|
A+B | about |
A+N | and |
A+T | @ |
B+C | because |
E+G | e.g., |
H+V | have |
I+E | i.e., |
I+O | tion (suffix) |
L+D | would |
M+K | make |
M+T | ment (suffix) |
T+H | the |
T+I | this |
T+L | until |
U+R | you're |
W+A | what |
W+C | which |
W+I | with |
W+L | will |
Y+R | your |
Y+U | you |
Note that what I came up with is specifically tailored to the Colemak layout, but one could just as easily adapt this idea to QWERTY, Dvorak, and others. This was only a first pass—I expect to revise and expand this system over time.
Challenges & Limitations
Layout — Colemak (or QWERTY etc.) was not designed with chording in mind, unlike a steno layout. That constrains the number of chords with good mnemonics somewhat, since certain potentially useful chords require two or more keys on the same finger.
Capitalization — I haven’t found a good way to output capitalized variants of words. All my combos are defined in lowercase, meaning that I can’t use any of my chords at the beginning of a sentence, for example. Update: I got around to making the macros produce alternate output when the Shift key is held. For example, the versus The and http:// versus HTTP.
Overlapping — Due to a limitation of the combo feature’s current implementation, if you define a combo as a subset of another combo, chording the bigger combo triggers both combos. This precludes doing something clever like H+V → have and H+V+G → having (you would wind up with have having). Update: This limitation was eliminated thanks to work done on QMK’s combo implementation.
You can find the latest version of my keymaps at https://codeberg.org/noahfrederick/qmk-keymaps, and you can find the version that was current at the time of this writing here.