
New patches:

[make square work with new doLayout.
David Roundy <droundy@darcs.net>**20070612133009] 
<
> {
hunk ./Square.hs 16
 
 import XMonad
 import Graphics.X11.Xlib
+import StackSet ( integrate )
 
 square :: Layout
hunk ./Square.hs 19
-square = Layout { doLayout = arrange, modifyLayout = message }
+square = Layout { doLayout = \r s -> arrange r (integrate s), modifyLayout = message }
  where
     arrange rect ws@(_:_) = do
         let (rest, sq) = splitSquare rect
}
[make combo sort of work with new doLayout.
David Roundy <droundy@darcs.net>**20070612133027
 For some reason (not entirely clear to me) this doesn't work properly just
 yet with the tabbed layout.  :( But at least it'll compile.  The trouble is
 that we have no way of tracking which tab ought to be visible without
 adding a *lot* of infrastructure.  I'd rather have that infrastructure in
 xmonad proper than reimplement all the focus-handling in combo, so for now
 I'll just delay upgrading my xmonad at work...
] 
<
> {
hunk ./Combo.hs 9
 module XMonadContrib.Combo where
 
 import XMonad
+import StackSet ( integrate, differentiate )
 
 combo :: [(Layout, Int)] -> Layout -> Layout
hunk ./Combo.hs 12
-combo origls super = Layout { doLayout = arrange, modifyLayout = message }
+combo origls super = Layout { doLayout = \r s -> arrange r (integrate s), modifyLayout = message }
     where arrange _ [] = return []
           arrange r [w] = return [(w,r)]
           arrange rinput origws =
hunk ./Combo.hs 16
-              do rs <- map snd `fmap` doLayout super rinput (take (length origls) origws)
+              do rs <- map snd `fmap` doLayout super rinput (differentiate $ take (length origls) origws)
                  let wss [] _ = []
                      wss [_] ws = [ws]
                      wss (n:ns) ws = take len1 ws : wss ns (drop len1 ws)
hunk ./Combo.hs 22
                          where len1 = min n (length ws - length ns)
                  out <- sequence $ zipWith3 doLayout (map fst origls) rs
-                                                     (wss (take (length rs) $ map snd origls) origws)
+                                                     (map differentiate $
+                                                      wss (take (length rs) $ map snd origls) origws)
                  return $ concat out
           message m = do msuper' <- modifyLayout super m
                          case msuper' of
}
[new module NoBorders to let a given layout have windows without borders.
David Roundy <droundy@darcs.net>**20070612133727
 This is designed for layouts like full and tabbed, where the red square
 around the screen actually conveys no information (except for weird windows
 that use the shape extension or something, so that more than one window is
 actually visible).  Save some real estate at no cost.
] 
<
> {
hunk ./MetaModule.hs 26
 import XMonadContrib.LayoutHints ()
 import XMonadContrib.Mosaic ()
 import XMonadContrib.NamedWindows ()
+import XMonadContrib.NoBorders ()
 import XMonadContrib.RotView ()
 import XMonadContrib.SimpleDate ()
 import XMonadContrib.Spiral ()
addfile ./NoBorders.hs
hunk ./NoBorders.hs 1
+module XMonadContrib.NoBorders ( noBorders, withBorder ) where
+
+-- Make a given layout display without borders.  This is useful for
+-- full-screen or tabbed layouts, where you don't really want to waste a
+-- couple of pixels of real estate just to inform yourself that the visible
+-- window has focus.
+
+-- Usage:
+
+-- import XMonadContrib.NoBorders
+
+-- layouts = [ noBorders full, tall, ... ]
+
+import Control.Monad.State ( gets )
+import Graphics.X11.Xlib
+
+import XMonad
+import Operations ( ModifyWindows(ModifyWindows) )
+import qualified StackSet as W
+import {-# SOURCE #-} Config (borderWidth)
+
+noBorders :: Layout -> Layout
+noBorders = withBorder 0
+
+withBorder :: Dimension -> Layout -> Layout
+withBorder bd l = l { doLayout = \r x -> setborders bd >> doLayout l r x
+                    , modifyLayout = ml }
+    where ml m | Just ModifyWindows == fromMessage m
+                   = do setborders borderWidth
+                        fmap (withBorder bd) `fmap` (modifyLayout l) m
+               | otherwise = fmap (withBorder bd) `fmap` (modifyLayout l) m
+
+setborders :: Dimension -> X ()
+setborders bw = withDisplay $ \d ->
+                do ws <- gets (W.integrate . W.stack . W.workspace . W.current . windowset)
+                   mapM_ (\w -> io $ setWindowBorderWidth d w bw) ws
replace ./NoBorders.hs [A-Za-z_0-9] ModifyWindows UnDoLayout
}
[add Combo and Square to MetaModule.
David Roundy <droundy@darcs.net>**20070612133753] 
<
> {
hunk ./MetaModule.hs 15
 -- commented because of conflicts with 6.6's instances import XMonadContrib.BackCompat ()
 import XMonadContrib.Circle ()
 -- TODO commented because it requires hs-boot modifications import XMonadContrib.Commands ()
+import XMonadContrib.Combo ()
 import XMonadContrib.Decoration ()
 import XMonadContrib.Dmenu ()
 import XMonadContrib.DwmPromote ()
hunk ./MetaModule.hs 31
 import XMonadContrib.RotView ()
 import XMonadContrib.SimpleDate ()
 import XMonadContrib.Spiral ()
+import XMonadContrib.Square ()
 import XMonadContrib.Submap ()
 import XMonadContrib.Tabbed ()
 import XMonadContrib.TwoPane ()
}

Context:

[add "Square" layout.
David Roundy <droundy@darcs.net>**20070612021048
 This is probably only ever useful in combination with Combo.
 It sticks one window in a square region, and makes the rest
 of the windows live with what's left (in a full-screen sense).
] 
[add new combo layout combiner.
David Roundy <droundy@darcs.net>**20070611224922] 
[In Decoration.hs, track rename of ModifyWindows
Stefan O'Rear <stefanor@cox.net>**20070612060713] 
[Refactor Decoration into a general layout-level hooks interface, and a decoration support module on top of that
Stefan O'Rear <stefanor@cox.net>**20070612060210] 
[the Stack can be Empty
Andrea Rossato <andrea.rossato@unibz.it>**20070612055144] 
[Documentation fix
Spencer Janssen <sjanssen@cse.unl.edu>**20070612035655] 
[Comment only
Spencer Janssen <sjanssen@cse.unl.edu>**20070612031305] 
[Fix LayoutHints in the presence of nonzero border widths
Stefan O'Rear <stefanor@cox.net>**20070611005407] 
[add keybinding to make aspect ratio flexible.
David Roundy <droundy@darcs.net>**20070611165915] 
[Note the modules I maintain
Spencer Janssen <sjanssen@cse.unl.edu>**20070611184830] 
[Add MetaModule
Spencer Janssen <sjanssen@cse.unl.edu>**20070611184601] 
[Updates to work with recent API changes
Spencer Janssen <sjanssen@cse.unl.edu>**20070611183439] 
[Rename safeIO to catchIO
Spencer Janssen <sjanssen@cse.unl.edu>**20070611162028] 
[add WorkspaceDir, which sets the current directory in a workspace.
David Roundy <droundy@darcs.net>**20070611154041
 Actually, it sets the current directory in a layout, since there's no way I
 know of to attach a behavior to a workspace.  This means that any terminals
 (or other programs) pulled up in that workspace (with that layout) will
 execute in that working directory.  Sort of handy, I think.
] 
[fmt 
Don Stewart <dons@cse.unsw.edu.au>**20070611053450] 
[added dynamicLogXinerama, a workspace logger that's nicer for Xinerama
Jason Creighton <jcreigh@gmail.com>**20070611051810] 
[redraw decorations on PropertyNotify
Jason Creighton <jcreigh@gmail.com>**20070611021408
 newDecoration now takes a Window parameter, which is the window the decoration
 is "for". If there is a PropertyNotify for that window, the decoration is
 redrawn.
] 
[use safe peek instead of unsafe focus
Jason Creighton <jcreigh@gmail.com>**20070611015437
 Fixes crashing bug with Xinerama where you have a tabbed layout on one screen
 and attempt to switch to an empty workspace on the other.
] 
[make Tabbed respect the y position of the layout rect (statusbar bugfix)
Jason Creighton <jcreigh@gmail.com>**20070610231510] 
[Updates for Layout API change
Spencer Janssen <sjanssen@cse.unl.edu>**20070610203840] 
[tune layout of Tabbed just a bit.
David Roundy <droundy@darcs.net>**20070610203513] 
[make Decoration set the input mask appropriately.
David Roundy <droundy@darcs.net>**20070610203451] 
[color focussed tab differently.
David Roundy <droundy@darcs.net>**20070610195743] 
[Fix name of xmonad-clock in compilation instructions.
glasser@mit.edu**20070610155204] 
[display names of windows on tabs.
David Roundy <droundy@darcs.net>**20070610163729] 
[make Decoration draw the window initially.
David Roundy <droundy@darcs.net>**20070610163651
 We still don't respond to expose events.  :(
] 
[add Decoration module to be used to easily define decorations.
David Roundy <droundy@darcs.net>**20070610153939] 
[add sketch of tabbed layout.
David Roundy <droundy@darcs.net>**20070610153926] 
[update Mosaic for latest changes.
David Roundy <droundy@darcs.net>**20070610145816] 
[make LayoutHints work with new modifyLayout (in X).
David Roundy <droundy@darcs.net>**20070610145740] 
[tag visibles with <N>
Don Stewart <dons@cse.unsw.edu.au>**20070610111931] 
[tweak pkill
Don Stewart <dons@cse.unsw.edu.au>**20070610093027] 
[greedydoc
dave@nullcube.com**20070610091056
 Add documentation on how to use GreedyView as your default workspace switcher.
] 
[use all 3 load values
Don Stewart <dons@cse.unsw.edu.au>**20070610090959] 
[Modified xmonad-clock.c to display battery information from ACPI (will work only on linux though). Also restored three load averages instead of only one.
buisse@cs.chalmers.se**20070610090228] 
[example xinitrc
Don Stewart <dons@cse.unsw.edu.au>**20070610085715] 
[update run-xmonad.sh
Don Stewart <dons@cse.unsw.edu.au>**20070610063915] 
[no need for ./scripts/xmonad-status.c, update run-xmonad.sh
Don Stewart <dons@cse.unsw.edu.au>**20070610062806] 
[add DynamicLog.hs
Don Stewart <dons@cse.unsw.edu.au>**20070610062757] 
[remove out of date ./scripts/xmonad-status.hs
Don Stewart <dons@cse.unsw.edu.au>**20070610005107] 
[improve xmonad-status.c
Don Stewart <dons@cse.unsw.edu.au>**20070609140258] 
[Add C script for parsing new logging encoding, and displaying workspace info
Don Stewart <dons@cse.unsw.edu.au>**20070609131856] 
[Submap: For creating keyboard submappings
Jason Creighton <jcreigh@gmail.com>**20070606061941] 
[make LayoutHints robust with regard to future addition of Layout fields.
David Roundy <droundy@darcs.net>**20070609173725] 
[maximize rather than minimize the rating.
David Roundy <droundy@darcs.net>**20070601183240] 
[fix error in select.
David Roundy <droundy@darcs.net>**20070601183147] 
[improve changeMosaic.
David Roundy <droundy@darcs.net>**20070601175042] 
[cut obsolete description of mosaic.
David Roundy <droundy@darcs.net>**20070609131456] 
[missing unsetenv
Don Stewart <dons@cse.unsw.edu.au>**20070609090127] 
[add tiny clock program (C) i'm using in the status bar
Don Stewart <dons@cse.unsw.edu.au>**20070609080435] 
[remove obsolete 'examples' dir
Don Stewart <dons@cse.unsw.edu.au>**20070609061450] 
[latest version of xmonad-status.hs
Don Stewart <dons@cse.unsw.edu.au>**20070609060913] 
[remove dead version
Don Stewart <dons@cse.unsw.edu.au>**20070609060857] 
[Circle layout
Peter De Wachter <pdewacht@gmail.com>**20070606064153
 Windows are arranged in a circle around the master window. Rather nice to use
 with a mouse, if you got many windows open.
 
 Screenshot: http://caladan.rave.org/circle.png
] 
[nicer format for dynamic workspaces
Don Stewart <dons@cse.unsw.edu.au>**20070606045705] 
[add script which only draws current workspace, and those with clients
Don Stewart <dons@cse.unsw.edu.au>**20070606044544] 
[In docs, change name of program from mux to xmonad-status.
glasser@mit.edu**20070605140045] 
[Add xmonad-status.hs
Don Stewart <dons@cse.unsw.edu.au>**20070605132108
 
 An external status bar client for xmonad. 
 
 See screenshots:
 
     http://www.cse.unsw.edu.au/~dons/tmp/dons-dzen-status.png
     http://www.cse.unsw.edu.au/~dons/tmp/xmonad-dzen-tags.png
 
] 
[gapless tiled layout obeying size hints
Peter De Wachter <pdewacht@gmail.com>**20070605071716] 
[Contrib package for 6.4 users
daniel@wagner-home.com**20070604225534] 
[add new LayoutHints module that makes layouts respect size hints.
David Roundy <droundy@darcs.net>**20070604213716] 
[XMonadContrib.ReadMap: a Read instance of Map for GHC 6.4 users
daniel@wagner-home.com**20070602064318] 
[keybindings to warp pointer to window center
daniel@wagner-home.com**20070602062328] 
[XMonadContrib.Commands: for workspace and screen commands, leave out W/S tag
glasser@mit.edu**20070601161351] 
[start switching over to a Monte Carlo algorithm for Mosaic
David Roundy <droundy@darcs.net>**20070601170505] 
[New contrib module: run internal xmonad commands via dmenu
glasser@mit.edu**20070601043849] 
[Note that my xinerama patch is now in dzen.
glasser@mit.edu**20070601041112] 
[Rescreen is in main xmonad now
Spencer Janssen <sjanssen@cse.unl.edu>**20070528050656] 
[new layout algorithm for Mosaic.
David Roundy <droundy@darcs.net>**20070527191153] 
[replace "name" in NamedWindow with a Show instance.
David Roundy <droundy@darcs.net>**20070526185114] 
[[Spiral] blend in the scale factor so it doesn't have any effect on the smallest windows
joe.thornber@gmail.com**20070525032732] 
[[Spiral] last rect takes all available space
joe.thornber@gmail.com**20070524120239] 
[[Spiral] Introduce a simpler Rect data type to remove a lot of the fromIntegrals
joe.thornber@gmail.com**20070524100423] 
[[Spiral] divideRects now takes a list of directions to split in
joe.thornber@gmail.com**20070524090211] 
[[Spiral] misc tidying
joe.thornber@gmail.com**20070524085537] 
[[Spiral] remove old spiral code
joe.thornber@gmail.com**20070524084805] 
[[Spiral] add fibonacci spiral
joe.thornber@gmail.com**20070524084423] 
[Allow clients of NamedWindows to get at the name.
glasser@mit.edu**20070523184251] 
[dzen module (with xinerama support, which requires glasser's Xinerama patch to dzen)
glasser@mit.edu**20070523184315] 
[Extract NamedWindow support from Mosaic into its own module
glasser@mit.edu**20070523155855] 
[remove SwapFocus (which is no longer possible)
David Roundy <droundy@darcs.net>**20070523153841
 This module depended on the focus stack.
] 
[Fix Spiral's module name
Spencer Janssen <sjanssen@cse.unl.edu>**20070522170909] 
[[SPIRAL] add spiral tiling layout
joe.thornber@gmail.com**20070522062537] 
[Make RotView compile.
Miikka Koskinen <arcatan@kapsi.fi>**20070522075338
 
 As I'm not a Xinerama user, I'm not sure if rotView should consider only
 hidden workspaces or also visible but not focused workspaces. I thought hidden
 workspaces only would be more logical.
] 
[bug fix in DwmPromote. whoops.
Miikka Koskinen <arcatan@kapsi.fi>**20070522062118] 
[make FindEmptyWorkspace compile
Miikka Koskinen <arcatan@kapsi.fi>**20070521123239] 
[make DwmPromote compile
Miikka Koskinen <arcatan@kapsi.fi>**20070521123140] 
[updated Dmenu.hs to work with zipper StackSet
Jason Creighton <jcreigh@gmail.com>**20070521233947] 
[Add GreedyView
Spencer Janssen <sjanssen@cse.unl.edu>**20070521220048] 
[Rescreen: collects new screen information
Spencer Janssen <sjanssen@cse.unl.edu>**20070521164808] 
[Fixes for windowset -> workspace rename
Spencer Janssen <sjanssen@cse.unl.edu>**20070521042118] 
[TwoPane: hide windows that aren't in view
Spencer Janssen <sjanssen@cse.unl.edu>**20070518224240] 
[make Mosaic even less picky by default.
David Roundy <droundy@darcs.net>**20070516175554] 
[add clear window message in Mosaic.
David Roundy <droundy@darcs.net>**20070516175518] 
[Comment only
Spencer Janssen <sjanssen@cse.unl.edu>**20070517211003] 
[Add instructions for TwoPane
Spencer Janssen <sjanssen@cse.unl.edu>**20070517210206] 
[Add TwoPane
Spencer Janssen <sjanssen@cse.unl.edu>**20070517195618] 
[throttle the exponential expense when many windows are present.
David Roundy <droundy@darcs.net>**20070516022123] 
[XMonadContrib.FindEmptyWorkspace
Miikka Koskinen <arcatan@kapsi.fi>**20070513184338
 
 With this module you can find empty workspaces, view them and tag windows to
 them.
] 
[make DwmPromote compile
Miikka Koskinen <arcatan@kapsi.fi>**20070513184254] 
[make DwmPromote compile again
Miikka Koskinen <arcatan@kapsi.fi>**20070510154158] 
[make DwmPromote compile
Miikka Koskinen <arcatan@kapsi.fi>**20070503105236] 
[make mosaic configure windows by name rather than by Window.
David Roundy <droundy@darcs.net>**20070512215644
 Note that this is still pretty flawed.  Often window names change, and the
 layout then stagnates a bit.  Gimp, for example, opens most its windows
 with the same name before renaming them, so you have to hit mod-return or
 something to force a doLayout.  Also, gimp still overrides xmonad regarding
 the size of its main window.  :(
] 
[add SwapFocus.
David Roundy <droundy@darcs.net>**20070512191315] 
[make rotView only consider non-visible workspaces (Xinerama)
Jason Creighton <jcreigh@gmail.com>**20070510012059] 
[fix commend in RotView.
David Roundy <droundy@darcs.net>**20070505185654] 
[switch to Message type for layout messages
Don Stewart <dons@cse.unsw.edu.au>**20070505014332] 
[Fix instructions in Mosaic.
Chris Mears <chris@cmears.id.au>**20070503222345] 
[-Wall police
Spencer Janssen <sjanssen@cse.unl.edu>**20070503211700] 
[Make RotView build, and add a brief description.
Chris Mears <chris@cmears.id.au>**20070503104234] 
[comment: Gave URL to xinerama-enabled dmenu patch
Jason Creighton <jcreigh@gmail.com>**20070503053133] 
[add Mosaic layout.
David Roundy <droundy@darcs.net>**20070503151024] 
[Put dmenu in X too
Spencer Janssen <sjanssen@cse.unl.edu>**20070503053727] 
[Add dmenu (thanks jcreigh)
Spencer Janssen <sjanssen@cse.unl.edu>**20070503052225] 
[add RotView module.
David Roundy <droundy@darcs.net>**20070421233838] 
[XMonadContrib.DwmPromote: dwm-like promote
Miikka Koskinen <arcatan@kapsi.fi>**20070501082031
 I like the way dwm's equivalent to xmonad's promote works, so I
 implemented dwmpromote.
] 
[add simple date example
Don Stewart <dons@cse.unsw.edu.au>**20070429064013] 
[more details
Don Stewart <dons@cse.unsw.edu.au>**20070429061426] 
[add readme
Don Stewart <dons@cse.unsw.edu.au>**20070429061329] 
[Initial import of xmonad contributions
Don Stewart <dons@cse.unsw.edu.au>**20070429061150] 
Patch bundle hash:
febc8e48072ad88f3395305fc70abfd19dcf18d6
