From 5e0a65ea631fcf63164662a05bd196a90a25fbf8 Mon Sep 17 00:00:00 2001
From: Adam Vogt <vogt.adam@gmail.com>
Date: Mon, 12 Oct 2009 04:49:18 +0000
Subject: [PATCH] Update D.Extending module lists with help of a script (also
 added)

---
 XMonad/Doc/Extending.hs     | 721 +++++++++++++++++++++++++++---------
 scripts/grabDescriptions.hs |  37 ++
 2 files changed, 593 insertions(+), 165 deletions(-)
 create mode 100644 scripts/grabDescriptions.hs

diff --git a/XMonad/Doc/Extending.hs b/XMonad/Doc/Extending.hs
index 39e11a23..88c2c805 100644
--- a/XMonad/Doc/Extending.hs
+++ b/XMonad/Doc/Extending.hs
@@ -116,81 +116,175 @@ beyond the standard keybindings provided by xmonad.
 See "XMonad.Doc.Extending#Editing_key_bindings" for instructions on how to
 edit your key bindings.
 
-* "XMonad.Actions.Commands": running internal xmonad actions
-  interactively.
+* "XMonad.Actions.Commands":
+    Allows you to run internal xmonad commands (X () actions) using
+    a dmenu menu in addition to key bindings.  Requires dmenu and
+    the Dmenu XMonad.Actions module.
 
-* "XMonad.Actions.ConstrainedResize": an aspect-ratio-constrained
-  window resizing mode.
+* "XMonad.Actions.ConstrainedResize":
+    Lets you constrain the aspect ratio of a floating
+    window (by, say, holding shift while you resize).
+    Useful for making a nice circular XClock window.
 
-* "XMonad.Actions.CopyWindow": duplicating windows on multiple
-  workspaces.
+* "XMonad.Actions.CopyWindow":
+    Provides bindings to duplicate a window on multiple workspaces,
+    providing dwm-like tagging functionality.
 
-* "XMonad.Actions.CycleSelectedLayouts": bind a key to cycle through a
-  particular subset of your layouts.
+* "XMonad.Actions.CycleRecentWS":
+    Provides bindings to cycle through most recently used workspaces
+    with repeated presses of a single key (as long as modifier key is
+    held down). This is similar to how many window managers handle
+    window switching.
 
-* "XMonad.Actions.CycleWS": move between workspaces in various ways.
+* "XMonad.Actions.CycleSelectedLayouts":
+    This module allows to cycle through the given subset of layouts.
 
-* "XMonad.Actions.DeManage": cease management of a window without
-  unmapping it.
+* "XMonad.Actions.CycleWS":
+    Provides bindings to cycle forward or backward through the list of
+    workspaces, to move windows between workspaces, and to cycle
+    between screens. Replaces "XMonad.Actions.RotView".
 
-* "XMonad.Actions.DwmPromote": dwm-like master window swapping.
+* "XMonad.Actions.CycleWindows":
+    Provides bindings to cycle windows up or down on the current workspace
+    stack while maintaining focus in place.
 
-* "XMonad.Actions.DynamicWorkspaces": add, delete, and rename workspaces.
+* "XMonad.Actions.DeManage":
+    This module provides a method to cease management of a window
+    without unmapping it. "XMonad.Hooks.ManageDocks" is a
+    more automated solution if your panel supports it.
 
-* "XMonad.Actions.FindEmptyWorkspace": find an empty workspace.
+* "XMonad.Actions.DwmPromote":
+    Dwm-like swap function for xmonad.
+    Swaps focused window with the master window. If focus is in the
+    master, swap it with the next window in the stack. Focus stays in the
+    master.
 
-* "XMonad.Actions.FlexibleManipulate": move\/resize windows without
-  warping the mouse.
+* "XMonad.Actions.DynamicWorkspaces":
+    Provides bindings to add and delete workspaces.  Note that you may only
+    delete a workspace that is already empty.
 
-* "XMonad.Actions.FlexibleResize": resize windows from any corner.
+* "XMonad.Actions.FindEmptyWorkspace":
+    Find an empty workspace.
 
-* "XMonad.Actions.FloatKeys": move\/resize floating windows with
-  keybindings.
+* "XMonad.Actions.FlexibleManipulate":
+    Move and resize floating windows without warping the mouse.
 
-* "XMonad.Actions.FocusNth": focus the nth window on the screen.
+* "XMonad.Actions.FlexibleResize":
+    Resize floating windows from any corner.
 
-* "XMonad.Actions.MouseGestures": bind mouse gestures to actions.
+* "XMonad.Actions.FloatKeys":
+    Move and resize floating windows.
 
-* "XMonad.Actions.MouseResize": use with
-  "XMonad.Layout.WindowArranger" to resize windows with the mouse when
-  using a floating layout.
+* "XMonad.Layout.FloatSnap":
+    Move and resize floating windows using other windows and the edge of the
+    screen as guidelines.
 
-* "XMonad.Actions.NoBorders": forcibly remove borders from a window.
-  Not to be confused with "XMonad.Layout.NoBorders".
+* "XMonad.Actions.FocusNth":
+    Focus the nth window of the current workspace.
 
