Difference between revisions of "Xmonad/Notable changes since 0.8"

From HaskellWiki
Jump to: navigation, search
m (Config: update gnomeRegister)
(Add note about renamed Direction type.)
Line 67: Line 67:
* Hooks.UrgencyHook now can be configured with reminders at intervals, and urgency can be cleared with a keybinding even without "visiting" the urgent window.
* Hooks.UrgencyHook now can be configured with reminders at intervals, and urgency can be cleared with a keybinding even without "visiting" the urgent window.
* Hooks.ManageDocks' Direction type was renamed to Direction2D and is now defined in XMonad.Util.Types. This requires configs that use Direction in type signatures or imports to use Direction2D instead.

Revision as of 19:02, 19 September 2009

This page is for keeping a record of significant changes in darcs xmonad and xmonad-contrib since the 0.8 release. See 'darcs changes' for more details about miscellaneous feature enhancements, and documentation and bug fixes not noted here.

(0.8.1 was a maintenance release, with no changes to user functionality. It simply includes ghc-6.10.1 related updates and a ghc optimization bug workaround for 64-bit users building xmonad-contrib on ghc-6.10.1.)

The idea is to put here a list of things which a user upgrading from 0.8 to 0.9 might like to know, so that they are sure to be included in the 0.9 release notes.

See also, the haddock documentation for darcs modules mentioned here.

Updates that require changes in xmonad.hs

Modules formerly using Hooks.EventHook now use Event from core. Note: EwmhDesktops users must change configuration by adding a handleEventHook to XConfig.

Scratchpad workspace is now "NSP" which is also used by the new Util.NamedScratchpad.

WindowGo or safeSpawn users may need to change command lines due to safeSpawn changes.

Changes to the xmonad core

  • Spawned processes are now handled by xmonad. Using 'exec xmonad' in startup files now "does the right thing."
  • New --restart command line flag to restart a running xmonad process.
  • Focus changes across screens with mouse, even for empty workspaces.
  • XMonad now exports (.|.), no need to import Data.Bits.
  • StackSet exports focusUp', focusDown' for Stack in addition to focusUp/Down StackSet versions.
  • XConfig has new handleEventHook:: Event -> X All field supporting custom event hooks. The function should return (All True) to have the default handler run afterward. (See Graphics.X11.Xlib.Extras Event, Core.hs, Main.hs)
  • X is now typeable. (Enables Language.Haskell.Interpreter, i.e. hint integration, see xmonad-eval project below.)

Changes to xmonad-contrib

Updated modules


  • Actions.CycleWS now includes HiddenWS type.
  • Actions.Submap now supports a default action, enabling looping to, e.g., set volume, or use an explicit 'exit submap' key.
  • Actions.Plane has a planeKeys function to automatically set up default workspace navigation.
  • Actions.Search has more searches.
  • Actions.WindowBringer now works with external programs other than dmenu, such as nafai's gtkmenu
  • Actions.CopyWindow has new runOrCopy
  • Actions.WindowGo
    • has raiseMaster variant of runOrRaiseMaster
    • uses safeSpawn instead of regular spawn


  • Config.Gnome now registers with dbus for speedier startup.


  • Hooks.EwmhDesktops requires new handleEventHook = ewmhDesktopsEventHook, added to defaultConfig.
  • Hooks.DynamicLog module has a new 'statusBar' function to simplify status bar configuration. Similar 'dzen' and 'xmobar' quick bar functions have changed type to allow better compositionality.The 'dynamicLogDzen' and 'dynamicLogXmobar' have been removed. Format stripping functions for xmobar and dzen have been added to allow independent formatting for ppHidden and ppUrgent.
  • Hooks.ManageHelpers has new 'doFloatDep' and 'doFloatAt' to add more control over floating window geometry.
  • Hooks.UrgencyHook now can be configured with reminders at intervals, and urgency can be cleared with a keybinding even without "visiting" the urgent window.
  • Hooks.ManageDocks' Direction type was renamed to Direction2D and is now defined in XMonad.Util.Types. This requires configs that use Direction in type signatures or imports to use Direction2D instead.


  • Layout.Grid Grid defaults to 16/9, plus new GridRatio with configurable aspect ratio.
  • Layout.LayoutHints layoutHintsToCenter added, to respect size hints but eliminate gaps between windows by placing them at outside edges.
  • Layout.Master is now a layout modifier rather than layout; it no longer applies size hints by default; otherwise is backward compatible with old Master.
  • Layout.ThreeColumns has several new features including placing master at center.


  • Prompt takes history filter, provides deleteConsecutive and deleteAllDuplicates for easier history usage with Prompt modules.


  • Util.EZConfig includes <Print>, and on systems with X11 that supports them, multimedia keys.
  • Util.Loggers has several new loggers and logger formatting utilities.
  • Util.Run's "safeSpawn" has changed types; now it takes a list of strings/arguments, instead of a single string.
  • Util.Scratchpad has general spawn action allowing user to specify how to set resource to "scratchpad", allows use of gnome-terminal, etc. as scratchpads. Also new NamedScratchpad module now allows multiple summon/banishable applications.
  • Util.Themes has many more themes to try out with tabbed and other decorated layouts
  • Util.WindowProperties has general getProp32* helpers and doc improvements
  • Util.XSelection has new functions to allow transforming the selection before acting on it.


  • Config.Kde has optional KDE 4 specific settings.
  • XMonad.Prompt has more tab completion settings, configurable history filter, several bug fixes.
  • UTF-8 handling has been improved throughout core and contrib.

