The problem with the standard typewriter keyboard is that the weakest and least-agile digits (the pinkies) are the ones that got overloaded with the most additional keys off to the extreme left and right of the main typing area. On my keyboard, this is the distribution for my hands: (not counting the numbered function keys, as these are not normally used when “typing”):
Left hand:
thumb: 0
index finger: 8
index finger: 4
ring finder: 4
pinky: 11
Right hand:
thumb: 1
index finger: 8
middle finger: 4
ring finger: 4
pinky: 16
The strongest digit, the thumb, is given only one key (the space bar) and it’s a personal choice which thumb you use… which means one thumb will go completely unused. So right off the bat, 10% of our fingers are useless for typing. Regardless of how curvy and ergonomic you make it, it would be hard to purposefully devise a more inefficient keyboard for the human hand.
You might be interested in the findings of Carpalx. Also, a lot of split/orthopedic keyboards move all those extra keys between the hands instead of exterior to them. My own Let’s Split layout does this.
Nice article – my custom keyboard is more of a 60% one, but it’s interesting to read the reasons for/against certain design decisions:
For instance, I also shortened the right shift key to add this one additional key you need to have a key for each of the 30 letters of the German alphabet.
Having 30 letters also allows dividing them nicely between the left and the right hand, and are easily distributed on the 3 rows:
15 letters on the left half, 15 letters on the right half; 10 letters on a row – perfect!
I also had the problem with where to place the arrow keys – I strongly prefer having them in a layout that physically reflects their direction, but this makes it hard to put it on either half of the keyboard without destroying the haf-letters-left/half-the-letters-right property. For now, I have settled on putting arrow keys in the middle, but I’m aware that this is not a great place either for one-handed use.
One thing I’m not too optimistic about is the believe that adding layers or cording keys makes them as accessible as having a key for them.
Just give it a try: switch the number-row from numbers-without-shift to numbers-with-shift and count the time you need until you are as fast as using the old way!
The next big evolutionary step I see in keyboard space is actually not the hardware itself, but improving the terrible software/protocol stack that runs the whole thing.
E. g. in the year 2019 it should be possible to send Unicode over the wire. The current way of doing things is just mindbogglingly arcane and unnecessarily painful.
Sadly I lack the time to learn how to write an implementation for the firmware (on keyboard) and a fitting device driver (for Linux). :-/
Software is a big problem for me. Using a QMK board to send various Unicode symbols worked decently, but the tools on Linux for modifying what characters are sent when are all a mess.
Similarly, switching key positions or uses is frustrating. I like to have the Control and Escape keys as the two either side of the space bar, with one also acting as Shift, and I know that this is possible because I once had a mess of xkb manipulation programs set up to get it to work - but because it’s not a standard modification (like making caps lock a control, for example it really didn’t come easily, felt unstable, and hasn’t worked since reinstalling my OS.
A shame there’s pretty much no financial incentive for hardware manufacturers to run all their keyboards through QMK or some similar firmware!
in the year 2019 it should be possible to send Unicode over the wire
The reason keyboards send scancodes instead of unicode is that it allows the OS to map keycodes to characters in any language, this way I don’t need to reflash my keyboard everytime I want to change the language, or swap from Dvorak to Qwerty. I can just load a diffent mapping and that’s it.
The reason keyboards send scancodes instead of unicode is that it allows the OS to map keycodes to characters in any language […]
Let’s not pretend that the current state of the art is anything but an accident. Keyboards had a language id that could be set by the manufacturer and was supposed to be used to provide mappings automatically – without having to “configure your keyboard” on your computer.
Manufacturers cheaped out on it, never set the byte to anything, and the rest is history.
[…] this way I don’t need to reflash my keyboard everytime I want to change the language, or swap from Dvorak to Qwerty. I can just load a different mapping and that’s it.
That’s an interesting use-case, but one I never had and will never have.
I have my keyboard. I want the same letters to end up on the computer’s screen regardless of which computer I plug my keyboard into.
I have all letters I’ll ever need mapped on my keyboard, so switching layouts is not necessary.
By the way, are you using a keyboard with blank key caps? Can’t imagine to switch layouts on a keyboard with printed letters.
Keyboards had a language id that could be set by the manufacturer and was supposed to be used to provide mappings automatically
Someone in Eastern Europe or Asia working on translations would have to buy a very expensive multi-language keyboard then or have two different ones. With the current system, all you need is a bunch of stickers and change a setting.
Another thing, a keyboard with fixed unicode mappings could make hard or impossible to remap keys for users with disabilities, the workaround, again, would be a more expensive device with remapping capabilities.
Just give it a try: switch the number-row from numbers-without-shift to numbers-with-shift and count the time you need until you are as fast as using the old way!
As I understand it layers are different to using shift+‘character’, and are fundamentally modal. This makes them several orders of magnitude easier to access compared to your example. For example, compare using the compose key to type out á versus the alt-gr method.
I use split ergonomic keyboards both at work and at home: https://github.com/omkbd/ErgoDash The repo contains all the files one needs to have the PCB and case plates fabricated (not my work).
While it has more keys than a 40% I still use a lot of layered keys. My favorite layer feature is having a “numpad” on the righ thalf of the board, with 456 being on jkl when I press a mod key on the other half. Makes entering many numbers very fast.
I feel like it would be difficult to type on this if the two parts weren’t always the same distance apart and at the same angle of rotation. Do you find that you’re constantly making micro-adjustments to get the two parts into your preferred position?
No, I actually sometimes move them apart to have stuff like documents, a notepad, or food between them. I can use them In lots of distances, as long as the angles of my wrists are right, which you can adjust on the fly.
I like that in QMK I can easily remap keys and create new functions on layers. They have an online configurator where you can edit the layout to your liking and get a new firmware binary: https://config.qmk.fm/#/ergodash/rev1/LAYOUT
You can also edit the layout locally and compile it yourself, some advanced functions are not available in the configurator.
I have used many ready made keyboards before, but liked the idea of the ergodash. I’m very happy with these keyboards so far.
I have them somewhere else. I have them on a layer on P and the button to the right of it. I press the layer button on the left half, then P and the button to the right of it are [].
This works nicely for me. In general I have my layout set up so that it’s always the opposite hand pressing the layer button (i.e. left hand switching layers for the right hand and vice versa).
I have ([{/}]) on separate hands, it needs a little getting used to, but once that happens, it’s very, very nice to have them that way.
It’s only a problem when one of your hands is mousing, but for that, I have a trackball between the halves, so very little hand movement is required between keyboard and ball, and thus, no real issue with hitting either part of the pair.
The blue key is a compose key, for things like é, ç, etc.
I like it a lot. That said, it took a lot of iterating though in order to have things like :=, =>, or even -> not be a complex chord to type. It’s easy to optimize for one thing at the expense of others, but over time I’m happy with the chords I ended up with. I’ve developed a sort of stress test whenever I decide to make changes.
One change I have to make and haven’t yet is to add a ‘caps lock’ or ‘insert’ key: the built in screen reader on Windows is activated with either one of those. I’m leaning to using lshift + rshift.
Just kidding, if you look at the code, there’s some keybinding for that, basically the splitted spacebar has one key for space and another for enter, the tab key still at its default position in normal keyboard.
I have a planck at home (non-split) and I actually like it quite a bit. It does make me wonder if I can go one level deeper with something like a gherkin (3x10). Then if that works well it begs the question to me, how deep can I go?
I use a plank at work and at home. keyboards now feel too big haha.
But honestly it took me a while to get used to it. It was not easy for me to get used to the numbers and symbols being on a different layer. But once you get used to it I feel like it’s hard to not have everything this way. to me, the plank is a gateway drug to more planks :)
yep it’s pretty chill. I can even game on it, which is wild to me. I’ve won games of apex legends with it lmao. I have custom gateron clears to have an activation curve and sound similar to topre. They were lying around from a input club k-type I had.
I already dreamed about a keyboard more or less like this. I almost bought an old solution for mobile (it was supposed to be used with only one hand), after that I considered customizing a game controller to be used with only one hand. But it was too much trouble as I had to interact a lot with hardware not only with software.
If I remember correctly, it wasn’t that easy to recognize multiple keys pressing. I remember to try a lot of controller softwares for Windows without success. After a while I focused more on getting different keyboard shortcuts to automate some tasks so I used AutoHotKey for it. This I could create a work around to press multiple keys as “modifiers” besides keys like ctrl, alt, etc. Check it out https://github.com/JpOnline/AutoHotKey-script/blob/812fcb4c6d21130f2810a4b1d88d90472b080147/ahkScript.ahk#L11
The problem with the standard typewriter keyboard is that the weakest and least-agile digits (the pinkies) are the ones that got overloaded with the most additional keys off to the extreme left and right of the main typing area. On my keyboard, this is the distribution for my hands: (not counting the numbered function keys, as these are not normally used when “typing”):
Left hand:
thumb: 0 index finger: 8 index finger: 4 ring finder: 4 pinky: 11
Right hand:
thumb: 1 index finger: 8 middle finger: 4 ring finger: 4 pinky: 16
The strongest digit, the thumb, is given only one key (the space bar) and it’s a personal choice which thumb you use… which means one thumb will go completely unused. So right off the bat, 10% of our fingers are useless for typing. Regardless of how curvy and ergonomic you make it, it would be hard to purposefully devise a more inefficient keyboard for the human hand.
You might be interested in the findings of Carpalx. Also, a lot of split/orthopedic keyboards move all those extra keys between the hands instead of exterior to them. My own Let’s Split layout does this.
I use my ring fingers for all the satellite keys.
Nice article – my custom keyboard is more of a 60% one, but it’s interesting to read the reasons for/against certain design decisions:
For instance, I also shortened the right shift key to add this one additional key you need to have a key for each of the 30 letters of the German alphabet.
Having 30 letters also allows dividing them nicely between the left and the right hand, and are easily distributed on the 3 rows: 15 letters on the left half, 15 letters on the right half; 10 letters on a row – perfect!
I have written about the ideas that went into my design here: https://soc.me/hardware/keyboard-design
I also had the problem with where to place the arrow keys – I strongly prefer having them in a layout that physically reflects their direction, but this makes it hard to put it on either half of the keyboard without destroying the haf-letters-left/half-the-letters-right property. For now, I have settled on putting arrow keys in the middle, but I’m aware that this is not a great place either for one-handed use.
One thing I’m not too optimistic about is the believe that adding layers or cording keys makes them as accessible as having a key for them.
Just give it a try: switch the number-row from numbers-without-shift to numbers-with-shift and count the time you need until you are as fast as using the old way!
The next big evolutionary step I see in keyboard space is actually not the hardware itself, but improving the terrible software/protocol stack that runs the whole thing.
E. g. in the year 2019 it should be possible to send Unicode over the wire. The current way of doing things is just mindbogglingly arcane and unnecessarily painful.
Sadly I lack the time to learn how to write an implementation for the firmware (on keyboard) and a fitting device driver (for Linux). :-/
Software is a big problem for me. Using a QMK board to send various Unicode symbols worked decently, but the tools on Linux for modifying what characters are sent when are all a mess.
Similarly, switching key positions or uses is frustrating. I like to have the
Control
andEscape
keys as the two either side of the space bar, with one also acting asShift
, and I know that this is possible because I once had a mess of xkb manipulation programs set up to get it to work - but because it’s not a standard modification (like makingcaps lock
acontrol
, for example it really didn’t come easily, felt unstable, and hasn’t worked since reinstalling my OS.A shame there’s pretty much no financial incentive for hardware manufacturers to run all their keyboards through QMK or some similar firmware!
mm I imagine
The reason keyboards send scancodes instead of unicode is that it allows the OS to map keycodes to characters in any language, this way I don’t need to reflash my keyboard everytime I want to change the language, or swap from Dvorak to Qwerty. I can just load a diffent mapping and that’s it.
Let’s not pretend that the current state of the art is anything but an accident. Keyboards had a language id that could be set by the manufacturer and was supposed to be used to provide mappings automatically – without having to “configure your keyboard” on your computer.
Manufacturers cheaped out on it, never set the byte to anything, and the rest is history.
That’s an interesting use-case, but one I never had and will never have.
I have my keyboard. I want the same letters to end up on the computer’s screen regardless of which computer I plug my keyboard into.
I have all letters I’ll ever need mapped on my keyboard, so switching layouts is not necessary. By the way, are you using a keyboard with blank key caps? Can’t imagine to switch layouts on a keyboard with printed letters.
Someone in Eastern Europe or Asia working on translations would have to buy a very expensive multi-language keyboard then or have two different ones. With the current system, all you need is a bunch of stickers and change a setting.
Another thing, a keyboard with fixed unicode mappings could make hard or impossible to remap keys for users with disabilities, the workaround, again, would be a more expensive device with remapping capabilities.
Thank you very much!
Would you be able to help me to analyze efficiencies of different keyboard layouts?
You are absolutely correct about that you should be able to send UTF-8 codes by now!
I have actually no knowledge about this. :-) I think it’s very hard to even define what “efficiency” means in terms of typing.
For what it’s worth, I thought up some spec extension here: USB-HID Protocol Evolution. (Not that I think anything will happen with it.)
As I understand it layers are different to using shift+‘character’, and are fundamentally modal. This makes them several orders of magnitude easier to access compared to your example. For example, compare using the compose key to type out á versus the alt-gr method.
I use split ergonomic keyboards both at work and at home: https://github.com/omkbd/ErgoDash The repo contains all the files one needs to have the PCB and case plates fabricated (not my work).
I had the PCBs made at jlc pcb and soldered it all together at home, see: https://images.yourfate.org/#15521316686517 It runs QMK firmware: https://qmk.fm/
While it has more keys than a 40% I still use a lot of layered keys. My favorite layer feature is having a “numpad” on the righ thalf of the board, with 456 being on jkl when I press a mod key on the other half. Makes entering many numbers very fast.
AMA I guess…
I feel like it would be difficult to type on this if the two parts weren’t always the same distance apart and at the same angle of rotation. Do you find that you’re constantly making micro-adjustments to get the two parts into your preferred position?
No, I actually sometimes move them apart to have stuff like documents, a notepad, or food between them. I can use them In lots of distances, as long as the angles of my wrists are right, which you can adjust on the fly.
What do you think of the QMK firmware? Did you use a ready made solution before this?
I like that in QMK I can easily remap keys and create new functions on layers. They have an online configurator where you can edit the layout to your liking and get a new firmware binary: https://config.qmk.fm/#/ergodash/rev1/LAYOUT
You can also edit the layout locally and compile it yourself, some advanced functions are not available in the configurator.
I have used many ready made keyboards before, but liked the idea of the ergodash. I’m very happy with these keyboards so far.
Can you report on how painful it is to have the
{
/}
and[
/]
keys split between the left half and the right half?I experimented with similar designs here, but I was always concerned about this issue.
I have them somewhere else. I have them on a layer on P and the button to the right of it. I press the layer button on the left half, then P and the button to the right of it are [].
This works nicely for me. In general I have my layout set up so that it’s always the opposite hand pressing the layer button (i.e. left hand switching layers for the right hand and vice versa).
If you’re interested, my config.json is here: https://gitlab.com/youRFate/keymaps/blob/master/ergodash/layers.json
You can dl it and plug it into https://config.qmk.fm/ to see the layers etc.
I have
([{
/}])
on separate hands, it needs a little getting used to, but once that happens, it’s very, very nice to have them that way.It’s only a problem when one of your hands is mousing, but for that, I have a trackball between the halves, so very little hand movement is required between keyboard and ball, and thus, no real issue with hitting either part of the pair.
I’ve been very happy with this layout: http://www.keyboard-layout-editor.com/#/gists/cd5dbe9fdf697150ed10f0d14963ca7d
The blue key is a compose key, for things like é, ç, etc.
I like it a lot. That said, it took a lot of iterating though in order to have things like
:=
,=>
, or even->
not be a complex chord to type. It’s easy to optimize for one thing at the expense of others, but over time I’m happy with the chords I ended up with. I’ve developed a sort of stress test whenever I decide to make changes.One change I have to make and haven’t yet is to add a ‘caps lock’ or ‘insert’ key: the built in screen reader on Windows is activated with either one of those. I’m leaning to using lshift + rshift.
will have a look
Oh hey, hello fellow 40% guys! May I join the club? https://github.com/huytd/snackymini-keyboard
How do you type spaces?
Use tab!!
Wait, so do you use the tab key to type space characters or do you just type tabs instead of spaces?
Just kidding, if you look at the code, there’s some keybinding for that, basically the splitted spacebar has one key for space and another for enter, the tab key still at its default position in normal keyboard.
I have a planck at home (non-split) and I actually like it quite a bit. It does make me wonder if I can go one level deeper with something like a gherkin (3x10). Then if that works well it begs the question to me, how deep can I go?
I felt the Planck would be too little, and got a Preonic recently… Maybe it’s a gateway drug. :)
I use a plank at work and at home. keyboards now feel too big haha.
But honestly it took me a while to get used to it. It was not easy for me to get used to the numbers and symbols being on a different layer. But once you get used to it I feel like it’s hard to not have everything this way. to me, the plank is a gateway drug to more planks :)
So something like this
https://www.youtube.com/watch?v=u-tLe78z1jU&feature=youtu.be
yep it’s pretty chill. I can even game on it, which is wild to me. I’ve won games of apex legends with it lmao. I have custom gateron clears to have an activation curve and sound similar to topre. They were lying around from a input club k-type I had.
I just want a 90s Microsoft Natural keyboard (the one with the correct arrow layout) but with mechanical switches, and a detachable cable.
mm had one of those. Quite good actually. But quite large and the lack of wireless was a bit annoying.
I already dreamed about a keyboard more or less like this. I almost bought an old solution for mobile (it was supposed to be used with only one hand), after that I considered customizing a game controller to be used with only one hand. But it was too much trouble as I had to interact a lot with hardware not only with software.
Interesting. I am actually looking into this as a serious option. How far did you get?
If I remember correctly, it wasn’t that easy to recognize multiple keys pressing. I remember to try a lot of controller softwares for Windows without success. After a while I focused more on getting different keyboard shortcuts to automate some tasks so I used AutoHotKey for it. This I could create a work around to press multiple keys as “modifiers” besides keys like ctrl, alt, etc. Check it out https://github.com/JpOnline/AutoHotKey-script/blob/812fcb4c6d21130f2810a4b1d88d90472b080147/ahkScript.ahk#L11
interesting will have a look!