-* "XMonad.Actions.PerWorkspaceKeys": configure keybindings
-  per-workspace.
+* "XMonad.Actions.GridSelect":
+    GridSelect displays items(e.g. the opened windows) in a 2D grid and lets
+    the user select from it with the cursor/hjkl keys or the mouse.
 
-* "XMonad.Actions.Promote": An action to move the focused window to
-  the master pane, or swap the master with the next window.
+* "XMonad.Actions.MessageFeedback":
+    Alternative to 'XMonad.Operations.sendMessage' that provides knowledge
+    of whether the message was handled, and utility functions based on
+    this facility.
 
-* "XMonad.Actions.RotSlaves": rotate non-master windows.
+* "XMonad.Actions.MouseGestures":
+    Support for simple mouse gestures.
 
-* "XMonad.Actions.Search": provide helpful functions for easily
-  running web searchs.
+* "XMonad.Actions.MouseResize":
+    A layout modifier to resize windows with the mouse by grabbing the
+    window's lower right corner.
 
-* "XMonad.Actions.SimpleDate": display the date in a popup menu.
+* "XMonad.Actions.NoBorders":
+    This module provides helper functions for dealing with window borders.
 
-* "XMonad.Actions.SinkAll": sink all floating windows.
+* "XMonad.Actions.OnScreen":
+    Control workspaces on different screens (in xinerama mode).
 
-* "XMonad.Actions.Submap": create key submaps, i.e. the ability to
-  bind actions to key sequences rather than being limited to single
-  key combinations.
+* "XMonad.Actions.PerWorkspaceKeys":
+    Define key-bindings on per-workspace basis.
 
-* "XMonad.Actions.SwapWorkspaces": swap workspace tags.
+* "XMonad.Actions.PhysicalScreens":
+    Manipulate screens ordered by physical location instead of ID
 
-* "XMonad.Actions.TagWindows": tag windows and select by tag.
+* "XMonad.Actions.Plane":
+    This module has functions to navigate through workspaces in a bidimensional
+    manner.
 
-* "XMonad.Actions.UpdatePointer": mouse-follows-focus.
+* "XMonad.Actions.Promote":
+    Alternate promote function for xmonad.
 
-* "XMonad.Actions.Warp": warp the pointer.
+* "XMonad.Actions.RandomBackground":
+    An action to start terminals with a random background color
 
-* "XMonad.Actions.WindowBringer": bring windows to you, and you to
-  windows.
+* "XMonad.Actions.RotSlaves":
+    Rotate all windows except the master window and keep the focus in
+    place.
 
-* "XMonad.Actions.WindowGo": travel to windows based on various
-  criteria; conditionally start a program if a window does not exist,
-  or travel to that window if it does.
+* "XMonad.Actions.Search":
+    A module for easily running Internet searches on web sites through xmonad.
+    Modeled after the handy Surfraw CLI search tools at <https://secure.wikimedia.org/wikipedia/en/wiki/Surfraw>.
+
+* "XMonad.Actions.SimpleDate":
+    An example external contrib module for XMonad.
+    Provides a simple binding to dzen2 to print the date as a popup menu.
+
+* "XMonad.Actions.SinkAll":
+    Provides a simple binding that pushes all floating windows on the
+    current workspace back into tiling. Use the more general general
+    "XMonad.Actions.WithAll"
+
+* "XMonad.Actions.SpawnOn":
+    Provides a way to modify a window spawned by a command(e.g shift it to the workspace
+    it was launched on) by using the _NET_WM_PID property that most windows set on creation.
+
+* "XMonad.Actions.Submap":
+    A module that allows the user to create a sub-mapping of key bindings.
+
+* "XMonad.Actions.SwapWorkspaces":
+    Lets you swap workspace tags, so you can keep related ones next to
+    each other, without having to move individual windows.
+
+* "XMonad.Actions.TagWindows":
+    Functions for tagging windows and selecting them by tags.
+
+* "XMonad.Actions.TopicSpace":
+    Turns your workspaces into a more topic oriented system.
+
+* "XMonad.Actions.UpdateFocus":
+    Updates the focus on mouse move in unfocused windows.
+
+* "XMonadContrib.UpdatePointer":
+    Causes the pointer to follow whichever window focus changes to.
+
+* "XMonad.Actions.Warp":
+    Warp the pointer to a given window or screen.
+
+* "XMonad.Actions.WindowBringer":
+    dmenu operations to bring windows to you, and bring you to windows.
+    That is to say, it pops up a dmenu with window names, in case you forgot
+    where you left your XChat.
+
+* "XMonad.Actions.WindowGo":
+    Defines a few convenient operations for raising (traveling to) windows based on XMonad's Query
+    monad, such as 'runOrRaise'.
+
+* "XMonad.Actions.WindowMenu":
+    Uses "XMonad.Actions.GridSelect" to display a number of actions related to
+    window management in the center of the focused window.
+
+* "XMonad.Actions.WindowNavigation":
+    Experimental rewrite of "XMonad.Layout.WindowNavigation".
+
+* "XMonad.Actions.WithAll":
+    Provides functions for performing a given action on all windows of
+    the current workspace.
+
+* "XMonad.Actions.WorkspaceCursors":
+    Like "XMonad.Actions.Plane" for an arbitrary number of dimensions.
 
 -}
 
