Add a startupHook.

The only thing I am not sure about here is at what exact point the 
startupHook should get run.  I picked a place that seems to make sense: 
as late as possible, right before entering the main loop.  That way all
the layouts/workspaces/other state are set up and the startupHook can
manipulate them.
This commit is contained in:
Brent Yorgey 2008-02-04 19:24:45 +00:00
parent cc2754d82a
commit 9d9acba45f
4 changed files with 22 additions and 3 deletions

View File

@ -25,11 +25,11 @@ module XMonad.Config (defaultConfig) where
-- Useful imports -- Useful imports
-- --
import XMonad.Core as XMonad hiding import XMonad.Core as XMonad hiding
(workspaces,manageHook,numlockMask,keys,logHook,borderWidth,mouseBindings (workspaces,manageHook,numlockMask,keys,logHook,startupHook,borderWidth,mouseBindings
,defaultGaps,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor ,defaultGaps,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor
,focusFollowsMouse) ,focusFollowsMouse)
import qualified XMonad.Core as XMonad import qualified XMonad.Core as XMonad
(workspaces,manageHook,numlockMask,keys,logHook,borderWidth,mouseBindings (workspaces,manageHook,numlockMask,keys,logHook,startupHook,borderWidth,mouseBindings
,defaultGaps,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor ,defaultGaps,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor
,focusFollowsMouse) ,focusFollowsMouse)
@ -134,6 +134,10 @@ manageHook = composeAll
logHook :: X () logHook :: X ()
logHook = return () logHook = return ()
-- | Perform an arbitrary action at xmonad startup.
startupHook :: X ()
startupHook = return ()
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Extensible layouts -- Extensible layouts
-- --
@ -256,6 +260,7 @@ defaultConfig = XConfig
, XMonad.modMask = defaultModMask , XMonad.modMask = defaultModMask
, XMonad.keys = keys , XMonad.keys = keys
, XMonad.logHook = logHook , XMonad.logHook = logHook
, XMonad.startupHook = startupHook
, XMonad.mouseBindings = mouseBindings , XMonad.mouseBindings = mouseBindings
, XMonad.manageHook = manageHook , XMonad.manageHook = manageHook
, XMonad.focusFollowsMouse = focusFollowsMouse } , XMonad.focusFollowsMouse = focusFollowsMouse }

View File

@ -88,6 +88,7 @@ data XConfig l = XConfig
-- ^ The mouse bindings -- ^ The mouse bindings
, borderWidth :: !Dimension -- ^ The border width , borderWidth :: !Dimension -- ^ The border width
, logHook :: !(X ()) -- ^ The action to perform when the windows set is changed , logHook :: !(X ()) -- ^ The action to perform when the windows set is changed
, startupHook :: !(X ()) -- ^ The action to perform on startup
, focusFollowsMouse :: !Bool -- ^ Whether window entry events can change focus , focusFollowsMouse :: !Bool -- ^ Whether window entry events can change focus
} }

View File

@ -116,6 +116,8 @@ xmonad initxmc = do
-- manage the as-yet-unmanaged windows -- manage the as-yet-unmanaged windows
mapM_ manage (ws \\ W.allWindows winset) mapM_ manage (ws \\ W.allWindows winset)
startupHook initxmc
-- main loop, for all you HOF/recursion fans out there. -- main loop, for all you HOF/recursion fans out there.
forever_ $ handle =<< io (nextEvent dpy e >> getEvent e) forever_ $ handle =<< io (nextEvent dpy e >> getEvent e)

View File

@ -247,6 +247,16 @@ myFocusFollowsMouse = True
-- --
myLogHook = return () myLogHook = return ()
------------------------------------------------------------------------
-- Startup hook
-- Perform an arbitrary action each time xmonad starts or is restarted
-- with mod-q. Used by, e.g., XMonad.Layout.PerWorkspace to initialize
-- per-workspace layout choices.
--
-- By default, do nothing.
myStartupHook = return ()
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Now run xmonad with all the defaults we set up. -- Now run xmonad with all the defaults we set up.
@ -279,5 +289,6 @@ defaults = defaultConfig {
-- hooks, layouts -- hooks, layouts
layoutHook = myLayout, layoutHook = myLayout,
manageHook = myManageHook, manageHook = myManageHook,
logHook = myLogHook logHook = myLogHook,
startupHook = myStartupHook
} }