[xmonad] xmonad under ghc 6.12.1 -- progress

Adam Vogt vogt.adam at gmail.com
Sun Jan 24 23:56:20 EST 2010

* On Tuesday, January 12 2010, Brent Yorgey wrote:

>Hi all,
>I've been continuing to work on getting xmonad to build under ghc
>6.12.1.  We're almost there (I've attached a patch for xmonad-contrib;
>the core is a different story, read on).
>The main problem with building under 6.12.1 was that it generated
>three new sorts of warnings on the xmonad codebase (which was
>incompatible with our policy of using -Werror while testing, aside
>from simply being ugly).
>  * Redundant imports.  I've fixed all of these, see the attached
>    patch.
>  * Unused do binds.  Per a previous discussion, this warning is silly
>    so I've added a clause in the .cabal files to disable it for ghc
>    >= 6.12.1.
>  * Deprecated Prelude.  xmonad currently requires base < 4 (because
>    we're using the old exceptions framework) but this now generates a
>    warning under ghc 6.12.1 that base-3 will soon be deprecated.  For
>    now, I've disabled this warning (unfortunately, this means all
>    OTHER deprecation warnings are disabled too).
>    Really we ought to update to use the extensible-exceptions
>    package, which supposedly would provide a smooth migration path
>    allowing xmonad to build under both base-3 and base-4. I'll let
>    someone who knows more about exception stuff handle this.
>In the meantime, I have attached a patch which updates xmonad-contrib
>to compile cleanly under ghc 6.12.1.  I also tested under ghc 6.10.4
>with this patch applied, so as far as I know it shouldn't change or
>break anything.
>[1] http://www.haskell.org/pipermail/cabal-devel/2010-January/006004.html

I've attached a patch which converts contrib to the use of
extensible-exceptions. While in most cases only a couple exceptions
should probably be caught rather than all of them, only to translated
the existing code to the form extensible-exceptions requires.

The same is done for core here: [1]

Regarding the -fwarn-unused-do-binds: disabling the warning is quite an
unpleasant workaround to the point where it might be just as easy to
annotate the 20 or so places that trigger this warning. I'll get around
to that sometime, unless there are objections?


[1] http://www.haskell.org/pipermail/xmonad/2010-January/009582.html
-------------- next part --------------
Tue Jan 12 12:25:07 EST 2010  Brent Yorgey <byorgey at cis.upenn.edu>
  * suppress some warnings under ghc 6.12.1 and clean up redundant imports to get rid of some others.

Sun Jan 24 15:33:24 EST 2010  Adam Vogt <vogt.adam at gmail.com>
  * Use extensible-exceptions to allow base-3 or base-4

New patches:

[suppress some warnings under ghc 6.12.1 and clean up redundant imports to get rid of some others.
Brent Yorgey <byorgey at cis.upenn.edu>**20100112172507
 Ignore-this: bf3487b27036b02797d9f528a078d006
] {
hunk ./XMonad/Actions/CopyWindow.hs 29
 import XMonad
 import Control.Arrow ((&&&))
-import Control.Monad
 import qualified Data.List as L
 import XMonad.Actions.WindowGo
hunk ./XMonad/Actions/DynamicWorkspaceOrder.hs 44
 import qualified Data.Set as S
 import Data.Maybe (fromJust, fromMaybe)
 import Data.Ord (comparing)
-import Data.Typeable
 -- $usage
 -- You can use this module by importing it into your ~\/.xmonad\/xmonad.hs file:
hunk ./XMonad/Actions/MouseResize.hs 26
     , MouseResize (..)
     ) where
-import Control.Monad
-import Data.Maybe
 import XMonad
 import XMonad.Layout.Decoration
hunk ./XMonad/Actions/MouseResize.hs 28
-import XMonad.Layout.LayoutModifier
 import XMonad.Layout.WindowArranger
 import XMonad.Util.XUtils
hunk ./XMonad/Actions/OnScreen.hs 29
     ) where
 import XMonad
-import XMonad.Core
 import XMonad.StackSet hiding (new)
 import Control.Monad (guard)
hunk ./XMonad/Actions/PhysicalScreens.hs 27
 import XMonad
 import qualified XMonad.StackSet as W
-import qualified Graphics.X11.Xlib as X
 import Graphics.X11.Xinerama
 import Data.List (sortBy)
hunk ./XMonad/Actions/SwapWorkspaces.hs 28
 import XMonad (windows, X())
 import XMonad.StackSet
 import XMonad.Actions.CycleWS
-import XMonad.Util.Types
 import XMonad.Util.WorkspaceCompare
hunk ./XMonad/Actions/TagWindows.hs 28
                  ) where
-import Data.List (nub,concat,sortBy)
+import Data.List (nub,sortBy)
 import Control.Monad
 import XMonad.StackSet hiding (filter)
hunk ./XMonad/Actions/TopicSpace.hs 47
 import Data.Maybe (fromMaybe, isNothing, listToMaybe)
 import Data.Ord
 import qualified Data.Map as M
-import Control.Monad ((=<<),liftM2,when,unless,replicateM_)
+import Control.Monad (liftM2,when,unless,replicateM_)
 import System.IO
hunk ./XMonad/Actions/TopicSpace.hs 50
-import XMonad.Operations
 import qualified XMonad.StackSet as W
 import XMonad.Prompt
hunk ./XMonad/Actions/UpdateFocus.hs 24
 import XMonad
 import qualified XMonad.StackSet as W
-import Graphics.X11.Xlib.Extras
 import Control.Monad (when)
 import Data.Monoid
hunk ./XMonad/Actions/Warp.hs 25
                           ) where
-import Data.Ratio
 import Data.List
 import XMonad
 import XMonad.StackSet as W
hunk ./XMonad/Actions/WindowNavigation.hs 55
 import Data.Maybe (catMaybes, fromMaybe, listToMaybe)
 import Data.Ord (comparing)
 import qualified Data.Set as S
-import Graphics.X11.Xlib
 -- $usage
hunk ./XMonad/Actions/WithAll.hs 21
 import Data.Foldable hiding (foldr)
 import XMonad
-import XMonad.Core
-import XMonad.Operations
 import XMonad.StackSet
 -- $usage
hunk ./XMonad/Config/Bluetile.hs 29
 import XMonad hiding ( (|||) )
-import XMonad.Layout hiding ( (|||) )
 import XMonad.Layout.BorderResize
 import XMonad.Layout.BoringWindows
 import XMonad.Layout.ButtonDecoration
hunk ./XMonad/Config/Desktop.hs 57
     ) where
 import XMonad