@@ -202,14 +296,25 @@ developers.  You can look at them for examples while creating your own
 configuration; you can also simply import them and use them as your
 own configuration, possibly with some modifications.
 
+
 * "XMonad.Config.Arossato"
+    This module specifies my xmonad defaults.
 
-* "XMonad.Config.Dons"
+* "XMonad.Config.Azerty"
 
-* "XMonad.Config.Droundy"
+* "XMonad.Config.Desktop"
+    This module provides a config suitable for use with a desktop
+    environment such as KDE or GNOME.
+
+* "XMonad.Config.Gnome"
+
+* "XMonad.Config.Kde"
 
 * "XMonad.Config.Sjanssen"
 
+* "XMonad.Config.Xfce"
+
+
 -}
 
 {- $hooks
@@ -238,30 +343,74 @@ occur. The two most important hooks are:
 
 Here is a list of the modules found in @XMonad.Hooks@:
 
+* "XMonad.Hooks.DynamicHooks":
+    One-shot and permanent ManageHooks that can be updated at runtime.
+
 * "XMonad.Hooks.DynamicLog": for use with 'XMonad.Core.logHook'; send
   information about xmonad's state to standard output, suitable for
   putting in a status bar of some sort. See
   "XMonad.Doc.Extending#The_log_hook_and_external_status_bars".
 
-* "XMonad.Hooks.EwmhDesktops": support for pagers in panel applications.
+* "XMonad.Hooks.EwmhDesktops":
+    Makes xmonad use the EWMH hints to tell panel applications about its
+    workspaces and the windows therein. It also allows the user to interact
+    with xmonad by clicking on panels and window lists.
 
-* "XMonad.Hooks.ManageDocks": handle DOCK and STRUT windows (such as
-  status bars) appropriately, by de-managing them and creating
-  appropriate gaps so as not to place other windows covering them.
+* "XMonad.Hooks.FadeInactive":
+    Makes XMonad set the _NET_WM_WINDOW_OPACITY atom for inactive windows,
+    which causes those windows to become slightly translucent if something
+    like xcompmgr is running
+
+* "XMonad.Hooks.FloatNext":
+    Hook and keybindings for automatically sending the next
+    spawned window(s) to the floating layer.
+
+* "XMonad.Hooks.InsertPosition":
+    Configure where new windows should be added and which window should be
+    focused.
+
+* "XMonad.Hooks.ManageDocks":
+    This module provides tools to automatically manage 'dock' type programs,
+    such as gnome-panel, kicker, dzen, and xmobar.
 
 * "XMonad.Hooks.ManageHelpers": provide helper functions to be used
   in @manageHook@.
 
+* "XMonad.Hooks.Place":
+    Automatic placement of floating windows.
+
+* "XMonad.Hooks.RestoreMinimized":
+    Lets you restore minimized windows (see "XMonad.Layout.Minimize")
+    by selecting them on a taskbar (listens for _NET_ACTIVE_WINDOW
+    and WM_CHANGE_STATE).
+
+* "XMonad.Hooks.Script":
+    Provides a simple interface for running a ~\/.xmonad\/hooks script with the
+    name of a hook.
+
 * "XMonad.Hooks.ServerMode": Allows sending commands to a running xmonad process.
 
-* "XMonad.Hooks.SetWMName": set the WM name.  Useful when e.g. running
-  Java GUI programs.
+* "XMonad.Hooks.SetCursor":
+    Set a default cursor on startup.
+    Thanks to Andres Salomon for his initial idea for this startup hook.
 
-* "XMonad.Hooks.UrgencyHook": configure an action to occur when a window
-  sets the urgent flag.
+* "XMonad.Hooks.SetWMName":
+    Sets the WM name to a given string, so that it could be detected using
+    _NET_SUPPORTING_WM_CHECK protocol.  May be useful for making Java GUI
+    programs work.
 
-* "XMonad.Hooks.XPropManage": match on XProperties in your
-  'XMonad.Core.manageHook'.
+* "XMonad.Hooks.UrgencyHook":
+    UrgencyHook lets you configure an action to occur when a window demands
+    your attention. (In traditional WMs, this takes the form of \"flashing\"
+    on your \"taskbar.\" Blech.)
+
+* "XMonad.Hooks.WorkspaceByPos":
+    Useful in a dual-head setup: Looks at the requested geometry of
+    new windows and moves them to the workspace of the non-focused
+    screen if necessary.
+
+* "XMonad.Hooks.XPropManage":
+    A ManageHook matching on XProperties.
 
 -}
 
@@ -282,108 +431,292 @@ interface for writing layout modifiers is implemented in
 For more information on using those modules for customizing your
 'XMonad.Core.layoutHook' see "XMonad.Doc.Extending#Editing_the_layout_hook".
 
-* "XMonad.Layout.Accordion": put non-focused windows in ribbons at the
-  top and bottom of the screen.
+* "XMonad.Layout.Accordion":
+    LayoutClass that puts non-focused windows in ribbons at the top and bottom
+    of the screen.
 
-* "XMonad.Layout.Circle": an elliptical, overlapping layout.
+* "XMonad.Layout.AutoMaster":
+    Provides layout modifier AutoMaster. It separates screen in two parts -
+    master and slave. Size of slave area automatically changes depending on
+    number of slave windows.
 
-* "XMonad.Layout.Combo": combine multiple layouts into one.
+* "XMonad.Layout.BorderResize":
+    This layout modifier will allow to resize windows by dragging their
+    borders with the mouse. However, it only works in layouts or modified
+    layouts that react to the SetGeometry message.
+    "XMonad.Layout.WindowArranger" can be used to create such a setup.
+    BorderResize is probably most useful in floating layouts.
 
-* "XMonad.Layout.Decoration": decorated layouts.
+* "XMonad.Layout.BoringWindows":
+    BoringWindows is an extension to allow windows to be marked boring
 
-* "XMonad.Layout.DecorationMadness": some examples of decorated layouts.
+* "XMonad.Layout.CenteredMaster":
+    Two layout modifiers. centerMaster places master window at center,
+    on top of all other windows, which are managed by base layout.
+    topRightMaster is similar, but places master window in top right corner
+    instead of center.
 
-* "XMonad.Layout.Dishes": stack extra windows underneath the master windows.
+* "XMonad.Layout.Circle":
+    Circle is an elliptical, overlapping layout, by Peter De Wachter
 
-* "XMonad.Layout.DragPane": split the screen into two windows with a
-  draggable divider.
+* "XMonad.Layout.Column":
+    Provides Column layout that places all windows in one column. Windows
+    heights are calculated from equation: H1/H2 = H2/H3 = ... = q, where q is
+    given. With Shrink/Expand messages you can change the q value.
 
-* "XMonad.Layout.DwmStyle": windows decorated in a dwm-like style.
+* "XMonad.Layout.Combo":
+    A layout that combines multiple layouts.
 
-* "XMonad.Layout.Grid": put windows in a square grid.
+* "XMonad.Layout.ComboP":
+    A layout that combines multiple layouts and allows to specify where to put
+    new windows.
 
-* "XMonad.Layout.HintedTile": gapless tiled layout that attempts to
-  obey window size hints.
+* "XMonad.Layout.Cross":
+    A Cross Layout with the main window in the center.
 
-* "XMonad.Layout.IM": a layout for multi-window instant message clients.
+* "XMonad.Layout.Decoration":
+    A layout modifier and a class for easily creating decorated
+    layouts.
 
-* "XMonad.Layout.LayoutCombinators": general layout combining.
+* "XMonad.Layout.DecorationMadness":
+    A collection of decorated layouts: some of them may be nice, some
+    usable, others just funny.
 
-* "XMonad.Layout.LayoutHints": make layouts respect window size hints.
+* "XMonad.Layout.Dishes":
+    Dishes is a layout that stacks extra windows underneath the master
+    windows.
 
-* "XMonad.Layout.LayoutModifier": a general framework for creating
-  layout \"modifiers\"; useful for creating new layout modules.
+* "XMonad.Layout.DragPane":
+    Layouts that splits the screen either horizontally or vertically and
+    shows two windows.  The first window is always the master window, and
+    the other is either the currently focused window or the second window in
+    layout order.
 
-* "XMonad.Layout.LayoutScreens": divide the screen into multiple
-  virtual \"screens\".
+* "XMonad.Layout.DwmStyle":
+    A layout modifier for decorating windows in a dwm like style.
 
-* "XMonad.Layout.MagicFocus": automagically put the focused window in
-  the master area.
+* "XMonad.Layout.FixedColumn":
+    A layout much like Tall, but using a multiple of a window's minimum
+    resize amount instead of a percentage of screen to decide where to
+    split. This is useful when you usually leave a text editor or
+    terminal in the master pane and like it to be 80 columns wide.
 
-* "XMonad.Layout.Magnifier": increase the size of the focused window
+* "XMonad.Layout.Gaps":
+    Create manually-sized gaps along edges of the screen which will not
+    be used for tiling, along with support for toggling gaps on and
+    off. You probably want "XMonad.Hooks.ManageDocks".
 
-* "XMonad.Layout.Maximize": temporarily maximize the focused window.
+* "XMonad.Layout.Grid":
+    A simple layout that attempts to put all windows in a square grid.
 
-* "XMonad.Layout.MosaicAlt": give each window a specified relative
-  amount of screen space.
+* "XMonad.Layout.GridVariants":
+    Two layouts: one is a variant of the Grid layout that allows the
+    desired aspect ratio of windows to be specified.  The other is like
+    Tall but places a grid with fixed number of rows and columns in the
+    master area and uses an aspect-ratio-specified layout for the
+    slaves.
 
-* "XMonad.Layout.MultiToggle": dynamically apply and unapply layout
-  transformers.
+* "XMonad.Layout.HintedGrid":
+    A not so simple layout that attempts to put all windows in a square grid
+    while obeying their size hints.
 
-* "XMonad.Layout.Named": change the names of layouts (as reported by
-  e.g. "XMonad.Hooks.DynamicLog").
+* "XMonad.Layout.HintedTile":
+    A gapless tiled layout that attempts to obey window size hints,
+    rather than simply ignoring them.
 
-* "XMonad.Layout.NoBorders": display windows without borders.
+* "XMonad.Layout.IM":
+    Layout modfier suitable for workspace with multi-windowed instant messenger
+    (like Psi or Tkabber).
 
-* "XMonad.Layout.PerWorkspace": configure layouts on a per-workspace basis.
+* "XMonad.Layout.IndependentScreens":
+    Utility functions for simulating independent sets of workspaces on
+    each screen (like dwm's workspace model), using internal tags to
+    distinguish workspaces associated with each screen.
 
-* "XMonad.Layout.Reflect": reflect any layout vertically or horizontally.
+* "XMonad.Layout.LayoutBuilder":
+    A layout combinator that sends a specified number of windows to one rectangle
+    and the rest to another.
 
-* "XMonad.Layout.ResizableTile": tiled layout allowing you to change
-  width and height of windows.
+* "XMonad.Layout.LayoutCombinators":
+    The "XMonad.Layout.LayoutCombinators" module provides combinators
+    for easily combining multiple layouts into one composite layout, as
+    well as a way to jump directly to any particular layout (say, with
+    a keybinding) without having to cycle through other layouts to get
+    to it.
 
-* "XMonad.Layout.ResizeScreen": a layout modifier to change the screen
-  geometry on one side.
+* "XMonad.Layout.LayoutHints":
+    Make layouts respect size hints.
 
-* "XMonad.Layout.Roledex": a \"completely pointless layout which acts
-  like Microsoft's Flip 3D\".
+* "XMonad.Layout.LayoutModifier":
+    A module for writing easy layout modifiers, which do not define a
+    layout in and of themselves, but modify the behavior of or add new
+    functionality to other layouts.  If you ever find yourself writing
+    a layout which takes another layout as a parameter, chances are you
+    should be writing a LayoutModifier instead!
+   
+    In case it is not clear, this module is not intended to help you
+    configure xmonad, it is to help you write other extension modules.
+    So get hacking!
 
-* "XMonad.Layout.ScratchWorkspace": implements a scratch workspace
-  which can be shown and hidden with keybindings.
+* "XMonad.Layout.LayoutScreens":
+    Divide a single screen into multiple screens.
 
-* "XMonad.Layout.ShowWName": Show the name of the current workspace when switching.
+* "XMonad.Layout.LimitWindows":
+    A layout modifier that limits the number of windows that can be shown.
 
-* "XMonad.Layout.SimpleDecoration": add simple decorations to windows.
+* "XMonad.Layout.MagicFocus":
+    Automagically put the focused window in the master area.
 
-* "XMonad.Layout.SimpleFloat": a basic floating layout.
+* "XMonad.Layout.Magnifier":
+    Screenshot  :  <http://caladan.rave.org/magnifier.png>
+    This is a layout modifier that will make a layout increase the size
+    of the window that has focus.
 
-* "XMonad.Layout.Simplest": a basic, simple layout that just lays out
-  all windows with a fullscreen geometry.  Used by
-  "XMonad.Layout.Tabbed".
+* "XMonad.Layout.Master":
+    Layout modfier that adds a master window to another layout.
 
-* "XMonad.Layout.Spiral": Fibonacci spiral layout.
+* "XMonad.Layout.Maximize":
+    Temporarily yanks the focused window out of the layout to mostly fill
+    the screen.
 
-* "XMonad.Layout.Square": split the screen into a square area plus the rest.
+* "XMonad.Layout.MessageControl":
+    Provides message escaping and filtering facilities which
+    help control complex nested layouts.
 
-* "XMonad.Layout.TabBarDecoration": add a bar of tabs to any layout.
+* "XMonad.Layout.Minimize":
+    Makes it possible to minimize windows, temporarily removing them
+    from the layout until they are restored.
 
-* "XMonad.Layout.Tabbed": a tabbed layout.
+* "XMonad.Layout.Monitor":
+    Layout modfier for displaying some window (monitor) above other windows
 
-* "XMonad.Layout.ThreeColumns": a layout with three columns instead of two.
+* "XMonad.Layout.Mosaic":
+    Based on MosaicAlt, but aspect ratio messages always change the aspect
+    ratios, and rearranging the window stack changes the window sizes.
 
-* "XMonad.Layout.ToggleLayouts": toggle between two layouts.
+* "XMonad.Layout.MosaicAlt":
+    A layout which gives each window a specified amount of screen space
+    relative to the others. Compared to the 'Mosaic' layout, this one
+    divides the space in a more balanced way.
 
-* "XMonad.Layout.TwoPane": split the screen horizontally and show two
-  windows.
+* "XMonad.Layout.MouseResizableTile":
+    A layout in the spirit of "XMonad.Layout.ResizableTile", but with the option
+    to use the mouse to adjust the layout.
 
-* "XMonad.Layout.WindowArranger": make any layout into a
-  pseudo-floating layout by allowing you to move and resize windows.
+* "XMonad.Layout.MultiToggle":
+    Dynamically apply and unapply transformers to your window layout. This can
+    be used to rotate your window layout by 90 degrees, or to make the
+    currently focused window occupy the whole screen (\"zoom in\") then undo
+    the transformation (\"zoom out\").
 
-* "XMonad.Layout.WindowNavigation": navigate around a workspace
-  directionally instead of using mod-j\/k.
+* "XMonad.Layout.Named":
+    A module for assigning a name to a given layout.
 
-* "XMonad.Layout.WorkspaceDir": set the current working directory in a
-  workspace.
+* "XMonad.Layout.NoBorders":
+    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.
+
+* "XMonad.Layout.NoFrillsDecoration":
+    Most basic version of decoration for windows without any additional
+    modifications. In contrast to "XMonad.Layout.SimpleDecoration" this will
+    result in title bars that span the entire window instead of being only the
+    length of the window title.
+
+* "XMonad.Layout.OneBig":
+    Provides layout named OneBig. It places one (master) window at top left corner of screen, and other (slave) windows at top
+
+* "XMonad.Layout.PerWorkspace":
+    Configure layouts on a per-workspace basis: use layouts and apply
+    layout modifiers selectively, depending on the workspace.
+
+* "XMonad.Layout.Reflect":
+    Reflect a layout horizontally or vertically.
+
+* "XMonad.Layout.ResizableTile":
+    More useful tiled layout that allows you to change a width\/height of window.
+
+* "XMonad.Layout.ResizeScreen":
+    A layout transformer to have a layout respect a given screen
+    geometry. Mostly used with "Decoration" (the Horizontal and the
+    Vertical version will react to SetTheme and change their dimension
+    accordingly.
+
+* "XMonad.Layout.Roledex":
+    This is a completely pointless layout which acts like Microsoft's Flip 3D
+
+* "XMonad.Layout.ShowWName":
+    This is a layout modifier that will show the workspace name
+
+* "XMonad.Layout.SimpleDecoration":
+    A layout modifier for adding simple decorations to the windows of a
+    given layout. The decorations are in the form of ion-like tabs
+    for window titles.
+
+* "XMonad.Layout.SimpleFloat":
+    A basic floating layout.
+
+* "XMonad.Layout.Simplest":
+    A very simple layout. The simplest, afaik.
+
+* "XMonad.Layout.SimplestFloat":
+    A basic floating layout like SimpleFloat but without the decoration.
+
+* "XMonad.Layout.Spacing":
+    Add a configurable amount of space around windows.
+
+* "XMonad.Layout.Spiral":
+    A spiral tiling layout.
+
+* "XMonad.Layout.Square":
+    A layout that splits the screen into a square area and the rest of the
+    screen.
+    This is probably only ever useful in combination with
+    "XMonad.Layout.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).
+
+* "XMonad.Layout.StackTile":
+    A stacking layout, like dishes but with the ability to resize master pane.
+    Mostly useful on small screens.
+
+* "XMonad.Layout.SubLayouts":
+    A layout combinator that allows layouts to be nested.
+
+* "XMonad.Layout.TabBarDecoration":
+    A layout modifier to add a bar of tabs to your layouts.
+
+* "XMonad.Layout.Tabbed":
+    A tabbed layout for the Xmonad Window Manager
+
+* "XMonad.Layout.ThreeColumns":
+    A layout similar to tall but with three columns. With 2560x1600 pixels this
+    layout can be used for a huge main window and up to six reasonable sized
+    slave windows.
+
+* "XMonad.Layout.ToggleLayouts":
+    A module to toggle between two layouts.
+
+* "XMonad.Layout.TwoPane":
+    A layout that splits the screen horizontally and shows two windows.  The
+    left window is always the master window, and the right is either the
+    currently focused window or the second window in layout order.
+
+* "XMonad.Layout.WindowArranger":
+    This is a pure layout modifier that will let you move and resize
+    windows with the keyboard in any layout.
+
+* "XMonad.Layout.WindowNavigation":
+    WindowNavigation is an extension to allow easy navigation of a workspace.
+
+* "XMonad.Layout.WorkspaceDir":
+    WorkspaceDir is an extension to set the current directory in a workspace.
+    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.
+    Note this extension requires the 'directory' package to be installed.
 
 -}
 
@@ -398,38 +731,68 @@ modules.
 
 These are the available prompts:
 
-* "XMonad.Prompt.AppendFile": append lines of text to a file.
+* "XMonad.Prompt.AppLauncher":
+    A module for launch applicationes that receive parameters in the command
+    line. The launcher call a prompt to get the parameters.
 
-* "XMonad.Prompt.Directory": prompt for a directory.
+* "XMonad.Prompt.AppendFile":
+    A prompt for appending a single line of text to a file.  Useful for
+    keeping a file of notes, things to remember for later, and so on---
+    using a keybinding, you can write things down just about as quickly
+    as you think of them, so it doesn't have to interrupt whatever else
+    you're doing.
+    Who knows, it might be useful for other purposes as well!
 
-* "XMonad.Prompt.DirExec": put a bunch of scripts you want in a
-  directory, then choose from among them with this prompt.
+* "XMonad.Prompt.DirExec":
+    A directory file executables prompt for XMonad. This might be useful if you
+    don't want to have scripts in your PATH environment variable (same
+    executable names, different behavior) - otherwise you might want to use
+    "XMonad.Prompt.Shell" instead - but you want to have easy access to these
+    executables through the xmonad's prompt.
 
-* "XMonad.Prompt.Email": an example of "XMonad.Prompt.Input", send
-  simple short e-mails from a prompt.
+* "XMonad.Prompt.Directory":
+    A directory prompt for XMonad
 
-* "XMonad.Prompt.Input": useful for building general actions requiring
-  input from a prompt.
+* "XMonad.Prompt.Email":
+    A prompt for sending quick, one-line emails, via the standard GNU
+    \'mail\' utility (which must be in your $PATH).  This module is
+    intended mostly as an example of using "XMonad.Prompt.Input" to
+    build an action requiring user input.
 
-* "XMonad.Prompt.Layout": choose a layout from a prompt.
+* "XMonad.Prompt.Input":
+    A generic framework for prompting the user for input and passing it
+    along to some other action.
 
-* "XMonad.Prompt.Man": open man pages.
+* "XMonad.Prompt.Layout":
+    A layout-selection prompt for XMonad
 
-* "XMonad.Prompt.RunOrRaise": choose a program, and run it if not
-  already running, or raise its window if it is.
+* "XMonad.Prompt.Man":
+    A manual page prompt for XMonad window manager.
+    TODO
+    * narrow completions by section number, if the one is specified
+    (like @\/etc\/bash_completion@ does)
 
-* "XMonad.Prompt.Shell": run a shell command.
+* "XMonad.Prompt.RunOrRaise":
+    A prompt for XMonad which will run a program, open a file,
+    or raise an already running program, depending on context.
 
-* "XMonad.Prompt.Ssh": open an ssh connection.
+* "XMonad.Prompt.Shell":
+    A shell prompt for XMonad
 
-* "XMonad.Prompt.Theme": choose a decoration theme.
+* "XMonad.Prompt.Ssh":
+    A ssh prompt for XMonad
 
-* "XMonad.Prompt.Window": choose an open window.
+* "XMonad.Prompt.Theme":
+    A prompt for changing the theme of the current workspace
 
-* "XMonad.Prompt.Workspace": choose a workspace.
+* "XMonad.Prompt.Window":
+    xprompt operations to bring windows to you, and bring you to windows.
 
-* "XMonad.Prompt.XMonad": perform various xmonad actions by choosing
-  one from a prompt.
+* "XMonad.Prompt.Workspace":
+    A workspace prompt for XMonad
+
+* "XMonad.Prompt.XMonad":
+    A prompt for running XMonad commands
 
 Usually a prompt is called by some key binding. See
 "XMonad.Doc.Extending#Editing_key_bindings", which includes examples
@@ -451,10 +814,12 @@ A non complete list with a brief description:
 * "XMonad.Util.CustomKeys": configure key bindings (see
   "XMonad.Doc.Extending#Editing_key_bindings").
 
-* "XMonad.Util.Dmenu": a dmenu binding.
+* "XMonad.Util.Dmenu":
+    A convenient binding to dmenu.
+    Requires the process-1.0 package
 
-* "XMonad.Util.Dzen" "XMonad.Util.Dmenu" provide useful functions for
-  running dzen as a xmonad status bar and dmenu as a program launcher;
+* "XMonad.Util.Dzen":
+    Handy wrapper for dzen. Requires dzen >= 0.2.4.
 
 * "XMonad.Util.EZConfig": configure key bindings easily, including a
   parser for writing key bindings in "M-C-x" style.
@@ -462,40 +827,66 @@ A non complete list with a brief description:
 * "XMonad.Util.Font": A module for abstracting a font facility over
   Core fonts and Xft
 
-* "XMonad.Util.Invisible": a wrapper data type to store layout state
-  which should not be persisted across restarts.
+* "XMonad.Util.Invisible":
+    A data type to store the layout state
 
-* "XMonad.Util.Loggers": a collection of loggers that can be used in
-  conjunction with "XMonad.Hooks.DynamicLog".
+* "XMonad.Util.Loggers":
+    A collection of simple logger functions and formatting utilities
+    which can be used in the 'XMonad.Hooks.DynamicLog.ppExtras' field of
+    a pretty-printing status logger format. See "XMonad.Hooks.DynamicLog"
+    for more information.
 
-* "XMonad.Util.NamedWindows": associate windows with their X titles.
-  Used by, e.g. "XMonad.Layout.Tabbed".
+* "XMonad.Util.NamedActions":
+    A wrapper for keybinding configuration that can list the available
+    keybindings.
 
-* "XMonad.Util.Run": a collection of functions for running external
-  processes.
+* "XMonad.Util.NamedScratchpad":
+    Named scratchpads that support several arbitrary applications at the same time.
 
-* "XMonad.Util.Scratchpad": hotkey-launched floating terminal window.
+* "XMonad.Util.NamedWindows":
+    This module allows you to associate the X titles of windows with
+    them.
 
-* "XMonad.Util.Themes": a collection of themes to be used with
-  floating layouts.
+* "XMonad.Util.Paste":
+    A module for sending key presses to windows. This modules provides generalized
+    and specialized functions for this task.
 
-* "XMonad.Util.Timer": set up a timer to handle deferred events.
+* "XMonad.Util.Replace":
+    Implements a @--replace@ flag outside of core.
 
-* "XMonad.Util.WindowProperties": an EDSL for specifying and matching
-  on window properties.
+* "XMonad.Util.Run":
+    This modules provides several commands to run an external process.
+    It is composed of functions formerly defined in "XMonad.Util.Dmenu" (by
+    Spencer Janssen), "XMonad.Util.Dzen" (by glasser\@mit.edu) and
+    XMonad.Util.RunInXTerm (by Andrea Rossato).
 
-* "XMonad.Util.WorkspaceCompare": general combinators for sorting
-  workspaces in various ways, used by several other modules which need
-  to sort workspaces (e.g. "XMonad.Hooks.DynamicLog").
+* "XMonad.Util.Scratchpad":
+    Very handy hotkey-launched floating terminal window.
 
-* "XMonad.Util.Paste" provides utilities for pasting or sending keys and
-  strings to windows;
+* "XMonad.Util.StringProp":
+    Internal utility functions for storing Strings with the root window.
+    Used for global state like IORefs with string keys, but more latency,
+    persistent between xmonad restarts.
 
-* "XMonad.Util.XSelection" provide utilities for using the mouse
-  selection;
+* "XMonad.Util.Themes":
+    A (hopefully) growing collection of themes for decorated layouts.
 
-* "XMonad.Util.XUtils" and "XMonad.Util.Font" are libraries for
-  accessing Xlib and XFT function in a convenient way.
+* "XMonad.Util.Timer":
+    A module for setting up timers
+
+* "XMonad.Util.Types":
+    Miscellaneous commonly used types.
+
+* "XMonad.Util.WindowProperties":
+    EDSL for specifying window properties; various utilities related to window
+    properties.
+
+* "XMonad.Util.XSelection":
+    A module for accessing and manipulating X Window's mouse selection (the buffer used in copy and pasting).
+    'getSelection' and 'putSelection' are adaptations of Hxsel.hs and Hxput.hs from the XMonad-utils
+
+* "XMonad.Util.XUtils":
+    A module for painting on the screen
 
 -}
 
diff --git a/scripts/grabDescriptions.hs b/scripts/grabDescriptions.hs
new file mode 100644
index 00000000..f6c0bbf7
--- /dev/null
+++ b/scripts/grabDescriptions.hs
@@ -0,0 +1,37 @@
+#!/usr/bin/env runhaskell
+
+import Control.Applicative
+import Control.Arrow
+import Control.Monad
+import Data.Char
+import Data.List
+import Data.Maybe
+import System.Directory
+import System.Environment
+
+-- needs haskell-src-exts
+import qualified Language.Haskell.Exts.Annotated as H
+
+getComments = (fmap . fmap) (map (\(H.Comment _ _ x) -> x) . snd)
+            . H.parseFileWithComments H.defaultParseMode
+
+-- | Used to grab the description fields from all the modules in the current
+-- directory for updating XMonad.Docs.Extending
+main = putStrLn . intercalate "\n"
+    =<< mapM (fmap . handleFailure description <*> getComments) =<< filterM doesFileExist . sort
+    =<< getDirectoryContents . fromMaybe "." . listToMaybe
+    =<< getArgs -- somehow only the "." fallback works...
+
+handleFailure :: (String -> [String] -> String) -> String -> H.ParseResult [String] -> String
+handleFailure f n (H.ParseOk x) = f n x
+handleFailure f n (H.ParseFailed _ msg) = n ++ " Parse Failure: " ++ msg
+
+description :: String -> [String] -> String
+description path xs =
+    let (hs,desc)
+            = uncurry (\x (y,descr) -> (x++y,takeWhile (not . or . sequence [null,("* Usage" `isInfixOf`),all (=='-'),all isSpace]) . dropWhile (all isSpace) $ descr))
+            . second (splitAt 1)
+            . break (isPrefixOf "Portability")
+            . map (dropWhile isSpace) $ concatMap lines xs
+        modName = maybe path (takeWhile (not . isSpace) . dropWhile isSpace . drop 1 . dropWhile (/=':')) $ find ("Module" `isInfixOf`) hs
+    in "* \""++modName++"\":\n"++unlines (map ("    "++) desc)