darcs patch: add SimpleStacking module to make Combo and Tabbed wor...
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 modifiers. David 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 files. Thu Jun 21 07:55:00 PDT 2007 David Roundy <droundy@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.
participants (1)
-
David Roundy