Automatically remove empty workspaces.
Automatically remove empty workspaces.
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