Comparison of "extensible window managers"

Hi, Xmonad list. I think Xmonad is one of window managers "extensible" by users, or programmable, offering the API and allowing users to override the core code, or freely define new behaviors, though I haven't tried Xmonad actually yet. I'm a former developer of Sawfish which might be the first of such kind of WMs, using a Lisp dialect. I'm interested in comparing them, and created a wiki page for it: http://sawfish.wikia.com/wiki/Comparison_of_extensible_window_managers There Awesome and StumpWM are also studied. If someone is interested, please improve that article. Feel free to add any subjects. Or if you don't feel like editing wiki, you can comment here, and I'll do the actual edit. Of course I'll be glad to answer any questions about Sawfish. # I envy the fact that Xmonad's web site is so well tidy. I tried a lot # in improving Sawfish manual and wiki, but I felt as if I was trying # to move a mountain. With best regards, Teika (Teika kazura)

On Sat, Sep 3, 2011 at 12:22 AM, Teika Kazura
If someone is interested, please improve that article. Feel free to add any subjects. Or if you don't feel like editing wiki, you can comment here, and I'll do the actual edit.
The overview looked good to me. I'm pretty sure xmonad doesn't support 'large desktops' - it doesn't ring any bells at all. As far as Awesome and StumpWM and XMonad go, I have some random notes on pros and cons which never went anywhere: http://www.gwern.net/xmonad-advocacy I think most of them are still valid. (Certainly Xmonad hasn't changed very much since I wrote that.) -- gwern http://www.gwern.net

Thanks, Gwern. So your line of interest is similar to mine. :) I have one question: the page you referred to says "live hacking [in stumpwm] means you can hose your X session" It's correct, and I have done it several times in Sawfish, like infinite loops. (I've never tried StumpWM.) But isn't it the same for any of these WMs that if you have errors in your code, your WM can be almost unusable, no? Or is it less likely in haskell? It's better to byte-compile in Lisp, too. Sawfish's lisp (librep) is poor, but I guess common lisp compiler may be able to emit good warnings. (And please make it habit to record the date of last web page edit, which is really informative for readers.) I don't understand why large desktop is not so much common (famous example which has LD is fvwm); it's really convenient since geometric meaning is intuitive. For example, my top-right viewport (a viewport is the portion shown in a monitor) is assigned for browser, and I switch the viewport by Shift + cursor. I only have one workspace, but some Sawfish user have several large workspaces. # Wow, you're interested in 柄井川柳 (Karai Senryu)? I don't know # about him at all, but I'm interested in Edo period senryu, too. # I'm Japanese. :) Teika (Teika kazura, retired Sawfish developer)

2011/9/6 Teika Kazura
I don't understand why large desktop is not so much common (famous example which has LD is fvwm); it's really convenient since geometric meaning is intuitive. For example, my top-right viewport (a viewport is the portion shown in a monitor) is assigned for browser, and I switch the viewport by Shift + cursor. I only have one workspace, but some Sawfish user have several large workspaces.
Window managers don't do it any more because X11 has had the ability to do it itself for some 10 years now (see the "Screen" section in xorg.conf, notably the "Viewport" declaration). And people very much do still make use of it. -- brandon s allbery allbery.b@gmail.com wandering unix systems administrator (available) (412) 475-9364 vm/sms

On Tue, 6 Sep 2011 04:02:39 -0400, Brandon Allbery wrote:
I don't understand why large desktop is not so much common[...]
Window managers don't do it any more because X11 has had the ability to do it itself for some 10 years now (see the "Screen" section in xorg.conf, notably the "Viewport" declaration).
If I understand correctly, they're different. X server resolutions are fixed by the video card, and you can only choose one from them. E.g. in my case 1280x800, 800x600, etc. And X "viewport" happens if the _server_ resolution is bigger than the _monitor_ resolution. Large desktop is provided by window managers, and there's no limitation. It can be 10000x10000 or bigger. Unfortunately Sawfish's simple implementation limits it to 32767, which is a realisitic problem if you have several monitors. Thanks anyway. Teika (Teika kazura)

On Mon, Sep 12, 2011 at 19:48, Teika Kazura
On Tue, 6 Sep 2011 04:02:39 -0400, Brandon Allbery wrote:
I don't understand why large desktop is not so much common[...]
Window managers don't do it any more because X11 has had the ability to do it itself for some 10 years now (see the "Screen" section in xorg.conf, notably the "Viewport" declaration).
If I understand correctly, they're different. X server resolutions are fixed by the video card, and you can only choose one from them. E.g. in my case 1280x800, 800x600, etc. And X "viewport" happens if the _server_ resolution is bigger than the _monitor_ resolution.
While it was originally introduced to allow multiple monitor resolutions to coexist, it was expanded sometime in (IIRC) the XFree86 4.2 days to fully support this more general usage. (There is an additional limitation based on protocol pixel addressability — +/- 32767, IIRC — but I think modern servers have extensions to correct that, and it affected window manager-based implementations as well.) Large desktop is provided by window managers, and there's no
Large desktops were provided by window managers when the server wasn't capable of providing an arbitrarily sized root window. Its implementation within window managers was a hack for a server shortcoming that has since been fixed. -- brandon s allbery allbery.b@gmail.com wandering unix systems administrator (available) (412) 475-9364 vm/sms

