aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Layout/WorkspaceDir.hs
diff options
context:
space:
mode:
Diffstat (limited to 'XMonad/Layout/WorkspaceDir.hs')
-rw-r--r--XMonad/Layout/WorkspaceDir.hs11
1 files changed, 8 insertions, 3 deletions
diff --git a/XMonad/Layout/WorkspaceDir.hs b/XMonad/Layout/WorkspaceDir.hs
index e5f15ce..a5dbea4 100644
--- a/XMonad/Layout/WorkspaceDir.hs
+++ b/XMonad/Layout/WorkspaceDir.hs
@@ -29,7 +29,7 @@ module XMonad.Layout.WorkspaceDir (
changeDir
) where
-import System.Directory ( setCurrentDirectory )
+import System.Directory ( setCurrentDirectory, getCurrentDirectory )
import XMonad
import XMonad.Operations ( sendMessage )
@@ -63,13 +63,18 @@ data WorkspaceDir a = WorkspaceDir String deriving ( Read, Show )
instance LayoutModifier WorkspaceDir a where
hook (WorkspaceDir s) = scd s
- handleMess (WorkspaceDir _) m = return $ do Chdir wd <- fromMessage m
- Just (WorkspaceDir wd)
+ handleMess (WorkspaceDir _) m
+ | Just (Chdir wd) <- fromMessage m = do wd' <- cleanDir wd
+ return $ Just $ WorkspaceDir wd'
+ | otherwise = return Nothing
workspaceDir :: LayoutClass l a => String -> l a
-> ModifiedLayout WorkspaceDir l a
workspaceDir s = ModifiedLayout (WorkspaceDir s)
+cleanDir :: String -> X String
+cleanDir x = scd x >> io getCurrentDirectory
+
scd :: String -> X ()
scd x = do x' <- io (runProcessWithInput "bash" [] ("echo -n " ++ x) `catch` \_ -> return x)
catchIO $ setCurrentDirectory x'