Hacker News new | past | comments | ask | show | jobs | submit login
A Modern Space Cadet (stevelosh.com)
89 points by dcope on Oct 3, 2012 | hide | past | favorite | 54 comments



I'm hoping the split spacebar that Microsoft introduced[1] starts catching on with mechanical keyboard makers. The left side of the spacebar currently wastes valuable real estate. Putting another backspace key would move the most typed key into easy reach instead of forcing the right pinky to leap on every error.

On the topic of keyboard ergonomics, I also believe that all keyboards should be tenkeyless. It's another case of prioritizing an infrequent action (typing on the numpad) over a frequent action (moving the right hand to the mouse). Users who need a numpad can always get a standalone usb unit.

[1] http://reviews.cnet.com/keyboards/microsoft-sculpt-comfort-k...


Definitely. I'd just be happy if you could get a mechanical keyboard that uses the layout that MS uses for its ergonomic keyboards, with the split keys and the height gently swelling in the center where the split is. (Look at the Natural Keyboard 4000 to see what I'm talking about: http://www.microsoft.com/hardware/en-us/p/natural-ergonomic-...)

Once you get used to typing on a keyboard that uses this layout, going back to a standard flat and un-split layout feels slow and painful. I love mechanical switches, but not enough to give up the much better layout of the Natural keyboards to get them.


The action on the Natural 4000 is so stiff that I know several people who experienced severe bouts of RSI within hours to days of getting one.

Check out Kinesis: great layout, and great switches. One or the other just isn't enough for many.


The Natural 4000 is a bit hit or miss. I've had 3; two were excellent, but one is merely acceptable. The action of the keys isn't as smooth, and the space bar initially required a slightly firmer press. The space bar seems to have loosened up over time, though, and I got used to the key feel quicker than I was expecting - but typos ARE much more frequent on that keyboard.

The inconsistency is a shame, because as a keyboard I really rate it. Good shape, comfy palm rests, standard layout, unintrusive media keys, and the stupid (but seemingly inevitable) F-Lock feature starts out disabled.

The action is not quite as nice as the previous Natural Pro model, but it's a lot quieter...


