[xmonad] Project to make tiling window managers more accessible to newcomers

Gwern Branwen gwern0 at gmail.com
Wed Apr 8 13:43:46 EDT 2009

On Wed, Apr 8, 2009 at 12:23 PM, Jan Vornberger <Jan.Vornberger at informatik.uni-oldenburg.de> wrote:
> Hello,
> my name is Jan Vornberger and I'm a student at the University of
> Oldenburg (Germany). I would like to introduce myself and the project
> that I will be working on for the next semester.
> As part of my studies I have to work on a semester-long project. I
> decided to work on the question, how tiling window managers can be made
> more 'beginner-friendly' and how the barrier to entry can be lowered.
> I have decided to use XMonad as a basis for implementing my ideas.
> Therefore I wanted to introduce myself, as I will probably be asking a
> question here and there in the future. :-)
> For those who are interested, here is a rough sketch on what I have in
> mind for my project: My goal is to create a modern tiling window manager
> that can be productively used with virtually no training, meaning most
> core functionality needs to be accessible in an intuitive way or drawing
> from well-known conventions in more conventional window managers.
> My target user is someone who wants to give tiling window managers a
> try, but doesn't want to learn keyboard commands (at least not in the
> beginning), read a detailed manual or write any sort of configuration
> file.
> I'm planning to decide on a somewhat fixed configuration of XMonad,
> probably in combination with Gnome as a DE, and then trying to make this
> functionality available via mouse commands that - hopefully - will be
> easy to pick up.
> I also want to completely rework the whole floating layer thing, as it
> seems to me to be a fairly foreing concept for a newcomer and it's
> awkward to use. My current idea is to instead use a floating layout
> algorithm, that could work similiar to a conventional window manager. It
> could even be set as the default layout algorithm. That way, the WM
> could almost be a 'drop-in' replacement for - let's say Metacity -
> greeting the user with the familiar concept of manipulating windows and
> then leading him to the tiling paradigm once he switches the layout.
> I do believe that eventually the keyboard is a more effective way to
> control the WM, so I will also investigate the possibility of some kind
> of help system, that can point out how - for example - the last action,
> the user did, can be done with keyboard commands instead. Alternatively
> tooltips could also be used to display key bindings.
> That's it, the project in a nutshell. Any thoughts, pointers, related
> ideas, doubts or comments are most welcome. :-)
> Cheers!
> Jan

One idea I've always wondered about is a menubar based tiling WM. The user, say, middle-clicks (hardly anyone uses middle-click), and then a geometrical menu pops up along the lines of XMonad.Actions.GridSelect. In it are all the default operations - 'kill', 'refresh',  'sendMessage NextLayout', etc. The user left-clicks on one and voila.

Further refinements: the menu could be shaped like some of the funky HCI designs (such as the pie ones, or using hyperbolic shrinking); could be sorted by frequency of use; each item could have in very small text the keybound equivalent ('M-Space') - kind of like how Emacs will echo the keybinding of a menu-item if you select it the hard way.

And of course this would be a focus-follows-mouse setup. The nice thing about this is that I think it's doable by one person in a semester (really, the hardest part is stealing the GUI code from GridSelect and making it mouse-enabled*), and should be dead simple for people new to the tiling paradigm to learn. Just middle-click and pick what sounds right. The menubar makes 'visible' the 'invisible'.

* In theory if you wanted to make a menubar that worked with arbitrary keymaps, you'd need some sort of Show equivalent for functions, since you need to be able to have a textual equivalent to whatever crazy things people may do - how could you really foresee my binding of 'runOrRaise "amarok" (className =? "amarokapp")'? - which gets you into complex territory fast. But if you're serious about the default config, you could just write up a static [String]. Which would also let you use more newbie-friendly names: instead of 'spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\""' you could just have 'run Dmenu'.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 270 bytes
Desc: OpenPGP digital signature
Url : http://www.haskell.org/pipermail/xmonad/attachments/20090408/3224e76d/signature-0001.bin

More information about the xmonad mailing list