This isn’t the first time I’ve commented about user interfaces. This weekend has been particularly wet, and while I did have plans to get out of the house for a few hours, I’ve spent a week-end indoors.
This meant time to go tinker with a few projects, amongst those being my desktop configuration. In particular, key bindings, and panel placement.
My desktop is largely based on what I was running when I was at university. At this time, I was mostly limping around with aging Pentium II class laptops with display resolutions of 800×600 pixels. No space for big spacious panels here. I was running KDE at the time.
I frequently had a need to move windows around without the use of an external mouse. The little writing boards that the university provides in its lecture theatres are barely big enough to accommodate a writing pad let along a laptop! The laptops I had generally had the small track-point type cursor, which while usable, wasn’t great.
That, and small screen real-estate dictated a desktop which was space efficient and mostly keyboard driven.
Now, I could have gone the route of tiling window managers. I recall trying out Ratpoison at one point, decided it wasn’t for me, and let it go. I do like a little eye candy! KDE 3.5 at the time provided a good balance, and wasn’t too bad on these machines. Crucially, I was able to set up a couple of small panels around the sides of the screen, and set up key bindings to perform most operations. Some of the common operations I needed were:
|Logo + Shift + M||Move a window|
|Logo + Shift + R||Resize a window|
|Logo + Shift + S||Shade (roll up) a window|
|Logo + Shift + X||Maximise a window|
|Logo + Shift + C||Close a window|
|Logo + Shift + I||Iconify (minimise) a window|
|Logo + Menu (now broken)||Bring up launcher menu|
You’ll note here I use the term Logo to refer to the additional modifier on some keyboards. Apple users will know this as the Command key. Microsoft users will of course call this the Windows key. On my Yeeloong, the key looks like a house in a white circle. FVWM calls it Mod4. I call it the Logo key because it usually has some sort of OS-vendor-specific logo associated with it.
I use this, rather than Control and Alternate, since most applications bind their operations to those keys, and ignore the Logo key. By requiring the Logo key to be used in command sequences, it leaves Control and Alternate for applications. Control and Alternate of course, still get used in combination with Logo to extend the command set. The key bindings in bold get used the most.
One key stroke did change; originally I had Logo + Menu as the key sequence to bring up the launcher menu. I found KDE 4 broke this, I could no longer assign the Menu key (the one that brings up context menus in Windows) to this action. I haven’t really settled on a suitable substitute, and of course, my current Apple MacBook does not have this key, so I use Logo+Launch instead (what shows the dashboard in MacOS X), a little more of a stretch, but it works.
The layout I settled on was to have a menu and task bar up the top of the screen, then status notification and pager down the right-hand side. Each panel occupied no more than 16 pixels. I made extensive use of virtual desktops, configuring 12 virtual desktops and assigning these to each of the function keys. So Logo + F5 meant, go to desktop 5. Logo + Shift + F5 meant, move window to desktop 5.
Thus I could juggle the laptop in my hands, launching applications, moving them between desktops, figuring out where I needed to be next and getting things ready on my way between lectures and tutorials.
Over time, KDE became unsuitable as a full blown desktop due to its memory footprint. I found myself looking around and for a while, I was running FVWM. After a bit of research I figured out how to set up the bindings in much the same way. I managed to get FVWM’s BarButtons to emulate the side panel, but have the panel just lurk in the background and be recalled when necessary. And of course, the root menu and icons shown on the desktop mostly removed the need for a task bar.
This worked well, until I got the MacBook. The MacBook’s keyboard does have function keys, but requires you to hold the Fn key to access them. So the “Move to desktop 3” operation which I do so commonly, became Logo+Shift+Fn+F3. A real finger-twister. I’ve just put up with it until now.
What’s replaced it? Well I’ve done some re-working. Icons on the desktop for iconified windows is good and well but you’ve got to be able to get at them. That, and getting at the menu with the mouse in one hand proved to be a hassle, so for those tasks, the task-bar is back with its launcher button.
The BarButtons has been given a title bar, and the EWMH working area has been set so that applications do not cover the task bar, or the BarButtons title bar, allowing those to be accessed with the mouse alone. The BarButtons can be raised or lowered with a new key sequence, Logo+Z.
The application switching was always a chore. This is probably the one exception to the Logo for Window manager command rule; I used the very prevalent Alternate+Tab to switch applications. FVWM does this out-of-the-box unsurprisingly. I found with a lot of applications though, going Alt-Tab,Tab,Tab,Tab just a little annoying.
Logo+A brings up the window list and the window list stays there until a choice is made. The windows are numbered with a digit, and one can use arrow keys to select. Much better.
As for the virtual desktops. FVWM has desktops and pages. What I was using as “desktops” before, were just pages of a single desktop. I decided that once again we’d do proper virtual desktops, but only 4 of them, with 4 pages each. That’s 16 “spaces” in total. But how to switch between them? With new key bindings:
|Logo + 1||Jump to Desktop 1|
|Logo + 2||Jump to Desktop 2|
|Logo + 3||Jump to Desktop 3|
|Logo + 4||Jump to Desktop 4|
|Logo + Q||Jump to Page 1|
|Logo + W||Jump to Page 2|
|Logo + E||Jump to Page 3|
|Logo + R||Jump to Page 4|
|Logo + T||Jump to last page|
|Logo + Backtick||Jump to last desktop|
|Logo + Tab||Jump to last desktop and page|
|Logo + Shift + 1||Move window to Desktop 1|
|Logo + Shift + 2||Move window to Desktop 2|
|Logo + Shift + 3||Move window to Desktop 3|
|Logo + Shift + 4||Move window to Desktop 4|
|Logo + Shift + Q||Move window to Page 1|
|Logo + Shift + W||Move window to Page 2|
|Logo + Shift + E||Move window to Page 3|
|Logo + Shift + R||Move window to Page 4|
|Logo + Shift + T||Move window to last page|
|Logo + Shift + Backtick||Move window to last desktop|
|Logo + Shift + Tab||Move window to last desktop and page|
Then there’s the key binding Logo + Escape, which brings up a Jump To menu, where I can just press one of the numeric keys 1-4, which pops up a menu allowing me to select the page 1-4. So to jump to Desktop 4 Page 2, I just hit Logo+Escape, 4, 2. I’m still working on the move bit, while FVWM’s GotoDeskAndPage is documented and works, I’m having trouble with MoveToDeskAndPage, which seems to be undocumented.
We shall see on Monday how the new arrangement goes.
Accessing applications I think will be the next point to work on. I’m thinking about how to code a suitable launcher that can be summoned by FVWM. There are elements of common launchers such as the Windows Start menu, and its replacement, the Start Screen in Windows 8 that are good. The Program Manager was limited by its MDI interface, but the program groups meant there was a hierarchy that the Windows 8 start screen, and indeed, other contemporary launchers, lack.
The FVWM launcher isn’t bad — but it makes it hard to re-arrange items, there the old Program Manager really does shine. Want a new program group? Choose File, New, select Program Group, click OK, done. Want to add an icon to that group? Similar process. Adding and managing applications really does need to be that simple, so the end user can put things where they want them.
That, and keyboard accessibility is a must. FVWM has a little bug which is evident in this screenshot…
If you look at the menu, you’ll notice two things:
- There are multiple menu items with the same access key
- Where a menu item contains an ampersand, the space following is treated as the access key.
That’s a minor bug with FVWM’s AutomaticHotKeys. Fixable for sure. That particular menu is generated by a Perl script distributed with FVWM; I have a patch that tweaks it to put ampersands in appropriate places to give all the items access key assignments, but I think there are better ways.
In the meantime, those who are interested, my FVWM configuration is here. This will expand into the .fvwm directory.