-import XMonad.Config (defaultConfig)
 import XMonad.Hooks.ManageDocks
 import XMonad.Hooks.EwmhDesktops
 import XMonad.Util.Cursor
hunk ./XMonad/Config/Droundy.hs 13
 import XMonad hiding (keys, config, (|||))
 import qualified XMonad (keys)
-import XMonad.Config ( defaultConfig )
 import qualified XMonad.StackSet as W
 import qualified Data.Map as M
hunk ./XMonad/Config/Sjanssen.hs 9
 import XMonad.Actions.CopyWindow
 import XMonad.Layout.Tabbed
 import XMonad.Layout.HintedTile
-import XMonad.Config (defaultConfig)
 import XMonad.Layout.NoBorders
 import XMonad.Hooks.DynamicLog
 import XMonad.Hooks.ManageDocks
hunk ./XMonad/Hooks/ManageDocks.hs 33
 import XMonad
 import Foreign.C.Types (CLong)
-import Control.Monad
 import XMonad.Layout.LayoutModifier
 import XMonad.Util.Types
 import XMonad.Util.WindowProperties (getProp32s)
hunk ./XMonad/Hooks/Place.hs 45
 import qualified Data.Map as M
 import Data.Ratio ((%))
 import Data.List (sortBy, minimumBy, partition)
-import Data.Maybe (maybe, fromMaybe, catMaybes)
+import Data.Maybe (fromMaybe, catMaybes)
 import Data.Monoid (Endo(..))
 import Control.Monad (guard, join)
 import Control.Monad.Trans (lift)
hunk ./XMonad/Hooks/Script.hs 29
 import XMonad
-import Control.Monad.Trans
 import System.Directory
 -- $usage
hunk ./XMonad/Hooks/ServerMode.hs 67
     ) where
 import Control.Monad (when)
-import Data.List
 import Data.Monoid
 import System.IO
hunk ./XMonad/Hooks/XPropManage.hs 21
                  ) where
 import Data.Char (chr)
-import Data.List (concat)
 import Data.Monoid (mconcat, Endo(..))
 import Control.Monad.Trans (lift)
hunk ./XMonad/Hooks/XPropManage.hs 26
 import XMonad
-import XMonad.ManageHook ((-->))
 -- $usage
 -- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
hunk ./XMonad/Layout/ComboP.hs 30
 import Data.Maybe ( isJust )
 import Control.Monad
 import XMonad hiding (focus)
-import XMonad.StackSet ( integrate, Workspace (..), Stack(..) )
+import XMonad.StackSet ( Workspace (..), Stack(..) )
 import XMonad.Layout.WindowNavigation
 import XMonad.Util.WindowProperties
 import qualified XMonad.StackSet as W
hunk ./XMonad/Layout/DecorationAddons.hs 32
 import XMonad.Hooks.ManageDocks
 import XMonad.Util.Font
 import XMonad.Util.PositionStore
-import XMonad.Util.XUtils (fi)
 import Control.Applicative((<$>))
 import Data.Maybe
hunk ./XMonad/Layout/DecorationMadness.hs 97
 import XMonad.Layout.Accordion
 import XMonad.Layout.Circle
-import XMonad.Layout.ResizeScreen
 import XMonad.Layout.WindowArranger
 import XMonad.Layout.SimpleFloat
hunk ./XMonad/Layout/Dishes.hs 24
                               Dishes (..)
                             ) where
-import Data.List
 import XMonad
 import XMonad.StackSet (integrate)
 import Control.Monad (ap)
hunk ./XMonad/Layout/IM.hs 32
 import XMonad
 import qualified XMonad.StackSet as S
-import Data.List
-import XMonad.Layout (splitHorizontallyBy)
 import XMonad.Layout.Grid
 import XMonad.Layout.LayoutModifier
 import XMonad.Util.WindowProperties
hunk ./XMonad/Layout/IndependentScreens.hs 29
 -- for the screen stuff
 import Control.Arrow hiding ((|||))
 import Control.Monad
-import Control.Monad.Instances
 import Data.List
 import Graphics.X11.Xinerama
 import XMonad
hunk ./XMonad/Layout/LayoutBuilder.hs 31
 ) where
 import XMonad
-import XMonad.Layout
 import qualified XMonad.StackSet as W
hunk ./XMonad/Layout/LayoutBuilder.hs 32
-import Graphics.X11.Xlib
 import Data.Maybe (isJust)
hunk ./XMonad/Layout/LayoutBuilder.hs 33
-import Control.Monad
 -- $usage
 -- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
hunk ./XMonad/Layout/LayoutHints.hs 35
 import XMonad.Util.Types(Direction2D(..))
 import Control.Applicative((<$>))
 import Control.Arrow(Arrow((***), first, second))
-import Control.Monad(Monad(return), mapM, join)
+import Control.Monad(join)
 import Data.Function(on)
 import Data.List(sortBy)
hunk ./XMonad/Layout/LimitWindows.hs 32
 import XMonad.Layout.LayoutModifier
 import XMonad
 import qualified XMonad.StackSet as W
-import XMonad.Layout (IncMasterN (..))
 import Control.Monad((<=<),guard)
 import Control.Applicative((<$>))
 import Data.Maybe(fromJust)
hunk ./XMonad/Layout/NoBorders.hs 36
 import XMonad
 import XMonad.Layout.LayoutModifier
 import qualified XMonad.StackSet as W
-import Control.Monad
 import Data.List
 import qualified Data.Map as M
 import Data.Function (on)
hunk ./XMonad/Layout/SubLayouts.hs 54
 import XMonad
 import Control.Applicative((<$>),(<*))
 import Control.Arrow(Arrow(second, (&&&)))
-import Control.Monad(Monad(return), Functor(..),
-                     MonadPlus(mplus), (=<<), sequence, foldM, guard, when, join)
-import Data.Function((.), ($), flip, id, on)
-import Data.List((++), foldr, filter, map, concatMap, elem,
-                 notElem, null, nubBy, (\\), find)
-import Data.Maybe(Maybe(..), isNothing, maybe, fromMaybe, listToMaybe,
-                  mapMaybe)
+import Control.Monad(MonadPlus(mplus), foldM, guard, when, join)
+import Data.Function(on)
+import Data.List(nubBy, (\\), find)
+import Data.Maybe(isNothing, fromMaybe, listToMaybe, mapMaybe)
 import Data.Traversable(sequenceA)
 import qualified XMonad.Layout.BoringWindows as B
hunk ./XMonad/Layout/Tabbed.hs 31
     , Shrinker(..)
     ) where
-import Data.Maybe
 import Data.List
 import XMonad
hunk ./XMonad/Layout/WindowArranger.hs 35
 import Control.Arrow
 import Data.List
