I keep looking for the Perfect layout for my Kyria keyboard. My main problem for a while has been that I just do not feel happy with the placement of the main modifier keys - control, alt, and command (yes, I am a Mac person). For a while, I mainly tried variations of placing them as close to where they would be on a standard keyboard as possible, but with the offset and staggered bottom row of the Kyria it never felt quite right.
I thought about trying to find good positions somewhere in the thumb clusters, but since each cluster is only comfortably reachable by on finger, it felt difficult to come up with something truly convenient.
My latest idea is to move the modifiers straight to the home row, and have both S-D-F and J-K-L act as control, alt, and command when held down. You can not beat the convenience of always having them right under your fingers, and having them on both sides should ensure that, with practise, I can always comfortably hit whichever combination I might need.
Setting up the key configuration was as easy as always using QMK, defining the positions as LCTL_T(KC_S), LALT_T(KC_D), and so on. (This says "Act as control when pressed, S when tapped".)
Actually getting it to work well, however, was a small research project.
Typing slowly and carefully was not any problem, but as soon as I picked up my speed (and on a Kyria, "high speed" is not all that high for me), I started getting unexpected key combinations. I would get modifier keys detected, and combined with a later keypress. So if I had tapped (in my estimation) L, I might get that registered as a press of command, combined with the second key I pressed after L. All of a sudden I had selected all text with command-a, jumped to the start of the line with control-a, or what have you.
Initial searches for solutions were not promising either. This seemed to be an area where people had various problems and nobody seemed to have a good solution. I tried playing around a bit with the tapping term - the base setting for how long a key needs to be pressed to register as being held down, and a bunch of flags for adjusting various tapping behaviours, but none of them truly helped.
What I eventually did (and I am not sure if all of this was necessary, but none of it had any negative effects) was this:
- Removed the debounce settings I had previously used
- Added TAPPING_TERM_PER_KEY
- Added a tapping term function in keymap.c which returns a long tapping term for all my home-row modifiers, and a more default short one for everything else
- Added IGNORE_MOD_TAP_INTERRUPT
This basically solves my problem by requiring a really long press before, say, S registers as control. IGNORE_MOD_TAP_INTERRUPT is somewhat confusingly documented, but it affects some situations where, without it, a modifer plus another key would be registered, changing this to instead registering two standard keypresses (in my case, for example turning a control-a to sa)
Removing debounce settings probably had no effect in the end. Removing them did improve results in some of my earlier solution attempts though, and I was happy to find out that my keyboard did not need the debounce settings, so I did not bother to put them back.
How does it feel?
Very good so far, thank you. Having modifiers right on the resting positions of the major typing fingers feels great. The need for two-hand coordination is increased for some common shortcuts, but it does not feel like a huge hurdle. I also realized I now have space to put cut, copy, paste, and undo on dedicated buttons, removing the need for several of those coordinated combinations.
The current state of my keymap can be found over on Github, as inspiration or a warning to coming generations, depending on mood.