I am very picky about computers. As I use at least one, in some manner, over 90% of the time I'm awake, I figure I should have a good user interface for it; something that lets me worry about the things that matter, and let the computer sort out the things that don't. That's why I started using Ion. I have reached a form of interface zen with my computer and I'm never going back.
Ion is a wonderful tool. It's also a very scary one for those who have never used it before. Put simply: it's a more efficient use of a graphical user interface. Instead of overlapping windows on your screen, the screen is divided into non-overlapping boxes. I won't go into more detail about the basics of it than that, as the official site gives an excellent explanation of it.
I was initially put off by it, as it was too minimalistic; I like being able to drag windows around and put them Just So. But, on a whim (and at the suggestion of people on IRC) I tried it. It was horrible. It was not the concept that was a problem, but the way you interacted with it. It's a keyboard-based user interface, and the default keyboard controls just sucked. I really wanted to try it, so I had to make it usable for my very picky self.
I spent a few hours coming up with a scheme that felt comfortable, made logical sense (to me, anyhow), and didn't require moving hands into various penalty-zones for basic tasks. (I highly recommend you read Interface Zen which gives some basic ideas that I used when coming up with my layout.) I based the usability on my laptop's keyboard (which has those handy extra keys), the Dvorak layout, and FBPN navigation.
Using this layout, I can move windows, get to specific windows, and have hundreds of things open without mental effort. I've gotten to the point where I just think "IM window", my hands move almost un-noticeably, and suddenly there I am, ready to type into it. I think, "type to that window over there" and a few milliseconds later my hands have taken me there. There's no "*type type* *stop typing* *pick hands off keyboard* *pick up the mouse* *move mouse to new window, click* *type type*, etc." that is bound to give someone an RSI. Even alt-tab is too slow as it requires careful monitoring of what comes up on the screen as you're cycling. This is an efficient computer interface at its peak.
Using the power of setxkbmap, I first configured my keys the way I like them. I hate caps-lock, so I got rid of it; caps-lock is now an extra control. As I don't use any Microsoft products, the Windows key can conveniently be remapped to be more useful. I dedicate it instead to be my ion key, and it's appropriately left blank on my physical keyboard. X knows this key as being "meta". I also like to write "foreign" characters at times, especially as my laptop is named µ, so I made the extra "menu" key be a compose key (with compose, you press compose once followed by two or more keys and it will "compose" them to be something more useful. E.g. [compose], 'u', '/' creates 'µ'). To do all this is rather simple:
setxkbmap -option ctrl:nocaps -option compose:menu -option altwin:super_win dvorak
I just toss that in an init script (and in the conveniently-named script "asdf") and it'll set it up properly.
From here-on, I abbreviate key combinations the emacs way. The ion key ("meta") is abbreviated "M-", shift is "S-" and control is "C-". eg. C-M-f is Control + Meta + 'f'.
I like FBPN for directions. The directional pad is just too far away to really be useful for frequent use. F for "forward", B for "back", P for "previous", N for "next". Emacs uses this style for navigation and it's very convenient and comfortable to use. These map to right, left, up and down respectively. With much hand-massaging of ion's new lua config file, I put together the following keyboard user interface:
That pretty much covers all the most important bindings. There are a few others that I left out, like M-[right] and M-[left] for relative workspace movement. So, you might be wondering, why did I go to all this trouble? It's part a reminder to myself, part spread-the-wealth, part observation of user interfaces. You can grab my ion configuration if you'd like to try it yourself. Let me know if you try it out; I'd love to hear feedback on the subject.
Re:
Heh. Well, it's probably possible to convince X to use the left alt as a meta and the right as an alt. Or something like that. Hell, remap your control to be a meta and move ctrl to the capslock key.
The Blender project has plans to spin off their windowing library Ghost as a separate library. Ghost draws to OpenGL, and uses split screens. Two of the neat things about it is that since it's OpenGL, you can easily zoom in/out on any window, and it's rather cross-platform. And fast.
Since I have a pretty small screen (do you still use a Lifebook, Steve?) I tend to only have one or two windows open on each virtual desktop, and use the fact that they can overlap; Command-~ (same idea as Alt-Tab) is then easy to use with two or three windows. Besides, I have a Mac, I don't have as much of a choice :)
I've been giving "Exposé" a chance recently though-- it's he new Mac feature that temporarily puts all your windows in an almost grid so you can select one to go on top. The layout is random each time though :(
Re:
Dude, that's pretty cool. It'll be a bit before the average computer can handle it, but still - it'll be cool if it catches on.
Yeah. I use my lifebook. I solve the realestate problem by using small fonts and lots of tabs in gaim, ion, and firefox. As well as screen for all my remote terminal needs.
Exposé is so pretty. I'm not sure if i could get used to it, but it's fun to watch other people use. :-)
I've found that I mostly just use the command that hides all windows and shows the desktop actually. (Windows has a similar button)
What do you mean by the average computer? The average new computer these days has some kind of OpenGL support, right?
I don't know if you remember me, I was at the RI/SME competition last year.
Anyways I have been using Ion for awhile and like your bindings, except for the fact that you use Emacs bindings, yuck ;-).
So I modified them to use hjkl bindings like Vi uses. It works quite well.
Anyways, thanks for the configs.
-Brandon Philips
Re:
hey :-)
vi vs. emacs - it's all just flavour, IMO. Glad you like the configs - it's good to see they're of use.
*continues this in email*
"that is bound to give someone an RSI."
Isn't continuous typing *more* likely to give RSI than interrupted typing?
Re:
Yes, you're right. In that, it's highly suggested to take regular typing breaks.
However, one has to concider the type of interruption to your typing. If it's a macro (as opposed to very small movements used in typing) movement that results from switching between mouse and keyboard, then you're still potentially in trouble. I'm pretty sure that - ultimately - you want to eliminate repetitive finger/wrist movements - more the latter than the former.
The mouse is a horrible device - RSI-wise. Most of the guides I've found on the 'net suggest to eliminate mouse usage wherever possible. I took that a step further and attempted to elimninate superflous wrist-based keyboard movements.
some good links: wikipedia on RSI laptop ergonomics RSI prevention
![]()
All original sound, text and graphics on this site (staticfree.info) are licensed under a
Creative Commons License.
Re: Ion and how I made it usable
I'd _so_ be using your bindings tomorrow if boo had a windows-key...