aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Hooks/ServerMode.hs
diff options
context:
space:
mode:
Diffstat (limited to 'XMonad/Hooks/ServerMode.hs')
-rw-r--r--XMonad/Hooks/ServerMode.hs13
1 files changed, 8 insertions, 5 deletions
diff --git a/XMonad/Hooks/ServerMode.hs b/XMonad/Hooks/ServerMode.hs
index 66e3943..cb99831 100644
--- a/XMonad/Hooks/ServerMode.hs
+++ b/XMonad/Hooks/ServerMode.hs
@@ -75,23 +75,26 @@ import XMonad.Actions.Commands
-- @~\/.xmonad\/xmonad.hs@:
--
-- > import XMonad.Hooks.ServerMode
+-- > import XMonad.Actions.Commands
--
-- Then edit your @handleEventHook@ by adding the 'serverModeEventHook':
--
--- > main = xmonad defaultConfig { handleEventHook = serverModeEventHook }
+-- > main = xmonad defaultConfig { handleEventHook = serverModeEventHook defaultCommands }
--
data ServerMode = ServerMode deriving ( Show, Read )
-serverModeEventHook :: Event -> X All
-serverModeEventHook (ClientMessageEvent {ev_message_type = mt, ev_data = dt}) = do
+-- | Executes a command of the list when receiving its index via a special ClientMessageEvent
+-- (indexing starts at 1)
+serverModeEventHook :: X [(String,X ())] -> Event -> X All
+serverModeEventHook cmdAction (ClientMessageEvent {ev_message_type = mt, ev_data = dt}) = do
d <- asks display
a <- io $ internAtom d "XMONAD_COMMAND" False
when (mt == a && dt /= []) $ do
- cl <- defaultCommands
+ cl <- cmdAction
let listOfCommands = map (uncurry (++)) . zip (map show ([1..] :: [Int])) . map ((++) " - " . fst)
case lookup (fromIntegral (head dt) :: Int) (zip [1..] cl) of
Just (c,_) -> runCommand' c
Nothing -> mapM_ (io . hPutStrLn stderr) . listOfCommands $ cl
return (All True)
-serverModeEventHook _ = return (All True)
+serverModeEventHook _ _ = return (All True)