New contrib modules


  • Actions.CycleWindows -- Cycle recent windows, cycle custom window order, focus nth window, change focused or unfocused window order. Esp. useful with layouts that hide some windows.
  • Actions.FloatSnap -- Tools for moving and resizing floating windows with configurable snapping to various window edges.
  • Actions.GridSelect -- Graphically go to, select, do things with windows. With additional colourizers and documentation plus mouse support. Also generalized to work with more than just windows, use to select workspaces, applications to spawn, prompts, etc.
  • Actions.MessageFeedback -- Provides a version of sendMessage that returns an X Bool reflecting whether or not the Message was handled. Allows specifying alternative Messages to be sent in sequence until one is handled.
  • Actions.OnScreen -- Functions for use with multiple screens to control workspaces on unfocused screens.
  • Actions.PhysicalScreens -- More intuitive use of multiple xinerama screens by physical ordering rather than ScreenID. (I.e. no more rebinding mod-{w,e,r} because xorg chose 0:middle, 1:right, 2:left, etc.)
  • Actions.RandomBackground -- Start terminals with random '-bg' color or generate random hex color strings. The range of colors can be restricted using RGB min/max value or HSV saturation and value.
  • Actions.SpawnOn -- Binding actions, hooks, and prompts to spawn on given or current workspace.
  • Actions.TopicSpace -- Utilities for task oriented workspaces: set working directory, startup actions when no windows are on the space, display and navigate topic workspaces by history of last focused topics.
  • Actions.UpdateFocus -- When switching workspaces and using focus follows mouse ensure the window under the mouse is focused as soon as it moves a bit.
  • Actions.WorkspaceCursors -- navigate workspaces in arbitrary number of dimensions. For example, use nine 3 x 3 grids of workspaces, binding keys to navigate in each of those three dimensions.
  • Actions.WithAll -- Apply functions to all windows on a workspace.


  • Hooks.FloatNext -- No need to mess with DynamicHooks if you want to float next windows; use this instead!
  • Hooks.Place -- Manage floating windows in just about any conceivable manner. Very neat module for floating window users. Also see Actions.FloatSnap.
  • Hooks.InsertPosition -- Ready made options for position and focus of new windows, e.g 'insertPosition Master Newer' to insert at master and focus it, 'insertPosition Above Older', etc.


  • Layout.AutoMaster -- Modifies a base layout used in slave area by adding a horizontal master area above it (like Mirror Mastered). The master area shrinks to make more room for slaves as more slave windows are created, but can also manually shrink expand and increment or decrement number of masters as normal.
  • Layout.CenteredMaster -- Sort of a combination of Master's mastered modifier with Magnifier, adding a master frame above tiled windows that is centered or at the top right of the screen.
  • Layout.Cross -- Similar to Circle, but with a resizable center pane. Limits visible windows to five. Cycles the focused window into the main window keeping visible two above and two below in stack order.
  • Layout.Column -- Arrange windows in a column with heights forming a geometric progression: h1/h2 = h2/h3 = ... = q where q is adjustable via Shrink/Expand.
  • Layout.ComboP -- Combine layouts more usefully than plain L.Combo: use window properties to decide which windows go to which layout, and move or swap windows between layouts.
  • Layout.FixedColumn -- Neat variation on Tall, using window hints to decide master width, e.g. have your terminal automatically be 80 columns wide in the master.
  • Layout.GridVariants -- More customizable Grid, and adjustable SplitGrid, for details see here.
  • Layout.IndependentScreens -- Utilities to simulate dwm's screen model, where each physical screen has its own set of the defined workspaces.
  • Layout.LayoutBuilder -- another method for combining layouts based on number of windows to place into different sub screen layouts.
  • Layout.LimitWindows -- modify a layout to limit the number of visible windows. The number visible can be raised or lowered via keybindings.
  • Layout.Monitor -- Many useful functions for gkrellm, clock, widget type windows.
  • Layout.OneBig -- A little like Mosaic combined with Grid, this layout lets you specify a (top left) master area as fractions of screen dimension, (yes, can shrink/expand it), then it splits the rectangles below and to the right of that area into equal portions.
  • Layout.SubLayouts -- much requested tools to nest layouts in other layouts.
  • Layout.Spacing -- puts blank space around each window.
  • Layout.Mosaic -- Versatile, easy to configure, fun layout that can yield a wide range of layouts. It sizes panes based on the relative sizes of a list of numbers. Keybindings can be added to resize windows and change the overall aspect ratio.


  • Util.Paste -- For pasting strings to windows.
  • Util.NamedActions -- Make keybindings showable.
  • Util.NamedScratchpad -- Allows multiple summon/banishable application windows each with its own float configuration.
  • 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.

Deleted modules

  • Config.PlainConfig is now a separate project, shepheb's xmonad-light.
  • Hooks.EventHook is superseded by handleEventHook from core.

Related Projects

xmonad-light allows using a limited version of xmonad without having to have ghc installed. It provides a special syntax to customize a few common options using xmonad.conf instead of xmonad.hs.

xmonad-extras includes some modules with additional dependencies, like a Volume control, an MPD prompt and a module that uses the hint interpreter to manipulate xmonad state during runtime via normal haskell expressions ala emacs eval.

xmonad log applet allows displaying xmonad logHook output in gnome-panel.

For users of >=ghc-6.10, the hlint package parses haskell source and offers suggestions on how to improve it.