On Tue, 13 Sep 2011 11:07:04 -0400, Brandon Allbery wrote:
On Tue, 6 Sep 2011 04:02:39 -0400, Brandon Allbery wrote:
I don't understand why large desktop is not so much common[...] [...] While it was originally introduced to allow multiple monitor resolutions to coexist
Probably you're talking about RandR, and you're right. Another unfortune is that it's (also) poorly documented. Though I'm not sure if meddling RandR to achieve large desktop is the best way...
(There is an additional limitation based on protocol pixel addressability ― +/- 32767, IIRC ― but I think modern servers have extensions to correct that
16-bitness is part of X11 protocol (Xlib functions do take 32 bits arguments, but don't get fooled) and it persists. "X12" page (http://www.x.org/wiki/Development/X12) says: 15 bit coordinate limit Ouch. 32768 pixels at 100dpi is 8.3 meters. Regards, Teika (Teika kazura)

2011/9/15 Teika Kazura
On Tue, 13 Sep 2011 11:07:04 -0400, Brandon Allbery wrote:
On Tue, 6 Sep 2011 04:02:39 -0400, Brandon Allbery wrote:
I don't understand why large desktop is not so much common[...] [...] While it was originally introduced to allow multiple monitor resolutions to coexist
Probably you're talking about RandR, and you're right. Another
XRandR came *much* later.
unfortune is that it's (also) poorly documented. Though I'm not sure if meddling RandR to achieve large desktop is the best way...
The problem with doing it in the window manager is that a number of standard
library routines that use the X server's idea of the screen extents now have
to be reimplemented to use the window manager's idea of it. Back in the
very early days of this, it was *usually* enough to recompile every program
against a copy of

Thanks a lot for your detailed explanation. If it's that problematic, it's peculiar that EWMH (Extended window manager hints) doesn't deprecate large desktop, whose latest being 1.3 or 1.4-draft2, updated 2005 or 2008. Anyway ewmh is deserted, and gnome and kde people don't care others any more. ;) Teika (Teika kazura)

On Thu, Sep 15, 2011 at 03:12, Teika Kazura
Thanks a lot for your detailed explanation.
If it's that problematic, it's peculiar that EWMH (Extended window manager hints) doesn't deprecate large desktop, whose latest being
It's fine as long as you stick to a subset of things (in particular, you'll find that gnome/kde/lxde/etc. allow widgets to be separate processes and use a separate widget manager, but enlightenment requires them all to be managed by "e" — otherwise they'd play poorly with its virtual root. There is, by the way, one rather obvious (hm, ok, obvious *if* you know a little history) reason to stick this in the server rather than the window manager that I should have mentioned before. Let's say you are using a virtual root window manager and have a large desktop, *and* you for some reason switch the X server to a video mode that requires panning (consider needing to swap the monitor, and the new one doesn't support the resolution(s) you were using; this happened a lot back then, since there wasn't much consistency in video modes between monitors, X servers didn't read DDC information (and only high end monitors provided it back when this was added) so you needed to specify mode lines, and as a result the only common video mode was often VESA 640x480). Now you have both the server and the window manager panning, and the interactions between them made the result *very* difficult to work with: get the mouse pointer near the screen edge and *both* of them pan, resulting in a much larger than expected shift; and in extreme cases (that 640x480) what you were trying to reach might well end up off screen in the other direction, or close enough to the screen edge to trigger *another* double-pan that leaves you right back where you started. I think this is the original reason it got moved completely into the server; since the server needed to support panning anyway, having both server and window manager do it made no sense at all. -- brandon s allbery allbery.b@gmail.com wandering unix systems administrator (available) (412) 475-9364 vm/sms

2011/9/6 Teika Kazura
I have one question: the page you referred to says "live hacking [in stumpwm] means you can hose your X session"
It's correct, and I have done it several times in Sawfish, like infinite loops. (I've never tried StumpWM.) But isn't it the same for any of these WMs that if you have errors in your code, your WM can be almost unusable, no? Or is it less likely in haskell?
So far I've never done that hacking on Xmonad; the type-checking means only runtime errors happen, and I'm better at Haskell than I was at Common Lisp, so I have yet to, say, reload Xmonad with an empty root keymap. (With that example in particular, I'd actually have to work hard at it. The usual style for configs is to *combine* the default keymap with the custom keymap - 'myKeys c `M.union` keys default config c'. So if I replaced myKeys = [], I would still be left with the default XMonad keymap when I reloaded.)
(And please make it habit to record the date of last web page edit, which is really informative for readers.)
gwern.net is a Darcs repo, so the full history is available. Or you could check the HTTP headers for the last-modified header, I believe. I've been meaning to ask Jasper to make Hakyll provide the last-modified file time for easy substitution (I'd probably put it below the 'abstract' field), but haven't gotten around to it.
# Wow, you're interested in 柄井川柳 (Karai Senryu)? I don't know # about him at all, but I'm interested in Edo period senryu, too.
Vaguely interested; that was added years ago when I still thought Wikipedia was a great place to work. My enthusiasm flagged after finishing http://en.wikipedia.org/wiki/Fujiwara_no_Teika and I didn't find very many sources about senryu, so...
# I'm Japanese. :)
I figured from the name. In an amusing coincidence, one of my favorite poets is Fujiwara no Teika (see above). -- gwern http://www.gwern.net

On Tue, Sep 6, 2011 at 10:26 AM, Gwern Branwen
gwern.net is a Darcs repo, so the full history is available. Or you could check the HTTP headers for the last-modified header, I believe. I've been meaning to ask Jasper to make Hakyll provide the last-modified file time for easy substitution (I'd probably put it below the 'abstract' field), but haven't gotten around to it.
Hakyll has been updated: https://github.com/jaspervdj/hakyll/issues/39 Revisit the page and force a reload, and you should see the last-modified date in the sidebar. -- gwern http://www.gwern.net