-import Data.Maybe
 -- $usage
 -- You can use this module with the following in your
hunk ./XMonad/Prompt/RunOrRaise.hs 29
 import XMonad.Util.Run (runProcessWithInput)
 import Control.Monad (liftM, liftM2)
-import Data.Maybe
 import System.Directory (doesDirectoryExist, doesFileExist, executable, getPermissions)
 {- $usage
hunk ./XMonad/Prompt/Shell.hs 33
 import Control.Monad
 import Data.List
 import System.Directory
-import System.IO
 import System.Posix.Files
 import XMonad.Util.Run
 import XMonad hiding (config)
hunk ./XMonad/Prompt/Ssh.hs 29
 import System.Environment
 import Control.Monad
-import Data.List
 import Data.Maybe
 -- $usage
hunk ./XMonad/Prompt/Theme.hs 23
 import Control.Arrow ( (&&&) )
 import qualified Data.Map as M
 import Data.Maybe ( fromMaybe )
-import Data.List
 import XMonad
 import XMonad.Prompt
 import XMonad.Layout.Decoration
hunk ./XMonad/Util/Dzen.hs 41
   ) where
 import Control.Monad
-import Data.List
 import XMonad
 import XMonad.StackSet
 import XMonad.Util.Run (runProcessWithInputAndWait, seconds)
hunk ./XMonad/Util/NamedActions.hs 48
 import XMonad
 import System.Posix.Process(executeFile)
 import Control.Arrow(Arrow((&&&), second, (***)))
-import Data.Bits(Bits((.&.), complement, (.|.)))
-import Data.Function((.), const, ($), flip, id)
-import Data.List((++), filter, zip, map, concatMap, null, unlines,
-                 groupBy)
+import Data.Bits(Bits((.&.), complement))
+import Data.List (groupBy)
 import System.Exit(ExitCode(ExitSuccess), exitWith)
 import Control.Applicative ((<*>))
hunk ./XMonad/Util/NamedActions.hs 56
 import qualified Data.Map as M
 import qualified XMonad.StackSet as W
-import qualified XMonad
 -- $usage
 -- Here is an example config that demonstrates the usage of 'sendMessage'',
hunk ./XMonad/Util/NamedScratchpad.hs 30
   ) where
 import XMonad
-import XMonad.Core
-import XMonad.ManageHook (composeAll,doFloat)
 import XMonad.Hooks.ManageHelpers (doRectFloat)
 import XMonad.Actions.DynamicWorkspaces (addHiddenWorkspace)
hunk ./XMonad/Util/NamedScratchpad.hs 34
 import Control.Monad (filterM)
-import Data.Maybe (maybe,listToMaybe)
+import Data.Maybe (listToMaybe)
 import qualified XMonad.StackSet as W
hunk ./XMonad/Util/Paste.hs 32
 import XMonad.Operations (withFocused)
 import Data.Char (isUpper)
 import Data.Maybe (listToMaybe)
-import Graphics.X11.Xlib.Misc (stringToKeysym)
 import XMonad.Util.XSelection (getSelection)
 import XMonad.Util.EZConfig (parseKey)
 import Text.ParserCombinators.ReadP (readP_to_S)
hunk ./XMonad/Util/PositionStore.hs 30
 import XMonad
 import qualified XMonad.Util.ExtensibleState as XS
-import Graphics.X11.Xlib
-import Graphics.X11.Types
-import Data.Typeable
 import qualified Data.Map as M
 -- Store window positions relative to the upper left screen edge
hunk ./XMonad/Util/Scratchpad.hs 27
   ) where
 import XMonad
-import XMonad.Core
 import qualified XMonad.StackSet as W
 import XMonad.Util.NamedScratchpad
hunk ./XMonad/Util/XSelection.hs 26
                                  transformSafePromptSelection) where
 import Control.Exception as E (catch)
-import Control.Monad(Monad (return, (>>)), Functor(..), liftM, join)
+import Control.Monad (liftM, join)
 import Data.Maybe (fromMaybe)
 import XMonad
 import XMonad.Util.Run (safeSpawn, unsafeSpawn)
hunk ./xmonad-contrib.cabal 53
         cpp-options: -DXFT
     build-depends:      mtl, unix, X11>= && < 1.6, xmonad>=0.9.1, xmonad<0.10, utf8-string
-    ghc-options:        -fwarn-tabs -Wall
+    if true
+        ghc-options:    -fwarn-tabs -Wall
     extensions:         ForeignFunctionInterface
     if flag(testing)
hunk ./xmonad-contrib.cabal 62
         ghc-options:    -fwarn-tabs -Werror
+    if impl(ghc >= 6.12.1)
+        ghc-options:    -fno-warn-warnings-deprecations -fno-warn-unused-do-bind    
     if impl (ghc == 6.10.1) && arch (x86_64)
         ghc-options:    -O0
[Use extensible-exceptions to allow base-3 or base-4
Adam Vogt <vogt.adam at gmail.com>**20100124203324
 Ignore-this: 136f35fcc0f3a824b96eea0f4e04f276
] {
hunk ./XMonad/Prompt.hs 91
 import System.Directory
 import System.IO
 import System.Posix.Files
-import Control.Exception hiding (handle)
+import Control.Exception.Extensible hiding (handle)
 import qualified Data.Map as M
hunk ./XMonad/Prompt.hs 642
 getCompletions = do
   s <- get
   io $ completionFunction s (commandToComplete (xptype s) (command s))
-       `catch` \_ -> return []
+       `catch` \(SomeException _) -> return []
 setComplWin :: Window -> ComplWindowDim -> XP ()
 setComplWin w wi =
hunk ./XMonad/Prompt.hs 760
 getHistoryFile = fmap (++ "/history") $ getAppUserDataDirectory "xmonad"
 readHistory :: IO History
-readHistory = catch readHist (const (return emptyHistory))
+readHistory = readHist `catch` \(SomeException _) -> return emptyHistory
     readHist = do
         path <- getHistoryFile
hunk ./XMonad/Prompt.hs 770
 writeHistory :: History -> IO ()
 writeHistory hist = do
   path <- getHistoryFile
-  catch (writeFile path (show hist)) $ const $ hPutStrLn stderr "error in writing"
+  writeFile path (show hist) `catch` \(SomeException _) -> hPutStrLn stderr "error in writing"
   setFileMode path mode
     where mode = ownerReadMode .|. ownerWriteMode
hunk ./XMonad/Prompt/AppendFile.hs 32
 import XMonad.Prompt
 import System.IO
-import Control.Exception
+import Control.Exception.Extensible (bracket)
 -- $usage
hunk ./XMonad/Prompt/Man.hs 34
 import System.Process
 import System.IO
-import qualified Control.Exception as E
+import qualified Control.Exception.Extensible as E
 import Control.Monad
 import Data.List
 import Data.Maybe
hunk ./XMonad/Prompt/Man.hs 65
 getMans :: IO [String]
 getMans = do
-  paths <- getCommandOutput "manpath -g 2>/dev/null" `E.catch` \_ -> return []
+  paths <- getCommandOutput "manpath -g 2>/dev/null" `E.catch`
+            \(E.SomeException _) -> return []
   let sects    = ["man" ++ show n | n <- [1..9 :: Int]]
       dirs     = [d ++ "/" ++ s | d <- split ':' paths, s <- sects]
   mans <- forM dirs $ \d -> do
hunk ./XMonad/Util/NamedWindows.hs 27
 import Prelude hiding ( catch )
 import Control.Applicative ( (<$>) )
-import Control.Exception ( bracket, catch )
+import Control.Exception.Extensible ( bracket, catch, SomeException(..) )
 import Data.Maybe ( fromMaybe, listToMaybe )
 import qualified XMonad.StackSet as W ( peek )
hunk ./XMonad/Util/NamedWindows.hs 53
     let getIt = bracket getProp (xFree . tp_value) (fmap (`NW` w) . copy)
         getProp = (internAtom d "_NET_WM_NAME" False >>= getTextProperty d w)
-                      `catch` \_ -> getTextProperty d w wM_NAME
+                      `catch` \(SomeException _) -> getTextProperty d w wM_NAME
         copy prop = fromMaybe "" . listToMaybe <$> wcTextPropertyToTextList d prop
hunk ./XMonad/Util/NamedWindows.hs 57
-    io $ getIt `catch` \_ ->  ((`NW` w) . resName) `fmap` getClassHint d w
+    io $ getIt `catch` \(SomeException _) ->  ((`NW` w) . resName) `fmap` getClassHint d w
 unName :: NamedWindow -> Window
 unName (NW _ w) = w
hunk ./XMonad/Util/Run.hs 36
 import System.Posix.IO
 import System.Posix.Process (executeFile)
+import System.Posix.Types (ProcessID)
 import Control.Concurrent (threadDelay)
hunk ./XMonad/Util/Run.hs 38
-import Control.Exception (try) -- use OldException with base 4
+import Control.Exception.Extensible (try,SomeException)
 import System.IO
 import System.Process (runInteractiveProcess)
 import XMonad
hunk ./XMonad/Util/Run.hs 111
 interpolation, whereas the safeSpawn example can be safe because
 Firefox doesn't need any arguments if it is just being started. -}
 safeSpawn :: MonadIO m => FilePath -> [String] -> m ()
-safeSpawn prog args = liftIO (try (xfork $ executeFile prog True args Nothing) >> return ())
+safeSpawn prog args = liftIO $ do
+    try $ xfork $ executeFile prog True args Nothing :: IO (Either SomeException ProcessID)
+    return ()
 -- | Like 'safeSpawn', but only takes a program (and no arguments for it). eg.
hunk ./XMonad/Util/XSelection.hs 25
                                  transformSafePromptSelection) where
-import Control.Exception as E (catch)
+import Control.Exception.Extensible as E (catch,SomeException(..))
 import Control.Monad (liftM, join)
 import Data.Maybe (fromMaybe)
 import XMonad
hunk ./XMonad/Util/XSelection.hs 69
   ty <- E.catch
                      (internAtom dpy "UTF8_STRING" False)
-                     (\_ -> internAtom dpy "COMPOUND_TEXT" False))
-             (\_ -> internAtom dpy "sTring" False)
+                     (\(E.SomeException _) -> internAtom dpy "COMPOUND_TEXT" False))
+             (\(E.SomeException _) -> internAtom dpy "sTring" False)
   clp <- internAtom dpy "BLITZ_SEL_STRING" False
   xConvertSelection dpy p ty clp win currentTime
   allocaXEvent $ \e -> do
hunk ./xmonad-contrib.cabal 43
     if flag(small_base)
-        build-depends: base >= 3 && < 4, containers, directory, process, random, old-time, old-locale
+        build-depends: base >= 3 && < 5,
+                       containers,
+                       directory,
+                       extensible-exceptions,
+                       old-locale,
+                       old-time,
+                       process,
+                       random
         build-depends: base < 3
hunk ./xmonad-contrib.cabal 70
         ghc-options:    -fwarn-tabs -Werror
     if impl(ghc >= 6.12.1)
-        ghc-options:    -fno-warn-warnings-deprecations -fno-warn-unused-do-bind    
+        ghc-options:    -fno-warn-unused-do-bind
     if impl (ghc == 6.10.1) && arch (x86_64)
         ghc-options:    -O0


