Designing a keyboard layout, part 2
This is a quick follow up to my previous essay about designing my own keyboard layout.
For reference, this is the layout I am currently using:
w c m g p q y o u '
r s n t v k h e i a
z x l d b j f / . ,
Multiple people from the kodsnack slack channel suggested that I refer to it as kheia
, so unless I decide to re-shuffle the right hand home row, that's the name I am going to use.
Anyway, I thought I would talk a little about the design decisions that went into this layout and why I made certain choices. I'll also mention some of the problems that this layout has that I may or may not be able to resolve.
I had previously settled on learning the hands down reference layout which looks like this:
q c h p v k y o j /
r s n t g w u e i a
x m l d b z f ' , .
Alan Reiser (designer of the hands down series of layouts) no longer recommends this one, but I found it to work really well for me with one minor modification: Switching K and Y to get K into a more convenient location for Swedish. I worked on learning this layout and got to decent speeds for english text, and was even able to use it for programming without too many issues.
It did have some problems that bothered me, however. Maybe the most obvious one is that Alan himself no longer recommends learning this layout. I did look at his newer layouts and while none of them seemed quite right for me, I ended up heavily influenced by the hands right neu layout:
w f m p v / . q " ' z
r s n t b , a e i h j
x c l d g - u o y k
As you can see, the hands right neu layout makes use of extra columns to the right of the standard 30 key grid for alphabetical letters, and with a keyboard like the Ferris Sweep, I don't even have these keys and would need to move z and j to separate layers or start messing with the layout. This made neu a non-starter for me, especially considering that j in particular gets heavy use while coding in vim.
I was really happy with the home row of reference; meaning rsnt
on the left hand and ueia
on the right hand, except for one thing: with u
under the right index finger I would end up occasionally hitting that key by mistake, and in vim, u
is undo. This kept messing me up, enough that I decided that I wanted something else in that location. So as a start to my layout I basically took the left hand of reference and right hand of neu and rearranged neu to spell heia
, while also flipping the punctuation back to the lower row.
Eventually, I ended up with this first version of what I called the cmpneu layout:
q c m p b z y o u /
r s n t g j h e i a
w f l d v x k ' . ,
(the very first version had q and / swapped, but I reverted to the above after some feedback).
I used this layout for a while, until two things started bothering me: w
on the lower pinky and f
on lower ring. Trying to improve on those with hints from other layouts like APTv3 led me to the layout presented above. j
is now in a worse spot (the n
position of qwerty) and k
has moved up to take the inner home row position, but I decided that this actually wasn't too bad and in return I was able to improve the w and f positions. Of course things may still change...
Some general thoughts on letter positions and constraints, and possible future improvements:
On the home row pinky, it is best to place a key which is usually not repeated (a or i is a good choice since aa and ii are unusual, same for h and hh). Many other layouts end up with N on the left hand pinky (see below) but this would probably be a poor choice for Swedish. However, I currently have R on left hand pinky which is also not great. the canary layout fixes this by having
c
on left pinky anda
on the right, but is notoriously bad for vim usage and thus also probably not great for Swedish.N on left hand pinky and H on right hand pinky provide nice in-rolls since N is commonly followed by another consonant while H is almost always followed by a vowel.
Spelling YOU on the right hand top row is suboptimal, since this makes YOU and OU out-rolls instead of in-rolls. APTv3 has UOY on the top row but ends up with Y on the top pinky position which doesn't seem great. Hands down neu manages to provide the UOY in-roll but I didn't manage to preserve this without making the K and J positions significantly worse.
Moving
/
to the qwerty,
position makes sense for someone who writes a lot of C++, since the qwerty position results in a lot of doubled pinky taps (//
is the comment prefix for C++).
I'm currently experimenting with making modifications to canary to see if I can make it more amenable to vim without losing too much of its strengths, but so far I haven't been successful enough to abandon kheia
.
Here is my modded canary as it stands right now:
w l y p b z f o u '
c r s t k m n e i a
v x g d j q h ; . ,