-------------------------------------------------------------------------- {{{ -- | -- Module : Commands -- Copyright : (c) Mads N Noe 2010 -- Maintainer : mail (@) madsnoe.dk -- License : as-is -- -- Settings for XMonad.Actions.Commands. -- -------------------------------------------------------------------------- }}} module Commands where -- Haskell modules import qualified Data.Map as M import Data.IORef (IORef) import Data.List import Data.Maybe import System.Exit (exitWith, ExitCode(..) ) -- XMonad modules import XMonad import XMonad.Actions.Commands hiding (workspaceCommands) import XMonad.Actions.WindowGo import qualified XMonad.StackSet as W -- Custom modules import App import Config import DMenu -- | Given a list of command\/action pairs, prompt the user to choose a -- command and return the corresponding action. -- runCommand :: [(String, X ())] -> X () runCommand = do let m = commandMap $ dmenuCommands choice <- dmenu (M.keys m) fromMaybe (return ()) (M.lookup choice m) -- | Commands for DMenu. dmenuCommands :: [(String, X ())] dmenuCommands = [ ("view-summon" , windows $ W.view summonWorkspaceTag) , ("view-hidden" , windows $ W.view hiddenWorkspaceTag) -- , ("restart" , restart "xmonad" True) , ("restart-no-resume" , restart "xmonad" False) , ("refresh" , refresh) , ("quit" , io $ exitWith ExitSuccess) ] -- | Commands for ServerMode. -- TODO: integrate with dzen. smCommands :: X [(String, X ())] smCommands = do wsCmds <- workspaceCommands return $ take 10 (cycle wsCmds) ++ otherCommands where otherCommands = [ ("focus-vim" , raiseNext q_vims) ] q_vims = className =? "Gvim" <||> (className =? "XTerm" <&&> fmap (isPrefixOf "vim:") title) -- | Generate a list of commands to switch to. workspaceCommands :: X [(String, X ())] workspaceCommands = do ws <- asks $ workspaces . config return $ map makeEntry ws where makeEntry w = ("view-" ++ w, windows $ W.view w) -- -- | Generate a list of commands dealing with multiple screens. -- screenCommands :: [(String, X ())] -- screenCommands = [((m ++ show sc), screenWorkspace (fromIntegral sc) >>= flip whenJust (windows . f)) -- | sc <- [0, 1]::[Int] -- TODO: adapt to screen changes -- , (f, m) <- [(view, "screen"), (shift, "screen-to-")] -- ]