[Xmonad] darcs patch: add SimpleStacking module to make Combo and Tabbed wor...

David Roundy droundy at darcs.net
Thu Jun 21 11:11:36 EDT 2007

Hi all,

This module gets Combo working with Tabbed again, by adding a
SimpleStacking layout modifier, which mimics the old stacking behavior,
using Spencer's latest patch.  However, this is fragile, and I think it's
fragile because of a design problem that is easily fixed--but not before
work this morning.

The trouble is that within doLayout, there's no way for a layout to modify
itself, because it can't tell which layout it is... and because it may not
be a "root" layout at all.  The solution seems simple:  redefine

data Layout a = Layout { doLayout :: Rectangle -> Stack a
                                  -> X ([(a, Rectangle)], Maybe (Layout a))
                       , modifyLayout :: SomeMessage -> X (Maybe (Layout a)) }

so doLayout can modify itself.  This makes all the Layout transformers a
little harder to write, but a helper module ought to be able to fix that.

And it makes me wonder yet again whether we should be defining a class

class Layout l a where
   doLayout :: l -> X Rectangle -> Stack a -> X ([(a, Rectangle)], Maybe (Layout a)
   modifyLayout :: l -> SomeMessage -> X (Maybe (Layout a))
   serializeLayout :: l -> String
   readLayout :: String -> Maybe (l, String) -- or some other parser-like thing

data Layout a = forall l. Layout l a => Layout a

This might lend itself to somewhat prettier Layout code that is more
"data-structure-based" rather than self-modifying-function-based.  I
imagine this would lead to friendly interfaces for easy-to-write layout


P.S. I'd be curious to see implemented a "popularity-contest" module for
xmonad once we've got serialization, which could use the logging mechanism
to report on the most frequently used layouts.  And yes, this would be in
XMonadContrib and only manually enabled.  I have no idea how many people
are actually using Tabbed, and how likely this is to break folks' Config

Thu Jun 21 07:55:00 PDT 2007  David Roundy <droundy at darcs.net>
  * add SimpleStacking module to make Combo and Tabbed work together.
  WARNING! This change will break existing Tabbed configurations.  The
  problem is that there is no way within a Layout's "doLayout" to safely
  modify the layout itself.  This makes LayoutHooks fragile, and more to the
  point, makes SimpleStacking fragile, so we can't safely define a
  tabbed' = simpleStacking . tabbed
  A workaround would have been to duplicate the tabbed code, but I'd rather
  leave the ugliness and get this fixed.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/x-darcs-patch
Size: 27552 bytes
Desc: A darcs patch for your repository!
Url : http://www.haskell.org/pipermail/xmonad/attachments/20070621/e061f3c7/attachment-0001.bin

More information about the Xmonad mailing list