2011/9/6 Teika Kazura
Thanks, Gwern. So your line of interest is similar to mine. :)
I have one question: the page you referred to says "live hacking [in stumpwm] means you can hose your X session"
It's correct, and I have done it several times in Sawfish, like infinite loops. (I've never tried StumpWM.) But isn't it the same for any of these WMs that if you have errors in your code, your WM can be almost unusable, no? Or is it less likely in haskell?
There are definitely some errors xmonad does not prevent: for example if you write layouts which for whatever reason call `sendMessage' or `refresh' it is easy to get an infinite loop. Perhaps that's why very little code in contrib does that. Adam

Excerpts from adam vogt's message of Sun Sep 11 08:59:22 -0600 2011:
2011/9/6 Teika Kazura
: I have one question: the page you referred to says "live hacking [in stumpwm] means you can hose your X session"
It's correct, and I have done it several times in Sawfish, like infinite loops. (I've never tried StumpWM.) But isn't it the same for any of these WMs that if you have errors in your code, your WM can be almost unusable, no? Or is it less likely in haskell?
There are definitely some errors xmonad does not prevent: for example if you write layouts which for whatever reason call `sendMessage' or `refresh' it is easy to get an infinite loop. Perhaps that's why very little code in contrib does that.
Loops in haskell are very shocking once you've become used to type checking protecting you from silly errors. Once I did a global replace renaming some element in my xmonad.hs, not really paying attention to the fact that I'd changed foo = foo' into foo = foo. Suddenly I found myself at the console with `<<loop>>' my only clue to what had happened. A second pair of eyes would probably have seen this quickly, but I ended up building up my xmonad.hs piece by piece from `main = xmonad defaultConfig' before I finally found my mistake. regards, wmw

On Sun, Sep 4, 2011 at 2:08 PM, Gwern Branwen
As far as Awesome and StumpWM and XMonad go, I have some random notes on pros and cons which never went anywhere: http://www.gwern.net/xmonad-advocacy
I've decided to simply delete my page. Your http://sawfish.wikia.com/wiki/Comparison_of_extensible_window_managers is better, and I haven't worked on it in ages, nor did it ever become very good. Here's the final page source, if anyone cares: --- description: In what ways is the XMonad window manager better than the Awesome WM? ... # XMonad vs. Awesome ## pros 22:51:58 < jrick> in awesome, tabs are provided through a lua library called Tabulous. unfortunately, you can't have a "tab titlebar" at the top, so you don't know what other windows are in that group in awesome, if you break your configuration and reload, nothing loads up in XMonad, it just won't compile and you can continue using the old one awesome config file keeps changing awesome has many dependencies awesome is less reliable than XMonad, which hardly ever crashes awesome is GPL against XMonad's BSD ## cons XMonad users have to setup third-party statusbars like dzen, while awesome has a statusbar built in (this is related to the dependencies) XMonad uses virtual desktop model by default, while awesome uses tags; XMonad has tag extensions, though awesome statusbar apparently can embed Lua applications in it; eg. a (small) clone of Space Invaders. it can also evaluate lua code non-issues awesome uses XCB and XMonad Xlib; any speed advantage is unnoticeable by the user and swamped by just about anything else (like app rendering) XMonad requires learning at least a little haskell syntax; awesome requires Lua knowledge, but this may be more accessible # XMonad vs. StumpWM ## pros live hacking means you can hose your X session minimal type safety - try and pray? XMonad being compiled means easier and more reliable setup than StumpWM - interpreter setup can be tricky XMonad has smaller binaries and uses less memory than a SBCL with StumpWM loaded; this leads to noticeable performance differences on RAM-limited systems ## cons XMonad cannot really do live hacking different paradigms; possible to do static tiling in XMonad, but not nearly as easy as with StumpWM --- xmonad vs awesome http://www.ghosthacking.net/blog/entry/xmonad_vs_awesome/ -- gwern http://www.gwern.net
participants (5)
-
adam vogt
-
Brandon Allbery
-
Gwern Branwen
-
Teika Kazura
-
Wirt Wolff