Split spacebars existed long before this model. The Kinesis Freestyle ( http://www.kinesis-ergo.com/freestyle.htm ) had them since at most 2008.

EDIT: I may have misinterpreted you; the split spacebar I'm talking about is split between the two halves of the keyboard and can move completely independently of the other half.


I spend an abnormal amount of time research keyboards and never understood the US HHKB layout because of the diamond arrow keys. A better alternative in my opinion is the KBC Poker: http://deskthority.net/news-reviews-f4/kbc-poker-sixty-s-tak...

I'd say a far better layout than HHKB is the KBC Poker.

By holding the Fn key, it changes WASD into the arrow keys; a much more familiar layout to anyone who has ever played a game on a computer. There's also a hotkey to switch right shift, right alt, right menu, and right ctrl into up/left/down/right respectively. This again, I think makes perfect sense for the few situations you might want to be able to single press arrow keys. It also supports this sort of toggle for switching escape and tilde, which is very friendly for anyone who hits escape more often than tilde (probably almost everyone.) It also has things like volume control media keys via the Fn key that I don't believe any HHKB has.

Direct link to its layout: http://i.imgur.com/lGsld.gif Direct link to its layout w/ FN pressed: http://i.imgur.com/3fvcV.gif


I have the happy hacking keyboard professional 2. It's fantastic. The reason the [fn] key is positioned off, and it's hard to get at the arrow keys, is because the HHKB was specifically designed to make it hard to use the arrow keys, as they are a curse. (stay on Home Row). There are alternatives, hjkl for vim and or CONTROL-... for emacs dudes and dudettes.


Yup, the HHKB is a sparkling gem in a landscape littered with garbage.

And for those of you without lots of money, the low-priced HHKB-lite models are also very nice (they have the same great layout and design, but more pedestrian components).

[I have two HHKB-lites, one from the '90s, another bought a few years ago (the former still working flawlessly).

In the landscape of computing, where most things seem obsolete overnight, it's also rather amazing that the HHKB has managed to stay in production for so long ... although it's clearly a bit of a niche product, it's been around in mostly the same form factor since the mid-90s! They're clearly doing something right!]


The one thing I don't love about my HHKB is its lack of dedicated F-keys.

Any suggestions for a good alternative?


There's at least one shortcut that uses control, option, shift, and command, ⌃⌥⇧⌘., which saves a sysdiagnose report to /var/tmp/.

The reason why key combinations like ⌥← don't work with Unicode Hex Input is probably because they aren't assigned to control characters. I got ⌥← to work after adding this to keymap 3 in the Unicode Hex Input.keylayout that comes with Ukelele:

    <key code="123" output="&#x001c;"/>
You could also use DefaultKeyBinding.dict for inserting Greek characters, but it wouldn't work in Xcode or shell views. (See http://www.hcs.harvard.edu/~jrus/site/KeyBindings/Greek%20Bi...) Another option would be to add keymaps to a keylayout file:

    <keyMapSelect mapIndex="8">
        <modifier keys="caps"/>
    </keyMapSelect>
    <keyMapSelect mapIndex="9">
        <modifier keys="caps anyShift"/>
    </keyMapSelect>
    
    ...
     
    <keyMap index="8">
        <key code="0" output="α"/>
        <key code="1" output="σ"/>
To assign another key to a holdable caps lock, check "Pass-Through CapsLock LED status" and add something like this to private.xml:

    <autogen>
    --KeyToKey--
    KeyCode::N,
    Option::KEYTOKEY_BEFORE_KEYDOWN,
    KeyCode::CAPSLOCK,
    Option::KEYTOKEY_AFTER_KEYUP,
    KeyCode::CAPSLOCK
    </autogen>
I thought something like this might also work:

    <autogen>
    --KeyToKey--
    KeyCode::A,
    ModifierFlag::OPTION_R,
    KeyCode::A,
    Option::KEYTOKEY_BEFORE_KEYDOWN,
    KeyCode::VK_CHANGE_INPUTMODE_RUSSIAN,
    KeyCode::VK_WAIT_10MS,
    Option::KEYTOKEY_AFTER_KEYUP,
    KeyCode::VK_WAIT_10MS,
    KeyCode::VK_CHANGE_INPUTMODE_FINNISH
    </autogen>
Unicode Hex Input or Greek is not included in inputsourcedef.xml though.


I'm almost ashamed of how excited I was while reading this. Default layouts of keyboards are incredibly ineffective for programming, and I find customization of layouts to be very important.

The best thing I ever did was adopting something I found on some dvorak layouts; using AltGr to make any special symbols. Now, AltGr+qwerasdfzxcv makes ()[]^${};/&! for me, which covers 90% of the special characters I write. Not leaving the alphabetical keys for any of these does wonders; It's the little things, really.

I'll also try to implement the shift-key training through xmodmap. I'll post the results if I manage!


I ask xmodmap to make a compose key, which is probably something close to what you're talking about.

You can also ask Emacs to switch to tex-mode typesetting with C-u C-\

Then, you can type λ with \lambda , and other common TeX symbols.


My favorite keyboard is, hands down, the Microsoft Natural.

However, I'm often tempted to try a 122 key IBM:

http://pckeyboard.com/page/PC122/UB40B5A

Is anyone here using a 122-key?

Another one that tempts me is the Sun Type 7 (the 6 is USB too, but is too 90's):

http://www.oracle.com/us/products/servers-storage/desktop-wo...


I just wish Microsoft (or anyone, really) made mechanical keyboard with Natural layout.

That would be The Greatest Keyboard Ever Made.


what about the kinesis advantage? http://www.kinesis-ergo.com/advantage.htm


I've got the unicomp 122 that I use at work, and the HHKB Pro Silence∂ that I use at home.

I only got the 122 because they were out of stock of of all the Classic and Space Saver when I was ordering, and truth be told I can't think of any intrinsic advantages that the 122 brings. I do love the layout of the arrow keys (with Home in their middle), but the singe best feature of the board is the BS switches.

Back when I bought mine there were a few more configuration options for the 122, one where the additional F keys (13 - 14) would send a "normal" F13 signal, and one where it sends shift + the F key below it. For example, F13 would send Shift-F1. Seeing how unicomp does not give you options any more, you might want to check what the default is.

Also, if you like the Natural, you might be in to ergo boards? You might like the Truly Ergonimic[1] with MX browns. Watch out of the placement of the important programming keys though, since they are a bit off (~ [ ] { } ; : / \ etc.)

1: https://secure.trulyergonomic.com/


Microsoft would win the game and take the princess home if they just sawed off the damn numpad off either the Natural 4000 or even better the black Natural Elite.


I suspect it depends how the keys feel for you. My advice would be go for the sun, they feel a lot nicer, so much lighter and less effort to type anyone. But I'm speaking as someone who loathes and detests the Model M that so many adore.


I'm not sure I would like the caps lock doing double duty as both control and escape, since it seems like it would be easy to accidentally use it wrong. I always remap the caps lock to control, but long ago I trained myself to use control-] in place of escape so I never have to reach for that dreaded key when using vi, and I can also use emacs happily.


Probably everybody reading Steve's post had a "eureka" moment on different sections. For me, it was the dual-duty caps lock key idea. I've always used "ii" remapped to ESC in vim insert mode--that changes today.


How did you type Hawaii or Radii or Naziism before?


It is a shame most of the really good keyboards require so much power that it precludes Bluetooth or mobile usage. I'd love to have a HHKB if it worked wirelessly with both my laptop and tablet.

http://beastwith.in/2012/05/17/usiung-power-hungry-tactile-k...


I wouldn't be surprised to see bluetooth/battery-capable versions of some of these in the future. It would seem the next logical product upgrade.


Seconded.

For a second I was excited to see a really compact and portable keyboard - but I want/need a wireless one. A shame..


Oddly enough the ctrl key in the home row is a Unix thing (I think it's a Sun invention, but I don't recall). On the original space cadet keyboard (and all the Symbolics keyboards), Rub Out is located where modern day Caps Lock is found (see: http://en.wikipedia.org/wiki/Space-cadet_keyboard). Ctrl is still located on the bottom row.

Has anyone tried remapping a delete key to where the Caps Lock key is found? Is there anyone with a real space cadet keyboard or symbolics keyboard that can comment on using it with vim or emacs?


CTRL next to A was, I believe, its original location. That's where it was on the Teletype Model 33, which dates back to 1963, and I'm not aware of an earlier keyboard that had a CTRL key.

In the 1970s, most terminals continued with this placement. I believe the modern practice of putting Caps Lock there came in with the first IBM PC -- copied, of course, from their typewriter keyboards.

Being a longtime Lisp Machine user, I had that key mapped to Backspace on my Unix workstations into the late 1990s, but I couldn't do that remapping on my PowerBook, so I gave up -- it was too confusing to have Backspace in different places on different machines. (I think the remapping is actually possible with OS X, but I've never bothered. It's certainly possible with Linux.)


I didn't know that about the ASR-33 (haven't actually seen one), all my experience has been with unix and PC keyboards (plus some WYSE terminals).

I agree with it being confusing to have the same key jump around while you type, which is why I gave up re-mapping altogether (at my last job I was using 5 different systems that each would have required a remap, and I wasn't able to remap on each system). To much dissonance when trying to figure out why a key is not doing what you think it should be doing.


Here is the xmodmap I use in Linux:

  remove Lock = Caps_Lock
  clear Lock
  keysym  Caps_Lock =    Control_L  BackSpace  Escape  BackSpace
  add Control = Control_L

I've been playing with KR4MB and set Control_L to Control_L (+ When you type Control_L only, send Delete) + [KeyRepeat]

This is causing some angst, as I've discovered I sometimes tend to hold down the CapsLock key before hitting another key. It's long enough for multiple deletes to be sent to an application (eg using Vrome in Chrome).

Shift_R has been remapped to <Esc>.


> Has anyone tried remapping a delete key to where the Caps Lock key is found?

The Colemak keyboard layout does that.


It doesn't work with the Colemak input method that comes with OS X though. I don't think there's any way to change caps lock to delete in a keylayout file, but you can always use PCKeyboardHack.


I really wish I could take part in all this keyboard fun. Unfortunately, there's a 20 degree upward curve in the middle of my right forearm (due to an old injury). This limits my options to the Kinesis Freestyle [1] and maybe the Goldtouch. The Freestyle is okay, but I miss the switches of more substantial keyboards.

Can anyone recommend a more hacker-friendly split-in-two keyboard along the lines of those discussed in the article?

[1] http://www.kinesis-ergo.com/freestyle.htm


This is an excellent compilation of info and tricks and I look forward to using some of it myself on the software side.

On the hardware side, I don't think I've ever seen anything surpassing http://mykeyboard.co.uk/microswitch/ in sheer dedication to the goal of a truly efficient and comfortable/safe keyboard. I wish I had the space, money and time to attempt something similar (also not a laptop as a primary machine, but that's another matter entirely)


The Japanese layout version of the HHKB looks really nice: http://www.pfu.co.jp/hhkeyboard/lineup/pdkb420w.html Not sure where you can buy one though.

Edit: Looking at it again, some of the programming related symbol keys are in slightly strange positions and would require some relearning. Plus the right shift is tiny.


Does anyone know how to setup a keyboard to pass absolutely all keys to a VM?

I like OSX for power management and driver compatability, but I sorely miss having a tiling window manager. I would like total pass through of keystrokes to a VM. Dropping out of the VM could be accomplished by running a program on the host machine via ssh from the VM.


Inspired by the space cadet: http://people.xiph.org/~greg/xmodmap.txt

Capslock is left control; left control is greek (gets the two sets of alternative characters listed in the file). task button is compose.


Great post. Consider the following changes to the Greek mapping to be consistent with Greek keyboards and the "greek" input mode in Emacs:

    q Q: ; :
    w W: ς Σ
    y Y: υ Υ
    u U: θ Θ
    j J: ξ Ξ
    x X: χ Χ
    c C: ψ Ψ
    v V: ω Ω


Have anyone implemented any of this on Windows, perhaps with Autohotkey? Is it possible?


Yes, you can do it with AutoHotKey. I tried it a few years ago but didn't really get on with it. I think it might have caused problems with some keyboard shortcuts I use - a lot of my emacs shortcuts are designed for activation with one hand pressing modifier keys and the letter key.

Anyway, just use the < and > modifiers to indicate left or right Shift specifically. For example, assuming QWERTY:

   <+q::Send q
   >+p::Send p


but wait, this doesn't get at having shift behave normally unless it is the only key that gets pressed. Does it?


No, sorry - the bit from the article that was in my mind as I replied was forcing one to use the opposite Shift, because I'd tried that myself. I didn't think about the use of Shift as a key on its own (I really wouldn't get on with that myself as I tap the meta keys a lot while I'm thinking).


create a file, ctrl-to-esc.ahk:

  Ctrl::
  Send {esc}
  Return
Then run the script and AutoHotkey will sit in the background, waiting to substitute a lone ctrl for an escape-key-press.

I haven't figured out the shift-parens yet, unfortunately.


I'm still rocking my 1990 IBM Model-M. These things are truly indestructible.


I wore one out a year ago. It was going through an AT to PS/2 adapter then a PS/2 to USB adapter. The "S" key started only working on about 9/10 keystrokes :(


It may not be worth the effort, but you can still get replacement parts for them. Or just go with a new Unicomp.


1985 here. Still rocking and clicking away.


Thanks, I love the shift-key training wheels idea. It caught me starting both of these sentences with the wrong shift key.


I love the shift click to get brackets trick, any idea on how to get it on vim?


So X will translate keycodes from the keyboard press/release events that contain keysyms + modifiers + more (look up X keypress event) that get sent to your terminal emulator. Your terminal emulator will translate those into ascii chars or sequences in order to send them to your editor. (Note that, without translating some of these X keyboard events into escape sequences, you can't express the full range of possible keys and chords in ASCII.)

You can define custom translations keysym for some terminal emulators. I've done this in urxvt in order to free up C-j and C-S-[letter] combinations for my own use.

urxvt will allow you to translate the Shift_L keycode into "(" or "()" or "i_love_hacker_news_<3". And it still does it's job as a modifier too. The only problem is that "i_love_hacker_news<3" will be output as soon as the press event is received, so you'll output "(" even when you press shift as part of a chord.

You can write perl scripts in urxvt that can capture X keyboard events, and maybe your script could only output "(" if it detects that no intermediate X event was detected between the press and the release of "(".

I'm not totally sure that you get THAT much info from urxvt, but it's the best approach that I know of. As an alternative, maybe you could write a program to intercept X events before they reach the terminal (and/or any other program).

That's about as far as I care to go right now.

Let me know if you get something working, I'd be interested in using it too.


You mean pressing shift to get parens? I doubt it's possible withing Vim. Certainly not within a terminal Vim (the terminal emulator almost certainly wouldn't pass a bare shift through to Vim at all). I'm pretty sure you have to do it at the OS level like this.


I played around with implementing something like this on linux (with xmodmap specifically) and didn't find anything conditional. I did figure out how to make holding right shift and tapping left produce a left parenthesis, and vice versa produce a right.

This is from memory, so bear with me if its not perfect, but I setup xmodmap with

keysym 50 = Shift_L parenleft Shift_L keysym 62 = Shift_R parenright Shift_R

Xmodmap allows you to define multiple symbols for a key. The first symbol is what you get with no modifiers; the second is with shift; the third is with Mode_switch (or AltGr, depending) and the fourth is with Shift and AltGr. There's sometimes although a 5-8, but that varies by platform and I haven't done enough experiments to really nail down what those are for linux these days, OR if those are tied to mod1/mod2/etc. instead of shift/altgr/mode_switch or specific modifiers like that.

Anyway, all the keysyms always defined the first three anyway (no modifiers, shift, and Mode_switch) and some defined the fourth. I don't have or use a Mode_switch key (yet) but I may try that out as a 'Greek' key or such, but since 90% of the time I'm programming I'm not sure if I'd ever use it.

My lines above defines parenleft as the symbol to send if key 50 (the left shift key) is pressed while the shift modifier is active. So, I can use the right shift to turn on the shift modifier, and then left shift turns into a left parenthesis key. Similarily, I can use the left shift key to turn the right shift into a right parenthesis.

So, to type a pair of parenthesis back to back "()" I press right shift, press left shift, release right shift, and tap right shift. It's certainly more awkward than what Steve was able to setup, but hey, its where I've got so far.


Uhm, ok perfect, thanks i'll investigate!


could you please post your findings?


Anyone have a simple way to achieve the Caps-lock training wheels in linux?


I believe this stackoverflow question, asked today, would give us the answer: http://stackoverflow.com/questions/12704366




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: