53 lines
1.7 KiB
Haskell
53 lines
1.7 KiB
Haskell
|
module Util.PerWorkspaceConfig
|
||
|
( WorkspaceConfig (..)
|
||
|
, WorkspaceConfigs
|
||
|
, switchToWorkspace
|
||
|
, defaultWorkspaceConfig
|
||
|
, perWorkspaceAction
|
||
|
, perWorkspaceTermAction
|
||
|
-- , myLayoutHack
|
||
|
)
|
||
|
where
|
||
|
|
||
|
import XMonad
|
||
|
import XMonad.Core (LayoutClass)
|
||
|
import Control.Monad (when)
|
||
|
|
||
|
import qualified Data.Map as M
|
||
|
import qualified XMonad.StackSet as W
|
||
|
|
||
|
data WorkspaceConfig l =
|
||
|
WorkspaceConfig
|
||
|
{ switchAction :: X ()
|
||
|
, startAction :: X ()
|
||
|
, keyAction :: X ()
|
||
|
, termAction :: X ()
|
||
|
}
|
||
|
|
||
|
type WorkspaceConfigs l = M.Map WorkspaceId (WorkspaceConfig l)
|
||
|
|
||
|
defaultWorkspaceConfig = WorkspaceConfig
|
||
|
{ switchAction = return ()
|
||
|
, startAction = return ()
|
||
|
, keyAction = return ()
|
||
|
, termAction = spawn "urxvtc"
|
||
|
}
|
||
|
|
||
|
whenLookup wsId cfg a =
|
||
|
when (M.member wsId cfg) (a $ cfg M.! wsId)
|
||
|
|
||
|
switchToWorkspace :: WorkspaceConfigs l -> WorkspaceId -> X ()
|
||
|
switchToWorkspace cfg wsId = do
|
||
|
windows $ W.greedyView wsId
|
||
|
wins <- gets (W.integrate' . W.stack . W.workspace . W.current . windowset)
|
||
|
when (null wins) $ whenLookup wsId cfg startAction
|
||
|
whenLookup wsId cfg switchAction
|
||
|
|
||
|
perWorkspaceAction :: WorkspaceConfigs l -> X ()
|
||
|
perWorkspaceAction cfg = withWindowSet $ \s -> whenLookup (W.currentTag s) cfg keyAction
|
||
|
|
||
|
perWorkspaceTermAction :: WorkspaceConfigs l -> X ()
|
||
|
perWorkspaceTermAction cfg = withWindowSet $ \s -> case M.lookup (W.currentTag s) cfg of
|
||
|
Just x -> termAction x
|
||
|
_ -> termAction defaultWorkspaceConfig
|