diff options
Diffstat (limited to 'src/XMonad/Layout/TopicDir.hs')
-rw-r--r-- | src/XMonad/Layout/TopicDir.hs | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/src/XMonad/Layout/TopicDir.hs b/src/XMonad/Layout/TopicDir.hs index fa2eb62..47e732e 100644 --- a/src/XMonad/Layout/TopicDir.hs +++ b/src/XMonad/Layout/TopicDir.hs @@ -1,4 +1,9 @@ -{-# LANGUAGE DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses, TypeSynonymInstances, PatternGuards #-} +{-# LANGUAGE DeriveDataTypeable #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE PatternGuards #-} +{-# LANGUAGE TypeSynonymInstances #-} +{-# LANGUAGE UnicodeSyntax #-} module XMonad.Layout.TopicDir ( -- * Usage @@ -8,24 +13,25 @@ module XMonad.Layout.TopicDir ( TopicDir, ) where -import qualified Data.Map as M -import Control.Exception -import System.Directory (setCurrentDirectory, getCurrentDirectory) +import Control.Exception +import qualified Data.Map as M +import System.Directory (getCurrentDirectory, + setCurrentDirectory) -import XMonad hiding (focus) -import XMonad.Util.Run (runProcessWithInput) -import XMonad.Prompt (XPConfig) -import XMonad.Prompt.Directory (directoryPrompt) -import XMonad.Layout.LayoutModifier -import XMonad.StackSet (tag, currentTag) +import XMonad hiding (focus) +import XMonad.Layout.LayoutModifier +import XMonad.Prompt (XPConfig) +import XMonad.Prompt.Directory (directoryPrompt) +import XMonad.StackSet (currentTag, tag) +import XMonad.Util.Run (runProcessWithInput) -econst :: Monad m => a -> IOException -> m a +econst ∷ Monad m ⇒ a → IOException → m a econst = const . return -data Chdir = Chdir String deriving ( Typeable ) +newtype Chdir = Chdir String deriving ( Typeable ) instance Message Chdir -data TopicDir a = TopicDir (M.Map WorkspaceId String, String) +newtype TopicDir a = TopicDir (M.Map WorkspaceId String, String) deriving (Read, Show) instance LayoutModifier TopicDir Window where @@ -36,7 +42,7 @@ instance LayoutModifier TopicDir Window where Nothing -> return () runLayout w r where - mdir :: WorkspaceId -> Maybe String + mdir ∷ WorkspaceId → Maybe String mdir tc | tc == tag w && d == "" = M.lookup tc tds | tc == tag w = Just d | otherwise = Nothing @@ -48,17 +54,16 @@ instance LayoutModifier TopicDir Window where return $ Just $ TopicDir (dds, wd') | otherwise = return Nothing -topicDir :: M.Map WorkspaceId String -> l a -> ModifiedLayout TopicDir l a +topicDir ∷ M.Map WorkspaceId String → l a → ModifiedLayout TopicDir l a topicDir m = ModifiedLayout (TopicDir (m, "")) -cleanDir :: String -> X String +cleanDir ∷ String → X String cleanDir x = scd x >> io getCurrentDirectory -scd :: String -> X () +scd ∷ String → X () scd x = do x' <- io (runProcessWithInput "bash" [] ("echo -n " ++ x) `catch` econst x) catchIO $ setCurrentDirectory x' -changeDir :: XPConfig -> X () +changeDir ∷ XPConfig → X () changeDir c = directoryPrompt c "Set working directory: " (sendMessage . Chdir) - |