[Use <+> instead of explicit M.union to merge keybindings in X.C.*
Adam Vogt <vogt.adam at gmail.com>**20100124202136
 Ignore-this: e7bfd99eb4d3e6735153d1d5ec00a885
[Fix incorrect import suggestion in L.Tabbed (issue 362)
Adam Vogt <vogt.adam at gmail.com>**20100121182501
 Ignore-this: 5e46f140a7e8c2abf0ac75b3262a7da4
[Swap window ordering in L.Accordion (closes Issue 358). Thanks rsaarelm.
Adam Vogt <vogt.adam at gmail.com>**20100121154344
 Ignore-this: cd06b0f4fc85f857307aaae8f6e40af7
 This change keeps windows in the same ordering when focus is changed.
[use restart to restart xmonad (no longer bluetile)
Jens Petersen <petersen at haskell.org>**20100116105935
 Ignore-this: e6e27c65e25201fc84bfaf092dad48ac
[X.L.Decoration: avoid flicker by not showing decowins without rectangles
Tomas Janousek <tomi at nomi.cz>**20100116112054
 Ignore-this: 6f38634706c3f35272670b969fc6cc96
 These would be hidden by updateDecos immediately after being shown. This
 caused flicker with simpleTabbed and only one window on a workspace.
[Add a way to cycle only through matching history entries in X.Prompt
Daniel Schoepe <daniel.schoepe at gmail.com>**20100113233036
 Ignore-this: d67aedb25f2cc6f329a78d5d3eebdd2b
 This patch adds a way go up through X.Prompt's history using
 only those entries that start with the current input, similar
 to zsh's `history-search-backward'.
[Style changes in L.Minimize
Adam Vogt <vogt.adam at gmail.com>**20100104144448
 Ignore-this: 5f64c0717e24ed6cbe2c9fad50bf78a3
konstantin.sobolev at gmail.com**20091230070105
 Ignore-this: 2c0e1b94f123a869fb4e72a802e59c2
 Adds floating windows support to X.L.Minimize
[Use more imported cursor constants.
Adam Vogt <vogt.adam at gmail.com>**20091230220927
 Ignore-this: 91e55c63a1d020fafb6b53e6abf9766c
[import new contrib module, X.A.DynamicWorkspaceOrder
Brent Yorgey <byorgey at cis.upenn.edu>**20091230192350
 Ignore-this: bba2c0c30d5554612cc6e8bd59fee205
[X.A.CycleWS: export generalized 'doTo' function for performing an action on a workspace relative to the current one
Brent Yorgey <byorgey at cis.upenn.edu>**20091230191953
 Ignore-this: 7cf8efe7c45b501cbcea0943f667b77e
[new contrib module, X.A.DynamicWorkspaceGroups, for managing groups of workspaces on multi-head setups
Brent Yorgey <byorgey at cis.upenn.edu>**20091229165702
 Ignore-this: fc3e6932a95f57b36b4d8d4cc7f3e2d7
[new contrib module from Tomas Janousek, X.A.WorkspaceNames
Brent Yorgey <byorgey at cis.upenn.edu>**20091229163915
 Ignore-this: 5bc7caaf38647de51949a24498001474
[small tweak to battery logger
Brent Yorgey <byorgey at cis.upenn.edu>**20091227085641
 Ignore-this: 350dfed0cedd250cd9d4bd3391cbe034
[X.P.Shell, filter empty string from PATH
Tim Horton <tmhorton at gmail.com>**20091224033217
 Ignore-this: 1aec55452f917d0be2bff7fcf5937766
 doesDirectoryExist returns True if given an empty string using ghc <= 6.10.4.
 This causes getDirectoryContents to raise an exception and X.P.Shell does not
 render. This is only an issue if you have an empty string in your PATH.
 Using ghc == 6.12.1, doesDirectoryExist returns False given an empty string, so
 this should not be an issue in the future.
[Use imported xC_bottom_right_corner in A.MouseResize
Adam Vogt <vogt.adam at gmail.com>**20091227233705
 Ignore-this: 52794f788255159b91e68f2762c5f6a1
[X.A.MouseResize: assign an appropriate cursor for the resizing inpuwin
Tomas Janousek <tomi at nomi.cz>**20091227212140
 Ignore-this: d9ce96c2cd0312b6b5be4acee30a1da3
[Fix the createSession bug in spawnPipe
Spencer Janssen <spencerjanssen at gmail.com>**20091227003501
 Ignore-this: 2d7f8746eb657036d39f3b9aac22b3c9
 Both the new XMonad.Core.xfork function and spawnPipe call createSession, calling
 this function twice results in an error.
[Let the core know about MouseResizableTile's draggers, so they are stacked correctly
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091223145428
 Ignore-this: 7c096aba6b540ccf9b49c4ee86c6091a
[Update all uses of forkProcess to xfork
Spencer Janssen <spencerjanssen at gmail.com>**20091223064558
 Ignore-this: 963a4ddf1d2f4096bbb8969b173cd0c1
[Make X.L.Minimize explicitly mark minimized windows as boring
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091222214529
 Ignore-this: b1e8adf26ac87dede6c1b7a7d687411c
[Actions/Search: added openstreetmap
intrigeri at boum.org**20091222114545
 Ignore-this: fafc4680c8b59b7a044d995c1dacec9a
[Add a search predicate option to XMonad.Prompt
Mike Lundy <mike at fluffypenguin.org>**20091221025408
 Ignore-this: 8e8804eeb9650d38bc225e15887310da
[In D.Extending note how <+> can be used with keybindings.
Adam Vogt <vogt.adam at gmail.com>**20091220190739
 Ignore-this: ebea8ef8a835ed368fa06621add6519f
[Fix MultiToggle crashes with decorated layouts
Tomas Janousek <tomi at nomi.cz>**20091220004733
 Ignore-this: 9208f5da9f0de95464ea62cb45e8f291
 The problem was that certain layouts keep their "world" state in their value,
 which was thrown away and forgotten after ReleaseResources during toggle.
 In particular, decorated layouts store some X11 handles in them and
 allocate/deallocate it as appropriate. If any modification to their state is
 ignored, they may try to deallocate already deallocated memory, which results
 in a crash somewhere inside Xlib.
 This patch makes Transformers reversible so that nothing is ever ignored. As a
 side effect, layout transformers now do receive messages and messages for the
 base layout do not need the undo/reapply cycle -- we just pass messages to the
 current transformed layout and unapply the transformer when needed.
 (This, however, doesn't mean that the base layout is not asked to release
 resources on a transformer change -- we still need the transformer to release
 its resources and there's no way to do this without asking the base layout as
[TAG 0.9.1
Spencer Janssen <spencerjanssen at gmail.com>**20091216233651
 Ignore-this: 713d9dd89d775e30346f57a61038d308
[Bump version to 0.9.1
Spencer Janssen <spencerjanssen at gmail.com>**20091216232634
 Ignore-this: bcd799c3341ee6c69a259e1dca747cac
[Match X11 dependencies with xmonad's
Spencer Janssen <spencerjanssen at gmail.com>**20091216012630
 Ignore-this: bcbd6e3e5e2675cdac6f1d1b1bc09853
[Safer X11 version dependency
Spencer Janssen <spencerjanssen at gmail.com>**20091216005916
 Ignore-this: 6dc805a8a0c7a3d3369bc1d6d97d4f56
[Update Prompt for numlockMask changes
Spencer Janssen <spencerjanssen at gmail.com>**20091103222621
 Ignore-this: 4980e2fdf4c296a266590cc4acf76e1e
[Style changes in EwmhDesktops
Adam Vogt <vogt.adam at gmail.com>**20091219003824
 Ignore-this: 905eff9ed951955c8f62617b2d82302e
[Add support for fullscreen through the _NET_WM_STATE protocol
audunskaugen at gmail.com**20091214135119
 Ignore-this: 430ca3c6779e36383f8ce8e477ee9622
 This patch adds support for applications using the
 gtk_window_fullscreen function, and other applications using
 _NET_WM_STATE for the same purpose.
[X.L.MouseResizableTile: change description for mirrored variant
Tomas Janousek <tomi at nomi.cz>**20091211124218
 Ignore-this: dbc02fb777e35cdc15fb11979c1e983e
 The description for mirrored MouseResizableTile is now "Mirror
 MouseResizableTile", to follow the standard of other layouts that can be
 mirrored using the Mirror modifier.
[X.A.GridSelect: documentation typo fix
Tomas Janousek <tomi at nomi.cz>**20091211182515
 Ignore-this: 521bef2a73a9e969d7a96defb555177b
 spotted by Justin on IRC
[A.GridSelect shouldn't grab keys if there are no choices.
Adam Vogt <vogt.adam at gmail.com>**20091210183038
 Ignore-this: 48509f780120014a10b32e7289369f32
 Thanks thermal2008 in #xmonad for bringing up the corner case when gridselect
 is run with an empty list of choices.
[onScreen' variation for X () functions
Nils Schweinsberg <mail at n-sch.de>**20091209003717
 Ignore-this: 6a9644c729c2b60f94398260f3640e4d
[Added Bluetile's config
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091209150309
 Ignore-this: 641ae527ca6f615e81822b6f38f827e7
[BluetileCommands - a list of commands that Bluetile uses to communicate with its dock
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091208234431
 Ignore-this: 1a5a5e69c7c37d3ffe8d8e09496568de
[Golf / style change in U.ExtensibleState
Adam Vogt <vogt.adam at gmail.com>**20091208010506
 Ignore-this: c35bd85baae4700e14417ac7e07de959
[Change of X.A.OnScreen, more simple and predictable behaviour of onScreen, new functions: toggle(Greedy)OnScreen
Nils Schweinsberg <mail at n-sch.de>**20091207155050
 Ignore-this: c375250778758e401217bcad83567d3b
[Module to ensure that a dragged window always stays in front of all other windows
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091129004506
 Ignore-this: a8a389198ccc28a66686561d4d17e91b
[Decoration that allows to switch the position of windows by dragging them onto each other.
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091129003431
 Ignore-this: 38aff0f3beb1a1eb304219c4f3e85593
[A decoration with small buttons and a supporting module
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091129002416
 Ignore-this: 2d65133bc5b9ad29bad7d06780bdaa4
[XMonad.Actions.Search: finally fixed the internet archive search plugin
gwern0 at gmail.com**20091205033435
 Ignore-this: c78ecebced9bc8e39e6077ffa9f9f182
[XMonad.Actions.Search: in retrospect, a bit silly to make everyone go through SSL
gwern0 at gmail.com**20091205033318
 Ignore-this: 452b4e6efb83935fc1063ab695ae074d
[Prompt.hs: Corrected quit keybindings
Tim Horton <tmhorton at gmail.com>**20091203050041
 Ignore-this: e8cd2cd1d41f6807f68157ef37c631ea
[Extended decoration module with more hooks and consolidated some existing ones
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091128234310
 Ignore-this: 5a23af3009ecca2feb9a84f8c6f8ac33
[Extended decoration theme to contain extra static text that always appears in the title bar
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091024213928
 Ignore-this: 95f46d6b9ff716a2d8002a426c1012c8
[Extended paintAndWrite to allow for multiple strings to be written into the rectangle
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091024205111
 Ignore-this: eb7d32284b7f98145038dcaa14f8075e
[Added the alignment option 'AlignRightOffset'
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091024204513
 Ignore-this: 58cc00e1be669877e38a97e36b924969
[Prevent windows from being decorated that are too small to contain decoration.
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20090627094316
 Ignore-this: 39b806462bbd424f1206b635e9d506e1
[X.L.MouseResizableTile: keep draggers on the bottom of the window stack.
Tomas Janousek <tomi at nomi.cz>**20091126173413
 Ignore-this: 8089cf8ce53580090b045f4aebb1b899
[Use lookup instead of find in A.PerWorkspaceKeys
Adam Vogt <vogt.adam at gmail.com>**20091129032650
 Ignore-this: 7ecb043df4317365ff3d25b17303eed8
[Implemented smarter system of managing borders for BorderResize
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091122233651
 Ignore-this: 4775c082249e598a84c79b2e819f28b0
[X.H.DynamicLog: fix xmonadPropLog double-encoding of UTF-8
Tomas Janousek <tomi at nomi.cz>**20091121004829
 Ignore-this: bde612bbd1a19951f9718a03e737c4ac
 dynamicLogString utf-8 encodes its output, xmonadPropLog shouldn't do that
[X.H.DynamicLog: make documentation for 'dzen' and 'xmobar' slightly more clear
Brent Yorgey <byorgey at cis.upenn.edu>**20091121170739
 Ignore-this: c9a241677fda21ef93305fc3882f102e
[X.H.ManageDocks: ignore struts that cover an entire screen on that screen
Tomas Janousek <tomi at nomi.cz>**20091119145043
 Ignore-this: ad7bbf10c49c9f3e938cdc3d8588e202
 Imagine a screen layout like this:
    222222    <--- xmobar here
 When placing xmobar as indicated, the partial strut property indicates that an
 entire height of screen 1 is covered by the strut, as well as a few lines at
 the top of screen 2. The original code would create a screen rectangle of
 negative height and wreak havoc. This patch causes such strut to be ignored on
 the screen it covers entirely, resulting in the desired behaviour of a small
 strut at the top of screen 2.
 Please note that this semantics of _NET_WM_STRUT and _NET_WM_STRUT_PARTIAL is
 different to what is in wm-spec. The "correct" thing to do would be to discard
 the covered portion of screen 1 leaving two narrow areas at the sides, but
 this new behaviour is probably more desirable in many cases, at least for
 xmonad/xmobar users.
 The correct solution of having separate _NET_WM_STRUT_PARTIAL for each
 Xinerama screen was mentioned in wm-spec maillist in 2007, but has never
 really been proposed, discussed and included in wm-spec. Hence this "hack".
[Use imported 'fi' in PositionStoreHooks
Adam Vogt <vogt.adam at gmail.com>**20091119103112
 Ignore-this: 6563a3093083667c79aa491a6f59b805
[Changed interface of X.U.ExtensibleState
Daniel Schoepe <daniel.schoepe at gmail.com>**20091116171013
 Ignore-this: 9a830f9341e461628974890bab0bd65b
 Changed the interface of X.U.ExtensibleState to resemble that of
 Control.Monad.State and modified the modules that use it accordingly.
[PositionStoreFloat - a floating layout with support hooks
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091115184833
 Ignore-this: 8b1d0fcef1465356d72cb5f1f32413b6
[PositionStore utility to store information about position and size of a window
Jan Vornberger <jan.vornberger at informatik.uni-oldenburg.de>**20091108195735
 Ignore-this: 2f6e68a490deb75cba5d007b30c93fb2
[X.H.Urgencyhook fix minor doc bug
Anders Engstrom <ankaan at gmail.com>**20091115131121
 Ignore-this: 18b63bccedceb66c77b345a9300f1ac3
[X.H.DynamicLog fix minor indentation oddness
Anders Engstrom <ankaan at gmail.com>**20091115130707
 Ignore-this: 7f2c49eae5527874ca4499767f4167c4
[X.A.CycleWS cycle by tag group
Anders Engstrom <ankaan at gmail.com>**20091115130217
 Ignore-this: 909da8c00b47a31d04f59bd3751c60bc
 Allow grouping of workspaces, so that a user can cycle through those in the same group. Grouping is done by using a special character in the tag.
[Use less short names in X.Prompt
Adam Vogt <vogt.adam at gmail.com>**20091115025647
 Ignore-this: 1d27b8efc4d829a5642717c6f6426336
[Use io instead of liftIO in Prompt
Adam Vogt <vogt.adam at gmail.com>**20091115025301
 Ignore-this: cd4031b74cd5bb874cd2c3cc2cb087f2
['io' and 'fi' are defined outside of Prompt
Adam Vogt <vogt.adam at gmail.com>**20091115024001
 Ignore-this: 3426056362db9cbfde7d2f4edbfe6f36
[Use zipWithM_ instead of recursion in Prompt.printComplList
Adam Vogt <vogt.adam at gmail.com>**20091115023451
 Ignore-this: 2457500ed871ef120653a3d4ada13441
[Minor style changes in DynamicWorkspaces
Adam Vogt <vogt.adam at gmail.com>**20091115022751
 Ignore-this: 1a6018ab134e4420a949354575a8a110
[X.A.DynamicWorkspaces fix doc and add behaviour
Anders Engstrom <ankaan at gmail.com>**20091113233903
 Ignore-this: ab7c20a9c1b43ebc6a7f4700d988fb73
 Before this patch the documentation claims that it won't do anything on non-empty workspaces when it actually does. This patch fixes the documentation to reflect the actual behaviour, but also adds the behaviour promised by the documentation in other functions. It does not break configs. In addition it also provides functions to help removing empty workspaces when leaving them.
[Bypass more of stringToKeysym in U.Paste
Adam Vogt <vogt.adam at gmail.com>**20091114223726
 Ignore-this: 617c922647e9f49f5ecefa0eb1c65d3c
[rework XMonad.Util.Dzen
daniel at wagner-home.com**20091114051509
 Ignore-this: 16d93f91c54f7d195b1a418e6c0351c5
[generalize IO actions to MonadIO m => m actions
daniel at wagner-home.com**20091114023616
 Ignore-this: 2c801a27b0ffee34a2f0daca3778613a
 This should not cause any working configs to stop working, because IO is an instance of MonadIO, and because complete configs will pin down the type of the call to IO.  Note that XMonad.Config.Arossato is not a complete config, and so it needed some tweaks; with a main function, this should not be a problem.
[fix documentation to match implementation
daniel at wagner-home.com**20091114021328
 Ignore-this: 6dbbb118b139f443c40a573445a48d07
[Don't erase floating information with H.InsertPosition (Issue 334)
Adam Vogt <vogt.adam at gmail.com>**20091113161402
 Ignore-this: de1c03eb860ea25b390ee5c756b02997
[Rename gridselectViewWorkspace to gridselectWorkspace, add another example.
Adam Vogt <vogt.adam at gmail.com>**20091112211435
 Ignore-this: 462cf1c7f66ab97a1ce642977591a910
 The name should be more general to suggest uses other than just viewing other
[X.A.DynamicWorkspaces: fix addWorkspace and friends so they never add another copy of an existing workspace
Brent Yorgey <byorgey at cis.upenn.edu>**20091112201351
 Ignore-this: 5bfe8129707b038ed04383b7566b2323
[Trim whitespace in H.FloatNext
Adam Vogt <vogt.adam at gmail.com>**20091111022702
 Ignore-this: 1ad52678246fa1ac951169c2356ce10b
[Use ExtensibleState in H.FloatNext
Adam Vogt <vogt.adam at gmail.com>**20091111022513
 Ignore-this: 760d95a685af080466cb4164d1096423
[Make a haddock link direct in C.Desktop.
Adam Vogt <vogt.adam at gmail.com>**20091111013810
 Ignore-this: da724a7974c3de60f49996c1fe92d3fb
[Change A.TopicSpace haddocks to use block quotes.
Adam Vogt <vogt.adam at gmail.com>**20091111013241
 Ignore-this: 6f7f43d2715cfde62b9c05c7d9a0da2
[Add defaultTopicConfig, to allow adding more fields to TopicSpace later.
Adam Vogt <vogt.adam at gmail.com>**20091111012915
 Ignore-this: 6dad95769651a9a1ef8d771f81c91f8e
[X.A.WindowGo: fix haddock markup
Spencer Janssen <spencerjanssen at gmail.com>**20091111003256
 Ignore-this: c6a06de900ca8b67498abf5152e3d9ea
[Minor style corrections in X.U.SpawnOnce
Daniel Schoepe <daniel.schoepe at gmail.com>**20091109201543
 Ignore-this: 1264852c23b4f84b2580bf4567529c68
[Add gridselectViewWorkspace in X.A.GridSelect
Daniel Schoepe <daniel.schoepe at gmail.com>**20091109155815
 Ignore-this: 5543211e9e3fd325cb798b004635a525
`Henrique Abreu <hgabreu at gmail.com>'**20091104172727
 Ignore-this: 231ad417541bc3c17a1cb2dff139d55d
[Set buffering to LineBuffering in scripts/xmonadpropread.hs
Daniel Schoepe <daniel.schoepe at gmail.com>**20091108204106
 Ignore-this: 4e593fc1461fbbfb5b147c7c7702584e
 (Required for the script to work properly with tools like dzen)
[X.U.ExtensibleState: style
Spencer Janssen <spencerjanssen at gmail.com>**20091108182858
 Ignore-this: f189da75ad2c57ae9cca48eaf69a6bad
[X.A.DynamicWorkspaces: new 'addWorkspacePrompt' method
Brent Yorgey <byorgey at cis.upenn.edu>**20091108170503
 Ignore-this: a3992b1b7938be80d8fd2a5a503a4042
[Remove defaulting when using NoMonomorphismRestriction in H.EwmhDesktops
Adam Vogt <vogt.adam at gmail.com>**20091107195255
 Ignore-this: ca3939842639c94ca4fd1ff6624319c1
[Update A.TopicSpace to use extensible state. No config changes required.
Adam Vogt <vogt.adam at gmail.com>**20091107194502
 Ignore-this: 7a82aad512bb727b3447de0faa4a210f
[Alphabetize exposed-modules
Spencer Janssen <spencerjanssen at gmail.com>**20091107174946
 Ignore-this: 919684aea7747a756b303f9b34a2870b
[Use X.U.SpawnOnce in my config
Spencer Janssen <spencerjanssen at gmail.com>**20091107174615
 Ignore-this: fe8f5f75136128280942771ec429f09a
[Add XMonad.Util.SpawnOnce
Spencer Janssen <spencerjanssen at gmail.com>**20091107173820
 Ignore-this: 8d4657bbaa8dbeb1d0f9d22293bfef19
[Store deserialized data after reading in X.U.ExtensibleState
Daniel Schoepe <daniel.schoepe at gmail.com>**20091107103832
 Ignore-this: 192beca56e9437292bd3f16451ae9e66
[Fixed conflict between X.U.ExtensibleState and X.C.Sjanssen
Daniel Schoepe <daniel.schoepe at gmail.com>**20091107103619
 Ignore-this: 80f4bb218574d7c528af17473c6e4f66
[Use X.U.ExtensibleState instead of IORefs
Daniel Schoepe <daniel.schoepe at gmail.com>**20091106115601
 Ignore-this: e0e80e31e51dfe76f2b2ed597892cbba
 This patch changes SpawnOn, DynamicHooks and UrgencyHooks to
 use X.U.ExtensibleState instead of IORefs. This simplifies the
 usage of those modules thus also breaking current configs.
[Add X.U.ExtensibleState
Daniel Schoepe <daniel.schoepe at gmail.com>**20091106115336
 Ignore-this: d80d9d0c10a53fb71a375e432bd29344
[My config uses xmonadPropLog now
Spencer Janssen <spencerjanssen at gmail.com>**20091107005230
 Ignore-this: 8f16b8bea86dfcd3739f1566f5897578
[Add xmonadpropread script
Spencer Janssen <spencerjanssen at gmail.com>**20091107004858
 Ignore-this: 8cc7ed36ec1126d0139638148f9642e8
[Add experimental xmonadPropLog function
Spencer Janssen <spencerjanssen at gmail.com>**20091107004624
 Ignore-this: f09b2c11b16a3af993b63d1b39566120
[XMonad.Actions.Search: imdb search URL tweak for bug #33
gwern0 at gmail.com**20091103222330
 Ignore-this: bae5e6d3ec6c4b6591016ece9dffb202
[fix window rectangle calculation in X.A.UpdatePointer
Tomas Janousek <tomi at nomi.cz>**20091026154918
 Ignore-this: ad0c3a020b802854919c7827faa001ad
[Clean imports for L.BoringWindows
Adam Vogt <vogt.adam at gmail.com>**20091103140649
 Ignore-this: 56946a652329390dbdd63746ca23ee8e
[I maintain L.BoringWindows
Adam Vogt <vogt.adam at gmail.com>**20091103140509
 Ignore-this: de853972b4c1c4cefa2dc29e68828d5d
[Inline tupadd function in A.GridSelect
Adam Vogt <vogt.adam at gmail.com>**20091101190312
 Ignore-this: 458968154303ab865c304f387d6ac83b
[Add functions to access the current input in X.Prompt
Daniel Schoepe <daniel.schoepe at gmail.com>**20091030235033
 Ignore-this: 3f568c1266d85dcaa5722b19bbbd61dd
[Remove putSelection, fixes #317
Spencer Janssen <spencerjanssen at gmail.com>**20091030224354
 Ignore-this: 6cfd6d92e1d133bc9e3cbb7c8339f735
[Implement hasProperty in terms of runQuery in U.WindowProperties
Adam Vogt <vogt.adam at gmail.com>**20091031154945
 Ignore-this: 1c351bc436e0e323dc25d8f5ff734dcb
 This addresses issue 302 for unicode titles by actually using the complicated
 XMonad.ManageHook.title code, instead of reimplementing it with stringProperty
 (which doesn't appear to handle unicode).
[X.L.MultiCol constructor 0 NWin bugfig
Anders Engstrom <ankaan at gmail.com>**20091029105633
 Ignore-this: e6a24f581593424461a8675984d14d25
 Fix bug where the constructor did not accept catch-all columns. Also some minor cleaning.
[Fix typo in H.FadeInactive documentation
Adam Vogt <vogt.adam at gmail.com>**20091029165736
 Ignore-this: b2af487cd382416160d5540b7f210464
[X.H.ManageHelpers: added currentWs that returns the current workspace
Ismael Carnales <icarnales at gmail.com>**20091028193519
 Ignore-this: dcd3dac6bd741d26747807691f125637
[X.L.MultiColumns bugfix and formating
Anders Engstrom <ankaan at gmail.com>**20091027131741
 Ignore-this: 6978f485d18adb8bf81cf6c8e0d0332
 Fix bug where a column list of insufficient length could be used to find the column of the window. Also fix formating to conform better with standards.
[X.L.MultiColumns NWin shrinkning fix
Anders Engstrom <ankaan at gmail.com>**20091027005932
 Ignore-this: 9ba40ee14ec12c3885173817eac2b564
 Fixed a bug where the list containing the number of windows in each column was allowed the shrink if a column was unused.
[New Layout X.L.MultiColumns
Anders Engstrom <ankaan at gmail.com>**20091024175155
 Ignore-this: a2d3d2eee52c28eab7d125f6b621cada
 New layout inspired the realization that I was switching between Mirror Tall and Mirror ThreeCol depending on how many windows there were on the workspace. This layout will make those changes automatically.
[Changing behaviour of ppUrgent with X.H.DynamicLog
mail at n-sch.de**20090910010411
 Ignore-this: 3882f36d5c49e53628485c1570bf136a
 Currently, the ppUrgent method is an addition to the ppHidden method.
 This doesn't make any sense since it is in fact possible to get urgent
 windows on the current and visible screens. So I've raised the ppUrgent
 printer to be above ppCurrent/ppVisible and dropped its dependency on
 In addition to that this makes it a lot more easier to define a more
 custom ppUrgent printer, since you don't have to "undo" the ppHidden
 printer anymore. This also basicly removes the need for dzenStrip,
 although I just changed the description.
 -- McManiaC / Nils
[fix X.U.Run.spawnPipe fd leak
Tomas Janousek <tomi at nomi.cz>**20091025210246
 Ignore-this: 24375912d505963fafc917a63d0e79a0
[TAG 0.9
Spencer Janssen <spencerjanssen at gmail.com>**20091026013449
 Ignore-this: 542b6105d6deed65e12d1f91c666b0b2
Patch bundle hash:

More information about the xmonad mailing list