-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


New patches:

[EwmhDesktops initial patch
mail@joachim-breitner.de**20071005222540
 What works so far, quit hackerish:
  * Number of Workspaces
  * Active current workspace
  * Names of workspaces
 More to come..
] {
addfile ./EwmhDesktops.hs
hunk ./EwmhDesktops.hs 1
+module XMonadContrib.EwmhDesktops (ewmhDesktopsLogHook) where
+
+import Data.Maybe   (listToMaybe,fromJust)
+import Data.List  (elemIndex, sortBy)
+import Data.Ord ( comparing)
+
+import Control.Monad.Reader
+import XMonad
+import qualified StackSet as W
+import System.IO
+import Graphics.X11.Xlib
+import Graphics.X11.Xlib.Extras
+
+ewmhDesktopsLogHook :: X ()
+ewmhDesktopsLogHook = withDisplay $ \dpy -> withWindowSet $ \s -> do
+	-- Number of Workspaces
+	-- Bad hack because xmonad forgets the original order of things, it seems
+	let ws = sortBy (comparing W.tag) $ W.workspaces s
+
+	let n = fromIntegral (length ws)
+        a <- getAtom "_NET_NUMBER_OF_DESKTOPS"
+        c <- getAtom "CARDINAL"
+	r <- asks theRoot
+	io $ changeProperty32 dpy r a c propModeReplace [n]
+
+	-- Names thereof
+	a <- getAtom "_NET_DESKTOP_NAMES"
+	c <- getAtom "UTF8_STRING"
+	let names = map (fromIntegral.fromEnum) $
+			concatMap (("Workspace "++) . (++['\0']). W.tag) ws
+	io $ changeProperty8 dpy r a c propModeReplace names
+	
+	-- Current desktop
+	a <- getAtom "_NET_CURRENT_DESKTOP"
+	c <- getAtom "CARDINAL"
+	let Just n = W.lookupWorkspace 0 s
+	let Just i = elemIndex n $ map W.tag ws
+	io $ changeProperty32 dpy r a c propModeReplace [fromIntegral i]
+	
+	return ()
+
+
}

