mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-13 19:25:52 -07:00
Let the user decide which commands to use in X.H.ServerMode
This commit is contained in:
@@ -24,6 +24,7 @@ import qualified Data.Map as M
|
|||||||
import XMonad hiding ( (|||) )
|
import XMonad hiding ( (|||) )
|
||||||
import qualified XMonad.StackSet as W
|
import qualified XMonad.StackSet as W
|
||||||
|
|
||||||
|
import XMonad.Actions.Commands
|
||||||
import XMonad.Actions.CycleWS
|
import XMonad.Actions.CycleWS
|
||||||
import XMonad.Hooks.DynamicLog hiding (xmobar)
|
import XMonad.Hooks.DynamicLog hiding (xmobar)
|
||||||
import XMonad.Hooks.ManageDocks
|
import XMonad.Hooks.ManageDocks
|
||||||
@@ -98,7 +99,7 @@ arossatoConfig = do
|
|||||||
, normalBorderColor = "white"
|
, normalBorderColor = "white"
|
||||||
, focusedBorderColor = "black"
|
, focusedBorderColor = "black"
|
||||||
, keys = newKeys
|
, keys = newKeys
|
||||||
, handleEventHook = serverModeEventHook
|
, handleEventHook = serverModeEventHook defaultCommands
|
||||||
, focusFollowsMouse = False
|
, focusFollowsMouse = False
|
||||||
}
|
}
|
||||||
where
|
where
|
||||||
|
@@ -75,23 +75,26 @@ import XMonad.Actions.Commands
|
|||||||
-- @~\/.xmonad\/xmonad.hs@:
|
-- @~\/.xmonad\/xmonad.hs@:
|
||||||
--
|
--
|
||||||
-- > import XMonad.Hooks.ServerMode
|
-- > import XMonad.Hooks.ServerMode
|
||||||
|
-- > import XMonad.Actions.Commands
|
||||||
--
|
--
|
||||||
-- Then edit your @handleEventHook@ by adding the 'serverModeEventHook':
|
-- 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 )
|
data ServerMode = ServerMode deriving ( Show, Read )
|
||||||
|
|
||||||
serverModeEventHook :: Event -> X All
|
-- | Executes a command of the list when receiving its index via a special ClientMessageEvent
|
||||||
serverModeEventHook (ClientMessageEvent {ev_message_type = mt, ev_data = dt}) = do
|
-- (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
|
d <- asks display
|
||||||
a <- io $ internAtom d "XMONAD_COMMAND" False
|
a <- io $ internAtom d "XMONAD_COMMAND" False
|
||||||
when (mt == a && dt /= []) $ do
|
when (mt == a && dt /= []) $ do
|
||||||
cl <- defaultCommands
|
cl <- cmdAction
|
||||||
let listOfCommands = map (uncurry (++)) . zip (map show ([1..] :: [Int])) . map ((++) " - " . fst)
|
let listOfCommands = map (uncurry (++)) . zip (map show ([1..] :: [Int])) . map ((++) " - " . fst)
|
||||||
case lookup (fromIntegral (head dt) :: Int) (zip [1..] cl) of
|
case lookup (fromIntegral (head dt) :: Int) (zip [1..] cl) of
|
||||||
Just (c,_) -> runCommand' c
|
Just (c,_) -> runCommand' c
|
||||||
Nothing -> mapM_ (io . hPutStrLn stderr) . listOfCommands $ cl
|
Nothing -> mapM_ (io . hPutStrLn stderr) . listOfCommands $ cl
|
||||||
return (All True)
|
return (All True)
|
||||||
serverModeEventHook _ = return (All True)
|
serverModeEventHook _ _ = return (All True)
|
||||||
|
Reference in New Issue
Block a user