From 9cd448266a81bf845d1808e4ad0ba95325925611 Mon Sep 17 00:00:00 2001 From: Ilya V. Portnov Date: Fri, 29 Apr 2011 15:24:57 +0600 Subject: [PATCH] Automatically remove empty workspaces. --- lib/CommonFunctions.hs | 10 ++++++++++ xmonad.hs | 6 +++++- 2 files changed, 15 insertions(+), 1 deletions(-) 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 -- 1.7.2.3