[EwmhWindows wrap up for inclusion
mail@joachim-breitner.de**20071006110529
 Now with haddock documentation, a proper header and nicer, warningfree code, ready
 for a first release and inclusion in XMonadConrib. It works for me, but needs more
 testing. If you run xmonad with gnome-panel or something similar, please try it.
 
 Thanks,
 Joachim
] {
hunk ./EwmhDesktops.hs 1
- -module XMonadContrib.EwmhDesktops (ewmhDesktopsLogHook) where
+-----------------------------------------------------------------------------
+-- |
+-- Module       : XMonadContrib.EwmhDesktops
+-- Copyright    : (c) Joachim Breitner <mail@joachim-breitner.de>
+-- License      : BSD
+--
+-- Maintainer   : Joachim Breitner <mail@joachim-breitner.de>
+-- Stability    : unstable
+-- Portability  : unportable
+--
+-- Makes xmonad use the EWMH hints to tell panel applications about its
+-- workspaces and the windows therein.
+-----------------------------------------------------------------------------
+module XMonadContrib.EwmhDesktops (
+	-- * Usage
+	-- $usage
+	ewmhDesktopsLogHook
+	) where
hunk ./EwmhDesktops.hs 20
- -import Data.Maybe   (listToMaybe,fromJust)
- -import Data.List  (elemIndex, sortBy)
- -import Data.Ord ( comparing)
+import Data.List	(elemIndex, sortBy)
+import Data.Ord 	(comparing)
+import Data.Maybe	(fromMaybe)
hunk ./EwmhDesktops.hs 27
- -import System.IO
hunk ./EwmhDesktops.hs 30
+-- $usage
+-- Add the imports to your configuration file and add the logHook:
+--
+-- > import XMonadContrib.EwmhDesktops
+--
+-- > logHook :: X()
+-- > logHook = do ewmhDesktopsLogHook
+-- >              return ()
+
+-- %import XMonadContrib.EwmhDesktops
+-- %def -- comment out default logHook definition above if you uncomment this:
+-- %def logHook = ewmhDesktopsLogHook
+
+
+-- |
+-- Notifies pagers and window lists, such as those in the gnome-panel
+-- of the current state of workspaces and windows.
hunk ./EwmhDesktops.hs 48
- -ewmhDesktopsLogHook = withDisplay $ \dpy -> withWindowSet $ \s -> do
- -	-- Number of Workspaces
+ewmhDesktopsLogHook = withWindowSet $ \s -> do
hunk ./EwmhDesktops.hs 50
+	-- see http://code.google.com/p/xmonad/issues/detail?id=53
hunk ./EwmhDesktops.hs 52
+	let wins = W.allWindows s
hunk ./EwmhDesktops.hs 54
- -	let n = fromIntegral (length ws)
- -        a <- getAtom "_NET_NUMBER_OF_DESKTOPS"
- -        c <- getAtom "CARDINAL"
- -	r <- asks theRoot
- -	io $ changeProperty32 dpy r a c propModeReplace [n]
+	-- Number of Workspaces
+	setNumberOfDesktops (length ws)
hunk ./EwmhDesktops.hs 58
- -	a <- getAtom "_NET_DESKTOP_NAMES"
- -	c <- getAtom "UTF8_STRING"
- -	let names = map (fromIntegral.fromEnum) $
- -			concatMap (("Workspace "++) . (++['\0']). W.tag) ws
- -	io $ changeProperty8 dpy r a c propModeReplace names
+	setDesktopNames (map W.tag ws)
hunk ./EwmhDesktops.hs 61
+	fromMaybe (return ()) $ do
+		n <- W.lookupWorkspace 0 s
+		i <- elemIndex n $ map W.tag ws
+		return $ setCurrentDesktop i
+
+	setClientList wins
+
+	-- Per window Desktop
+	forM (zip ws [(0::Int)..]) $ \(w, wn) ->
+		forM (W.integrate' (W.stack w)) $ \win -> do 
+			setWindowDesktop win wn
+	
+	return ()
+
+
+setNumberOfDesktops :: (Integral a) => a -> X ()
+setNumberOfDesktops n = withDisplay $ \dpy -> do 
+        a <- getAtom "_NET_NUMBER_OF_DESKTOPS"
+        c <- getAtom "CARDINAL"
+	r <- asks theRoot
+	io $ changeProperty32 dpy r a c propModeReplace [fromIntegral n]
+
+setCurrentDesktop :: (Integral a) => a -> X ()
+setCurrentDesktop i = withDisplay $ \dpy -> do
hunk ./EwmhDesktops.hs 87
- -	let Just n = W.lookupWorkspace 0 s
- -	let Just i = elemIndex n $ map W.tag ws
+	r <- asks theRoot
hunk ./EwmhDesktops.hs 89
- -	
- -	return ()
hunk ./EwmhDesktops.hs 90
+setDesktopNames :: [String] -> X ()
+setDesktopNames names = withDisplay $ \dpy -> do
+	-- Names thereof
+	r <- asks theRoot
+	a <- getAtom "_NET_DESKTOP_NAMES"
+	c <- getAtom "UTF8_STRING"
+	let names' = map (fromIntegral.fromEnum) $
+			concatMap (("Workspace "++) . (++['\0'])) names
+	io $ changeProperty8 dpy r a c propModeReplace names'
hunk ./EwmhDesktops.hs 100
+setClientList :: [Window] -> X ()
+setClientList wins = withDisplay $ \dpy -> do
+	-- (What order do we really need? Something about age and stacking)
+	r <- asks theRoot
+	c <- getAtom "WINDOW"
+	a <- getAtom "_NET_CLIENT_LIST"
+	io $ changeProperty32 dpy r a c propModeReplace wins
+	a' <- getAtom "_NET_CLIENT_LIST_STACKING"
+	io $ changeProperty32 dpy r a' c propModeReplace wins
+
+setWindowDesktop :: (Integral a) => Window -> a -> X ()
+setWindowDesktop win i = withDisplay $ \dpy -> do 
+	a <- getAtom "_NET_WM_DESKTOP"
+	c <- getAtom "CARDINAL"
+	io $ changeProperty32 dpy win a c propModeReplace [fromIntegral i]
hunk ./MetaModule.hs 37
+import XMonadContrib.EwmhDesktop ()
hunk ./MetaModule.hs 79
+
}

Context:

[Maximize layout modifier
Jamie Webb**20071004061202] 
[Add ^K and ^U support to XPrompt
Eric Mertens <emertens@galois.com>**20071002210814] 
[Rename ResizableTile.Tall to ResizableTall
Jamie Webb**20071003023000
 Having two layouts named Tall was upsetting the deserialization code.
] 
[MosaicAlt take 2
Jamie Webb**20071003162533] 
[Mark modules that haven't been ported to the new API yet.
Spencer Janssen <sjanssen@cse.unl.edu>**20071003164516
 These need to be ported or removed before the 0.4 release.
] 
[More LANGUAGE pragmas
Spencer Janssen <sjanssen@cse.unl.edu>**20071003164257] 
[Add XPropManage to MetaModule
Spencer Janssen <sjanssen@cse.unl.edu>**20071003164236] 
[add swapping capability in WindowNavigation.
David Roundy <droundy@darcs.net>**20071003151755
 This allows you to reorder your windows geometrically, by
 swapping the currently focussed window with ones that are
 up/down/right/left of it.  The idea is that we should be
 able to manipulate windows based on the visual layout of
 the screen rather than some (possibly obscure) logical ordering.
] 
[export constructor to make ThreeColumns layout usable again
Daniel Neri <daniel.neri@sigicom.se>**20071003093103] 
[WindowNavigation: add configurable colors and the possibility to turn them off
Andrea Rossato <andrea.rossato@unibz.it>**20071003090017] 
[Add SwapWorkspaces to MetaModule
Spencer Janssen <sjanssen@cse.unl.edu>**20071003163405] 
[add SwapWorkspaces (to reorder them on your number keys)
Devin Mullins <me@twifkak.com>**20071002212407] 
[Layout -> LayoutClass for ResizableTile and MosaicAlt
Jamie Webb**20071003010849] 
[NoBorders: reduce flicker
Spencer Janssen <sjanssen@cse.unl.edu>**20071002213053] 
[TagWindows
Karsten Schoelzel <kuser@gmx.de>**20071002190526
 
 Functions to work with window tags, including a XPrompt interface.
 These are stored in the window property "_XMONAD_TAGS"
 
 Adding also functions shiftHere and shiftToScreen (move to another module?).
] 
[Add XPropManage, a manageHook using XProperties
Karsten Schoelzel <kuser@gmx.de>**20071002190231] 
[make Spiral work with new layout class.
David Roundy <droundy@darcs.net>**20071002164735] 
[some renaming of classes and data types.
David Roundy <droundy@darcs.net>**20070929191238] 
[SimpleStacking is deprecated
Spencer Janssen <sjanssen@cse.unl.edu>**20071002185604] 
[Make Tabbed use XUtils.releaseFont
Andrea Rossato <andrea.rossato@unibz.it>**20071002062709] 
[XUtils: added releaseFont
Andrea Rossato <andrea.rossato@unibz.it>**20071002062640] 
[An alternative mosaic layout implementation
Jamie Webb**20071002011716] 
[Fix infinite loop in ResizableTile serialization
Jamie Webb**20071002001254] 
[Use newtype deriving for Invisible
Spencer Janssen <sjanssen@cse.unl.edu>**20071001151555] 
[Tabbed: updated usage information
Andrea Rossato <andrea.rossato@unibz.it>**20071001082219] 
[XMonadContrib.ResizableTile in darcs patch.
matsuyama3@ariel-networks.com**20071001091411
 
 I have fixed error "" to return Nothing. Thanks Andrea.
 
 
 
] 
[Commands: added recent layout commands
Andrea Rossato <andrea.rossato@unibz.it>**20070930213225] 
[Removed fromIMaybe from Tabbed ad added it to Invisible
Andrea Rossato <andrea.rossato@unibz.it>**20070930181912] 
[Tabbed: reintroduced shrinker configuration option and removed the unneeded Read instance
Andrea Rossato <andrea.rossato@unibz.it>**20070930131936] 
[Tabbed: moved string positioning to XUtils
Andrea Rossato <andrea.rossato@unibz.it>**20070930095441] 
[refactor paintAndWrite to take the alignment and hide string positioning
Andrea Rossato <andrea.rossato@unibz.it>**20070930095215] 
[make DraPane use XUtils
Andrea Rossato <andrea.rossato@unibz.it>**20070929172849] 
[make Tabbed use XUtils
Andrea Rossato <andrea.rossato@unibz.it>**20070929172823] 
[Added XUtils: a library for drawing
Andrea Rossato <andrea.rossato@unibz.it>**20070929172754] 
[enable color setting in WindowNavigation.
David Roundy <droundy@darcs.net>**20070929114531
 This is still somewhat experimental, comments welcome.
] 
[Add smartBorders
Spencer Janssen <sjanssen@cse.unl.edu>**20070929010946] 
[Give Invisible a definition for fail.
Spencer Janssen <sjanssen@cse.unl.edu>**20070929051527
 The default definition of fail calls error.  This is very bad, as we rely on a
 non-bottom result.  We should consider moving to MonadZero, to be on the safe
 side.
] 
[Tabbed: fixed a bug: when only one window is in the stack doLayout must still return a Tabbed (I Nothing) TConf
Andrea Rossato <andrea.rossato@unibz.it>**20070928223136] 
[Added Invisible to store layout state
Andrea Rossato <andrea.rossato@unibz.it>**20070928190107
 Invisible is a data type to store information that will be lost when
 restarting XMonad (the idea came from David Roundy)
] 
[WindowNavigation now uses Invisible (plus some vertical alignement)
Andrea Rossato <andrea.rossato@unibz.it>**20070928185907] 
[DragPane now uses Invisible
Andrea Rossato <andrea.rossato@unibz.it>**20070928185832] 
[Tabbed now uses Invisible
Andrea Rossato <andrea.rossato@unibz.it>**20070928185808] 
[add new WindowNavigation module.
David Roundy <droundy@darcs.net>**20070928131906] 
[Tabbed: removed two little bugs due to the mess during the transition (my fault, sorry ;)
Andrea Rossato <andrea.rossato@unibz.it>**20070928085513] 
[DeManage.hs: doesn't need -fglasgow-exts.
Joachim Fasting <joachim.fasting@gmail.com>**20070928083639] 
[Use LANGUAGE pragmas over -fglasgow-exts
Spencer Janssen <sjanssen@cse.unl.edu>**20070928181614] 
[remove SetLayout.
David Roundy <droundy@darcs.net>**20070928015855] 
[Various fixes to NoBorders.  Hopefully fixes bug #42
Spencer Janssen <sjanssen@cse.unl.edu>**20070928174615] 
[Use LANGUAGE pragmas
Spencer Janssen <sjanssen@cse.unl.edu>**20070928174602] 
[LayoutModifier: call unhook after releaseResources
Spencer Janssen <sjanssen@cse.unl.edu>**20070928174510] 
[DynamicLog: sort first by index in the workspaces list, then by tag name
Spencer Janssen <sjanssen@cse.unl.edu>**20070928144900] 
[Make modifier descriptions prettier
Spencer Janssen <sjanssen@cse.unl.edu>**20070928053257] 
[Give Hinted a nice description
Spencer Janssen <sjanssen@cse.unl.edu>**20070928053121] 
[LayoutModifier should have descriptions too
Spencer Janssen <sjanssen@cse.unl.edu>**20070928053106] 
[Tabbed: give a nice description
Spencer Janssen <sjanssen@cse.unl.edu>**20070928052608] 
[DynamicLog: print a description of the current layout
Spencer Janssen <sjanssen@cse.unl.edu>**20070928051606] 
[Update docs
Spencer Janssen <sjanssen@cse.unl.edu>**20070928034350] 
[Add simpler layoutHints
Spencer Janssen <sjanssen@cse.unl.edu>**20070928034008] 
[NewTabbed: after a ReleaseResources we should return Tabbed Nothing...
Andrea Rossato <andrea.rossato@unibz.it>**20070928011645] 
[Move NewTabbed to Tabbed
Spencer Janssen <sjanssen@cse.unl.edu>**20070927231840] 
[Remove Tabbed.hs
Spencer Janssen <sjanssen@cse.unl.edu>**20070927231002] 
[Remove Decoration.hs
Spencer Janssen <sjanssen@cse.unl.edu>**20070927230947] 
[DragPane:just code formatting
Andrea Rossato <andrea.rossato@unibz.it>**20070927083814] 
[NewTabbed: fixes a (reintroduced) bug and some code formatting
Andrea Rossato <andrea.rossato@unibz.it>**20070927083551
 - The InvisibleMaybe patch reintroduced the rectangle bug.
 - Some code formatting
 - Corrected usage information
] 
[make NewTabbed use InvisibleMaybe to hide its cache.
David Roundy <droundy@darcs.net>**20070926202330] 
[make DragPane code a bit more compact.
David Roundy <droundy@darcs.net>**20070926191656] 
[hide implementation of DragPane from users.
David Roundy <droundy@darcs.net>**20070926191630] 
[make DragPane a bit more succinct.
David Roundy <droundy@darcs.net>**20070926190900] 
[make DragPane work with the new Layout class
Andrea Rossato <andrea.rossato@unibz.it>**20070926190439] 
[make MagicFocus work with the new Layout class
Andrea Rossato <andrea.rossato@unibz.it>**20070926114307] 
[NewTabbed: we must check if the sceen rectangle changed
Andrea Rossato <andrea.rossato@unibz.it>**20070926114056
 - Check if rectangle changed
 - removed orphan instances warnings
 - some code formatting
] 
[fix DynamicWorkspaces.
David Roundy <droundy@darcs.net>**20070925220659] 
[Remove LayoutChoice, this functionality is in the core
Spencer Janssen <sjanssen@cse.unl.edu>**20070925214912] 
[new SetLayout module.
David Roundy <droundy@darcs.net>**20070925205333] 
[make Accordian use pureLayout.
David Roundy <droundy@darcs.net>**20070925192117] 
[modifyLayout -> handleMessage.
David Roundy <droundy@darcs.net>**20070925182930] 
[Make Square work with class.
David Roundy <droundy@darcs.net>**20070925174446] 
[make Combo work with class
David Roundy <droundy@darcs.net>**20070925174417] 
[NewTabbed: fixed a bug and some code formatting
Andrea Rossato <andrea.rossato@unibz.it>**20070925133749
 - Since now Operations.windows doesn't call sendMessage UnDoLayout
 anymore, doLayout must take care of destroying all tabs when only one
 window ( or none) is left on the workspace.
 - Some code formatting.
] 
[make Roledex work with Layout class
Andrea Rossato <andrea.rossato@unibz.it>**20070925153237] 
[make Accordion work with Layout class
Andrea Rossato <andrea.rossato@unibz.it>**20070925152307] 
[fix embarrassing bugs in LayoutModifier.
David Roundy <droundy@darcs.net>**20070924195726] 
[Added a NewTabbed module with a new tabbed layout to test
Andrea Rossato <andrea.rossato@unibz.it>**20070924193419] 
[LayoutModifier updated to use LayoutMessages
Andrea Rossato <andrea.rossato@unibz.it>**20070924193345] 
[move ThreeCol over to new class.
David Roundy <droundy@darcs.net>**20070924191632] 
[Use the new modifiers in LayoutHints
Spencer Janssen <sjanssen@cse.unl.edu>**20070924062000] 
[Use the new layout switcher in Commands
Spencer Janssen <sjanssen@cse.unl.edu>**20070924060541] 
[Follow kind changes in FindEmptyWorkspace
Spencer Janssen <sjanssen@cse.unl.edu>**20070924055928] 
[update WorkspaceDir.
David Roundy <droundy@darcs.net>**20070923221456] 
[rename LayoutHelpers to LayoutModifier.
David Roundy <droundy@darcs.net>**20070923215956] 
[convert LayoutScreens to class.
David Roundy <droundy@darcs.net>**20070923215942] 
[Update NoBorders and LayoutHelpers.
David Roundy <droundy@darcs.net>**20070923192640] 
[add a hook to LayoutHelpers.
David Roundy <droundy@darcs.net>**20070923121723] 
[use default modifyLayout in Circle.
David Roundy <droundy@darcs.net>**20070923115257] 
[update LayoutHelpers to work with new Layout class.
David Roundy <droundy@darcs.net>**20070923114929] 
[make TwoPane work with Layout class
Andrea Rossato <andrea.rossato@unibz.it>**20070922124210] 
[Circle: must export type constructor
Andrea Rossato <andrea.rossato@unibz.it>**20070922124126] 
[make Circle work with Layout class.
David Roundy <droundy@darcs.net>**20070921215525] 
[Cope with StackSet export changes
Spencer Janssen <sjanssen@cse.unl.edu>**20070924091031] 
[Rolodex.hs: add missing type signature.
Joachim Fasting <joachim.fasting@gmail.com>**20070919215436
 div' is only used with Dimension, used Integral to keep it general.
] 
[Warp.hs: remove seemingly unused code.
Joachim Fasting <joachim.fasting@gmail.com>**20070919214634] 
[CopyWindow.hs: -Wall police.
Joachim Fasting <joachim.fasting@gmail.com>**20070919214556] 
[CopyWindow.copy: remove seemingly unnecessary parameter from helper func.
Joachim Fasting <joachim.fasting@gmail.com>**20070919214526] 
[DirectoryPrompt.hs: add missing type signature.
Joachim Fasting <joachim.fasting@gmail.com>**20070919213736] 
[LayoutChoice.hs: update module header.
Joachim Fasting <joachim.fasting@gmail.com>**20070919213101] 
[LayoutChoice.hs: add LANGUAGE pragma.
Joachim Fasting <joachim.fasting@gmail.com>**20070919212815] 
[SinkAll.hs: -Wall police.
Joachim Fasting <joachim.fasting@gmail.com>**20070919212359] 
[XPrompt.hs: replace 'borderWidth' with 'borderPixel'
gwern0@gmail.com**20070918162950
 borderWidth is already defined in Config.hs. Thus, if one attempted to use a prompt configuration different than defaultXPConfig, and one defined it in one's Config.hs where it should be, then the borderWidth field would cause a warning by -Wall, since borderWidth is already a name being used by XMonad at large.
] 
[Operations.sink is gone
Spencer Janssen <sjanssen@cse.unl.edu>**20070917214113] 
[Match 'Remove Operations functions which have StackSet equivalents' from the core
Spencer Janssen <sjanssen@cse.unl.edu>**20070917213329] 
[SshPrompt.hs: fix some copy/paste errors, rebind sshPrompt to not conflict with xmonadPrompt
Brandon S Allbery KF8NH <allbery@ece.cmu.edu>**20070916182520
 Just a minor patch to the comments/documentation, which was clearly copied
 unchanged from ShellPrompt.hs.
] 
[make fixedLayout accept a list of Rectangles.
David Roundy <droundy@darcs.net>**20070911134845
 This works nicely for describing a fixed xinerama-like layout.
 (e.g. when using two distinct VNC clients to log into a single
 VNC server and attain multiheadedness).
] 
[Fixing some typos and grammar in documentation.
Michael Fellinger <m.fellinger@gmail.com>**20070911023158] 
[Typo in Tabbed.hs documentation
Michael Fellinger <m.fellinger@gmail.com>**20070911021815] 
[ssh-global-known-hosts
Brandon S Allbery KF8NH <allbery@ece.cmu.edu>**20070909222432
 Add support for global ssh known hosts file, which is checked for via
 $SSH_KNOWN_HOSTS or a standard list of locations.  This is stripped of
 comments and hashed hosts, combined with the local hosts file (which is
 trated the same way), and duplicates eliminated.
] 
[add LayoutChoice module.
David Roundy <droundy@darcs.net>**20070906154955] 
[FloatKeys.hs: needs -fglasgow-exts to compile.
Joachim Fasting <joachim.fasting@gmail.com>**20070909144215] 
[DragPane.hs: needs -fglasgow-exts to compile.
Joachim Fasting <joachim.fasting@gmail.com>**20070909144205] 
[Unify Drag(UpDown)Pane
Karsten Schoelzel <kuser@gmx.de>**20070904210312] 
[add function and comment assisting use in resizing the screen.
David Roundy <droundy@darcs.net>**20070906125543] 
[Add FloatKeys for moving and resizing of floating windows with the keyboard
Karsten Schoelzel <kuser@gmx.de>**20070905212531] 
[Fix FlexibleResize for change in applySizeHints
Karsten Schoelzel <kuser@gmx.de>**20070905193926] 
[make dragPane handle thinner.
David Roundy <droundy@darcs.net>**20070905124139] 
[cleanup in WorkspaceDir.
David Roundy <droundy@darcs.net>**20070827185833] 
[new SetWMName module, useful for working around problems running Java GUI applications.
Ivan Tarasov <Ivan.Tarasov@gmail.com>**20070826004411] 
[remove LayoutHooks module (which is unused).
David Roundy <droundy@darcs.net>**20070823154520] 
[cleanup in DwmPromote.
David Roundy <droundy@darcs.net>**20070823155437] 
[cleanup in ViewPrev.
David Roundy <droundy@darcs.net>**20070823155405] 
[clean up CopyWindow.
David Roundy <droundy@darcs.net>**20070823155912] 
[Add CycleWS to MetaModule
Spencer Janssen <sjanssen@cse.unl.edu>**20070905203137] 
[CycleWS: a couple of simple functions to cycle between workspaces
Andrea Rossato <andrea.rossato@unibz.it>**20070821061132] 
[make Contrib use WorkspaceId = type String.
David Roundy <droundy@darcs.net>**20070820113813] 
[Add HintedTile docstring
Spencer Janssen <sjanssen@cse.unl.edu>**20070905200310] 
[Docstring parser for generating xmonad build configs with default settings for extensions
Alex Tarkovsky <alextarkovsky@gmail.com>**20070905200128] 
[docs not generated in DragPane.hs
Don Stewart <dons@cse.unsw.edu.au>**20070904232447] 
[TAG 0.3
Spencer Janssen <sjanssen@cse.unl.edu>**20070905022947] 
Patch bundle hash:
aa3859d54e5a74571cd6d67bca801c5500f52c13
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iQCVAwUBRwdsiL8Zfhn2SkeXAQKRPAQAlWRSJiFWnC8W6/FmO2Z162HlLH2r8vo6
cWH2/aLCALkeh3xaRD4BCYIFi8kKum/sRxGZjkppQx33U+gcsAH9iCSqXcKYTtHG
Ppy2ae0uRbuXNfXbccxFevqk/eZ8kAx/Wp07uzCTE20RVzNIC0DpVo3dMoB358Pv
faM/PDDjsCU=
=6iYX
-----END PGP SIGNATURE-----
