diff options
Diffstat (limited to 'XMonad')
-rw-r--r-- | XMonad/Layout/WorkspaceDir.hs | 11 |
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' |