In this post I introduce a layout that is designed with a future 60% keyboard in mind, but which actually
works on all standard keyboards, even full sized ones. It may already be useful as an alternative to the default layouts of the Poker X, Poker II and HHKB. It may even be useful for the Ergodox or similar ergonomic keyboards.
It is not a virtual thing.
You can already try it on your own keyboard.I'm not going to create a keyboard myself. I'm just trying to contribute and hopefully improve on the current 60% layouts.
The SpaceFN layout is based on ideas that are not mine. So I would first like to credit the following people:
- Edgar MATIAS for his work on the dual use of standard keys as modifiers, 20 years ago.
- Hasu for his terrific TMK firmware.
- Lydell for implementing it for Windows (as an AHK script).
- The authors/users of vi/vim for championning the idea of having arrows in the home row.
(links to credits at the end of this post)
So here is a proposed 60% keyboard (let's say it has Cherry MX or Topre switches):
This keyboard is just the alphabetic (or "typewriter") cluster of a standard PC keyboard. We have just replaced the backquote ( ` ) key with the Esc key for convenience, but we actually do not even need to. Keeping the backquote on top left is not a problem.
No learning curve, you can start using it immediately. Every key does what you think it does.
...until you need to move the cursor. There are no arrow keys! There is not even an Fn key to access another layer of functions, like on all 60% boards!
So how do you access the arrow keys and all the other missing keys?
--->
YOU PRESS THE SPACE BAR AND HOLD IT!And then while holding space you press another key. Here is what the keys do when you press and hold space:
NOTE: all the keys that have no legend do the thing they do when space is not pressed.
The space bar is our Fn key, hence the name of the layout: SpaceFN.
Now from the two pictures above, you can tell that this keyboard can do everything a standard keyboard can do.
There are a few things that should be configurable. For example you should be able to have the backquote still in place at the top left of the keyboard, you should be able to use WASD or HJKL for the arrows if you wish... And of course you should be able to swap Ctrl and CapsLock.
I have been using this layout exclusively for more than 10 days now, mainly on a Poker, but also on a Realforce 87U without ever using the dedicated arrows and functions keys. It just works. You may wonder how it is possible, because we are using the space bar all the time, and not for the purpose of triggering navigation keys, so it MUST interfere and create all kind of problems!? But it does not! There are various safeguards in the design of the layout and in the way it is implemented that ensure that it is working as expected.
You can already try this layout by yourself on your computer (if you use Windows, a Mac or a keyboard using the TMK firmware). At the end of this post you will find how to test the layout if you are interested.
Now let's talk about the pros and cons of this layout.
PROS:
- The basic layout is totally standard.
- If you touch type, you can touch type on it without re-learning anything.
- You can easily find replacement keycaps: they are all standard not only in size but also in labeling.
- You can type and edit/navigate without leaving the home row (hello VIM users!).
- It works well on all international layouts, not just on QWERTY. It works on ISO keyboards.
- Our Fn key (the space bar) is huge and in the center of the keyboard. With one hand, any hand, you can easily access all of the Fn layer functions, including F1...F12. This leaves your other hand free to press Crtl, Shift or Alt to create key combinations.
- The Fn key (the space bar) always sits under your thumbs. You never have to ask yourself where it is. You can't miss it.
- The location of the arrow keys has been chosen so your index finger sits on the "J" key, which has a little bump on it. It's easy to find without looking at the keyboard, and it's where your index finger should be anyway for proper touch-typing. As an option, the arrows could be on HJKL or WASD instead (I have not yet worked out the layouts for these but I don't foresee any problem).
CONS:
- The space bar does not auto-repeat. To compensate, space+B ("Blank") is an autorepeating space.
- When you type a space, the space character appears only when you release the key.
- It may not be suitable at all for gaming, in part because of the previous points. To compensate, a special mode, that should be easy to enable, should be provided. In this mode, space would act in a standard way. Another key will act as the Fn key. CapsLock looks as a good candidate. In this mode CapsLock pressed alone toggles the capitals mode, CapsLock pressed with another key allows to access the navigation/function keys.
- You have to learn the navigation keys layout. I admit that it takes a few hours to be comfortable with it.
Here are some notes about the design:
- By design, the strong fingers are heavily favored in the Fn layout. The pinky is almost not used.
- Unused keys: if you hold the space bar and press a key that has no function in the Fn layout, you get exactly the same result as if you were not holding space.
- Most keys in the Fn layer have been chosen to be easily reachable with a natural, arc-shaped, extension (not bending) of the right hand. The right hand has not been chosen with the idea of favoring right-handed people (read on).
- The left side of the keyboard has nothing in the Fn layout. This is on purpose. This part of the keyboard has many frequently used shortcuts that we do not want to interfere with: Ctrl-C, Ctrl-X and Ctrl-V are the most important ones. When you edit text, you can press and hold space and then navigate to some point, select text there, cut it or copy it to the clipboard, move somewhere else, and finally paste it. You can do all this without ever releasing the space bar. So while copying or moving text, you do not have to think about the space bar.
- There is an Esc key in the Fn layer, because you may want to have direct access to the backquote in the basic layout. Also, it may be convenient to be able to press Esc without releasing the space bar.
- The backquote and tilde keys have been repeated in the Fn layout, to make them more accessible. This is for convenience and is not required.
- The SpaceFN layout loves soft space bars. For example on the Realforce 87U and FC660C, removing the spring under the space bar helps. A keyboard designed specially for SpaceFN should have a space bar that is easy to press and hold.
- The SpaceFN layout works well with a flipped space bar. It makes pressing and holding space easier. Naturally it's not required, it's just more comfortable.
Let's end with a totally original 60% keyboard never seen anywhere else:
And its Fn layer:
(interestingly, this keyboard only uses STANDARD keys)
Want to try SpaceFN?Windows users: Lydell has written a port of SpaceFN as an AHK script for Windows. It can be downloaded from here:
https://github.com/lydell/spacefn-winEdit 2015.02.02: it looks like TouchCursor (
http://touchcursor.sourceforge.net) is even better than AHK (AutoHotKey) for the purpose of implementing SpaceFN under Windows.
Mac users: below is the KeyRemap4MacBook script that can be used on a Mac (any Mac, not just on MacBooks) to try the fully functional layout. The script starts with comments explaining how to install and activate it. So please read this part. If you need more help installing, please just ask in this thread and I'll help you.
TMK firmware users: I think Hasu will be glad to provide an implementation of SpaceFN for its TMK firmware. An interesting bit is that Hasu has designed a replacement controller for the HHKB that allows to turn it into a fully programmable keyboard. He has also created a converter that allows a PS/2 or USB keyboard to become a fully programmable keyboard. This allows to use SpaceFN on all kind of existing keyboards without modding them. NOTE: will work with a USB keyboard only if is PS/2 compatible, i.e. it works when plugged into a PS/2 port with a passive adapter.
Linux users: I'm looking for help to port SpaceFN to Linux!
Credits links:
- Edgar MATIAS for his early work on the use of space as a dual role modifier:
http://edgarmatias.com/papers/hci96/- The dual role modifiers thread on Geekhack, from which I first learned about the idea:
https://geekhack.org/index.php?topic=41685.0Please let me know if I should give credit to someone else. As I said, these ideas are not mine, they have been around for quite a while.
Here is the KeyRemap4MacBook script:
<?xml version="1.0"?>
<root>
<!-- This file is a Keyremap4MacBook definition file that allows you to use the "SpaceFN"
keyboard layout on your Mac.
The main point of the SpaceFN layout is to turn your spacebar into a single big "Fn" key
that will give you access to all the navigation and function keys without moving your hand
from the home row.
SpaceFN can work on any keyboard, but is especially well suited for "60%" ones because
it allows access to all the navigation and function keys from the alphabetical cluster.
It doesn't require a dedicated Fn key and doesn't change the primary function of any key.
HOW TO USE:
- You must have KeyRemap4MacBook installed on your Mac, or you must install it first.
KeyRemap4MacBook works on ALL Macs, is free, and is available here:
https://pqrs.org/macosx/keyremap4macbook/
- NOTE: "private.xml" is the file where one can create shortcuts and definitions that
KeyRemap4MacBook will use.
It is located in /Users/you/Library/Application Support/KeyRemap4MacBook
To access it with the Finder:
- Open a Finder window
- Click on the "Go" menu
- Press and hold the Option key (Alt if you have PC keyboard)
- Click on Library
- Release the Option key
- Open "Application Support"
- Open "KeyRemap4MacBook"
Now you are in the folder where the "private.xml" file should be. You may not have
one at this time, so the folder may be empty.
- If you already have a "private.xml" file:
- Save this text as SpaceFN.xml in the same directory as your "private.xml" file.
- Edit your "private.xml" file and add this line after the first "<root>" line:
<include path="SpaceFN.xml" />
NOTE: to edit the file you may need to right-click it, go to "Open with" and finally
click on "TextEdit.app".
So your private.xml file may look like this:
<?xml version="1.0"?>
<root>
<include path="SpaceFN.xml" />
</root>
- Save the file.
- Open KeyRemap4MacBook (it has a "KEY" icon), then click on "Reload XML".
- Check this box: "SpaceFN layout - Basic stuff"
- Consider checking some of the other "SpaceFN layout" boxes depending on your needs.
Changes take place immediately.
- If you don't have a "private.xml" file already:
- Save this text as "private.xml" in the folder where private.xml is supposed to be.
- Open KeyRemap4MacBook (it has a "KEY" icon), then click on "Reload XML".
- Check this box: "SpaceFN layout - Basic stuff"
- Consider checking some of the other "SpaceFN layout" boxes depending on your needs.
Changes take place immediately.
-->
<item>
<name>SpaceFN layout - Cmd+Left/Right skips word by word</name>
<appendix>If you don't activate this, Cmd+Left/Right goes to beginning or end of line.</appendix>
<identifier>remap.KB607_CmdWords_ct</identifier>
<autogen>--KeyToKey-- KeyCode::J, ModifierFlag::EXTRA4 | VK_COMMAND,
KeyCode::CURSOR_LEFT, ModifierFlag::OPTION_L</autogen>
<autogen>--KeyToKey-- KeyCode::L, ModifierFlag::EXTRA4 | VK_COMMAND,
KeyCode::CURSOR_RIGHT, ModifierFlag::OPTION_L</autogen>
</item>
<item>
<name>SpaceFN layout - Cmd+Up/Down does PgUp/PgDn</name>
<appendix>If you don't activate this, Cmd+Up/Down goes to top or bottom of document.</appendix>
<identifier>remap.KB607_CmdUpDown_ct</identifier>
<autogen>--KeyToKey-- KeyCode::I, ModifierFlag::EXTRA4 | VK_COMMAND,
KeyCode::PAGEUP</autogen>
<autogen>--KeyToKey-- KeyCode::K, ModifierFlag::EXTRA4 | VK_COMMAND,
KeyCode::PAGEDOWN</autogen>
</item>
<item>
<name>SpaceFN layout - Basic stuff</name>
<appendix></appendix>
<appendix>You must check at least this box to activate the SpaceFN features.</appendix>
<appendix></appendix>
<appendix>ARROWS: Space+IJKL=arrows</appendix>
<appendix>DEL: Space+Backspace=Del</appendix>
<appendix>INS: Space+\=Ins</appendix>
<appendix>BLANK: Space+B=Repeating space</appendix>
<appendix>Fxx: Space+1…=F1..F12</appendix>
<appendix></appendix>
<appendix>IMPORTANT: in the "Key Repeat" tab, you must set:</appendix>
<appendix>- Initial modifier wait: 150ms</appendix>
<appendix>- Timeout: 300ms</appendix>
<appendix>- Delay until repeat: 500ms</appendix>
<identifier>remap.KB607_ct</identifier>
<!-- Space is our new Fn modifier -->
<autogen>--KeyOverlaidModifier-- KeyCode::SPACE,
KeyCode::VK_MODIFIER_EXTRA4, KeyCode::SPACE</autogen>
<!-- Arrow keys: IJKL -->
<autogen>--KeyToKey-- KeyCode::I, ModifierFlag::EXTRA4,
KeyCode::CURSOR_UP</autogen>
<autogen>--KeyToKey-- KeyCode::J, ModifierFlag::EXTRA4,
KeyCode::CURSOR_LEFT</autogen>
<autogen>--KeyToKey-- KeyCode::K, ModifierFlag::EXTRA4,
KeyCode::CURSOR_DOWN</autogen>
<autogen>--KeyToKey-- KeyCode::L, ModifierFlag::EXTRA4,
KeyCode::CURSOR_RIGHT</autogen>
<!-- DEL on space+Enter -->
<autogen>--KeyToKey-- KeyCode::DELETE, ModifierFlag::EXTRA4,
KeyCode::FORWARD_DELETE</autogen>
<!-- INS on space+Tab -->
<autogen>--KeyToKey-- KeyCode::BACKSLASH, ModifierFlag::EXTRA4,
KeyCode::PC_INSERT</autogen>
<!-- space+B is an autorepeat space -->
<autogen>--KeyToKey-- KeyCode::B, ModifierFlag::EXTRA4,
KeyCode::SPACE</autogen>
<!-- Function keys -->
<autogen>--KeyToKey-- KeyCode::KEY_1, ModifierFlag::EXTRA4,
KeyCode::F1</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_2, ModifierFlag::EXTRA4,
KeyCode::F2</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_3, ModifierFlag::EXTRA4,
KeyCode::F3</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_4, ModifierFlag::EXTRA4,
KeyCode::F4</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_5, ModifierFlag::EXTRA4,
KeyCode::F5</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_6, ModifierFlag::EXTRA4,
KeyCode::F6</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_7, ModifierFlag::EXTRA4,
KeyCode::F7</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_8, ModifierFlag::EXTRA4,
KeyCode::F8</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_9, ModifierFlag::EXTRA4,
KeyCode::F9</autogen>
<autogen>--KeyToKey-- KeyCode::KEY_0, ModifierFlag::EXTRA4,
KeyCode::F10</autogen>
<autogen>--KeyToKey-- KeyCode::MINUS, ModifierFlag::EXTRA4,
KeyCode::F11</autogen>
<autogen>--KeyToKey-- KeyCode::EQUAL, ModifierFlag::EXTRA4,
KeyCode::F12</autogen>
</item>
<item>
<name>SpaceFN layout - ESC on backquote</name>
<appendix>Check this box to have the backquote key do Escape.</appendix>
<appendix>You don't need this if you have both the ESC and backquote keys on your keyboard.</appendix>
<appendix>F.e. you don't need to check it on an HHKB, but you need it (or the next checkbox) on a Poker.</appendix>
<appendix>You get backquote ( ` ) with space+M and tilde ( ~ ) with space+comma.</appendix>
<appendix>Note to non-QWERTY users: these are the keys below and to the right of J and K.</appendix>
<identifier>remap.KB607CT_esc_ct</identifier>
<autogen>--KeyToKey-- KeyCode::BACKQUOTE,
KeyCode::ESCAPE</autogen>
<autogen>--KeyToKey-- KeyCode::M, ModifierFlag::EXTRA4,
KeyCode::BACKQUOTE</autogen>
<autogen>--KeyToKey-- KeyCode::COMMA, ModifierFlag::EXTRA4,
KeyCode::BACKQUOTE, ModifierFlag::SHIFT_L</autogen>
</item>
<item>
<name>SpaceFN layout - ESC on space+E</name>
<appendix>Check this box to have space+E do Escape.</appendix>
<appendix>You don't need this if you have both the ESC and backquote keys on your keyboard.</appendix>
<appendix>For example you don't need to check it on an HHKB, but you may want to activate it on a Poker.</appendix>
<identifier>remap.KB607CT_esc_on_E_ct</identifier>
<autogen>--KeyToKey-- KeyCode::E, ModifierFlag::EXTRA4,
KeyCode::ESCAPE</autogen>
</item>
<item>
<name>SpaceFN layout - PgUp, PgDn, Home, End (MAC MODE)</name>
<appendix>HOME/END: Space+U=Home Space+O=End (begin and end of DOCUMENT)</appendix>
<appendix>PAGE UP/DOWN: Space+H=PgUp Space+N=PgDn (cursor does NOT move)</appendix>
<identifier>remap.KB607_pg_macmode_ct</identifier>
<autogen>--KeyToKey-- KeyCode::U, ModifierFlag::EXTRA4,
KeyCode::HOME</autogen>
<autogen>--KeyToKey-- KeyCode::O, ModifierFlag::EXTRA4,
KeyCode::END</autogen>
<autogen>--KeyToKey-- KeyCode::H, ModifierFlag::EXTRA4,
KeyCode::PAGEUP</autogen>
<autogen>--KeyToKey-- KeyCode::N, ModifierFlag::EXTRA4,
KeyCode::PAGEDOWN</autogen>
</item>
<item>
<name>SpaceFN layout - PgUp, PgDn, Home, End (PC MODE)</name>
<appendix>HOME/END: Space+U=Home Space+O=End (begin and end of LINE)</appendix>
<appendix>PAGE UP/DOWN: Space+H=PgUp Space+N=PgDn (cursor MOVES to the new page)</appendix>
<appendix>Goodies:</appendix>
<appendix>- Cmd+up/down does Mac mode PgUp/PgDn (cursor does not move)</appendix>
<appendix>- Cmd+left/right does Home/End</appendix>
<appendix>- Cmd+Home/End goes to the top/bottom of document</appendix>
<identifier>remap.KB607_pg_pcmode_ct</identifier>
<autogen>--KeyToKey-- KeyCode::U, ModifierFlag::EXTRA4 | VK_COMMAND,
KeyCode::CURSOR_UP, VK_COMMAND</autogen>
<autogen>--KeyToKey-- KeyCode::U, ModifierFlag::EXTRA4,
KeyCode::CURSOR_LEFT, VK_COMMAND</autogen>
<autogen>--KeyToKey-- KeyCode::O, ModifierFlag::EXTRA4 | VK_COMMAND,
KeyCode::CURSOR_DOWN, VK_COMMAND</autogen>
<autogen>--KeyToKey-- KeyCode::O, ModifierFlag::EXTRA4,
KeyCode::CURSOR_RIGHT, VK_COMMAND</autogen>
<autogen>--KeyToKey-- KeyCode::H, ModifierFlag::EXTRA4,
KeyCode::PAGEUP, ModifierFlag::OPTION_L</autogen>
<autogen>--KeyToKey-- KeyCode::N, ModifierFlag::EXTRA4,
KeyCode::PAGEDOWN, ModifierFlag::OPTION_L</autogen>
</item>
<item>
<name>SpaceFN layout - Mute, Vol-, Vol+</name>
<appendix>Check this box to have space + "P", "[" and "]" do Mute, Vol- and Vol+.</appendix>
<appendix>Note for non-QWERTY users: it's P and the two keys on the right.</appendix>
<identifier>remap.KB607CT_vol_ct</identifier>
<autogen>--KeyToConsumer-- KeyCode:: P, ModifierFlag::EXTRA4,
ConsumerKeyCode::VOLUME_MUTE</autogen>
<autogen>--KeyToConsumer-- KeyCode::BRACKET_LEFT, ModifierFlag::EXTRA4,
ConsumerKeyCode::VOLUME_DOWN</autogen>
<autogen>--KeyToConsumer-- KeyCode::BRACKET_RIGHT, ModifierFlag::EXTRA4,
ConsumerKeyCode::VOLUME_UP</autogen>
</item>
<item>
<name>SpaceFN layout - PrintScreen, ScrollLock, Pause</name>
<appendix>Check this box to have space + "P", "[" and "]" do PrtScr, ScrLk and Pause.</appendix>
<appendix>Please note that these keys are rarely needed on a Mac.</appendix>
<appendix>Note for non-QWERTY users: it's P and the two keys on the right.</appendix>
<identifier>remap.KB607CT_prtsc_ct</identifier>
<autogen>--KeyToKey-- KeyCode:: P, ModifierFlag::EXTRA4,
KeyCode::PC_PRINTSCREEN</autogen>
<autogen>--KeyToKey-- KeyCode::BRACKET_LEFT, ModifierFlag::EXTRA4,
KeyCode::PC_SCROLLLOCK</autogen>
<autogen>--KeyToKey-- KeyCode::BRACKET_RIGHT, ModifierFlag::EXTRA4,
KeyCode::PC_PAUSE</autogen>
</item>
</root>