
On Wed, Apr 8, 2009 at 12:23 PM, Jan Vornberger
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'. -- gwern