Automatically remove empty workspaces.

Ilya V. Portnov [2011-04-29 09:24:57]
Automatically remove empty workspaces.
Filename
lib/CommonFunctions.hs
xmonad.hs
diff --git a/lib/CommonFunctions.hs b/lib/CommonFunctions.hs
index d85b1e5..c3c14e3 100644
--- a/lib/CommonFunctions.hs
+++ b/lib/CommonFunctions.hs
@@ -7,6 +7,8 @@ import System.Environment (getEnv)
 import Control.Monad (liftM,when,filterM)
 import qualified Data.Map as M
 import Data.Maybe
+import Data.Monoid
+import Graphics.X11.Xlib.Extras

 import XMonad
 import qualified XMonad.StackSet as W
@@ -75,6 +77,9 @@ chooseLayout name = sendMessage $ JumpToLayout name
 getLayout :: X String
 getLayout = withWindowSet (\s -> return $ description $ W.layout $ W.workspace $ W.current s)

+getCurrentWorkspace :: X String
+getCurrentWorkspace = withWindowSet (\s -> return $ W.tag $ W.workspace $ W.current s)
+
 ---------------------------------------------------
 --
 spawnMany lst = foldr1 (>>) (map spawn lst)
@@ -189,3 +194,8 @@ trashWindow = do
   moveToWorkspace "trash"


+-- On window unmap, remove current workspace if it's empty.
+unmapEventHook :: Event -> X All
+unmapEventHook e@(UnmapEvent {}) = removeEmptyWorkspace >> return (All True)
+unmapEventHook _ = return (All True)
+
diff --git a/xmonad.hs b/xmonad.hs
index 15c96fb..be839fa 100644
--- a/xmonad.hs
+++ b/xmonad.hs
@@ -1,3 +1,5 @@
+import Data.Monoid (mappend)
+
 import XMonad

 import XMonad.Util.EZConfig (additionalKeysP)
@@ -5,6 +7,7 @@ import XMonad.Util.EZConfig (additionalKeysP)
 -- import XMonad.Config.Gnome
 import XMonad.Config.Kde (kde4Config)

+import XMonad.Actions.DynamicWorkspaces
 import XMonad.Actions.GroupNavigation (historyHook)

 -- Import hooks to support EWMH and other compatibility hooks
@@ -18,6 +21,7 @@ import KeyBindings   (myMouseBindings, myKeys, addKeys)
 import Layouts       (myLayout)
 import MyManageHooks (myManageHook)
 import Themes
+import CommonFunctions (unmapEventHook)
 import GroupsSetup   (myApps)

 ------------------------------------------------------------------------
@@ -44,7 +48,7 @@ main =  do
       -- hooks, layouts
         startupHook        = spawn "xcompmgr",
         layoutHook         = myLayout,
-        handleEventHook    = minimizeEventHook,
+        handleEventHook    = mappend unmapEventHook minimizeEventHook,
         manageHook         = baseManageHook <+> myManageHook,
         logHook            = do
                                 baseLogHook
ViewGit