diff --git a/CHANGES.md b/CHANGES.md index a18defd2..e062f740 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,15 @@ ### Breaking Changes + * `XMonad.Hooks.StatusBars` + + - Move status bar functions from the `IO` to the `X` monad to + allow them to look up information from `X`, like the screen + width. Existing configurations may need to use `io` from + `XMonad.Core` or `liftIO` from `Control.Monad.IO.Class` in + order to lift any existing `IO StatusBarConfig` values into + `X StatusBarConfig` values. + ### New Modules * `XMonad.Actions.Profiles`. diff --git a/XMonad/Hooks/StatusBar.hs b/XMonad/Hooks/StatusBar.hs index c477f251..ac419cce 100644 --- a/XMonad/Hooks/StatusBar.hs +++ b/XMonad/Hooks/StatusBar.hs @@ -452,7 +452,7 @@ instance ExtensionClass ActiveSBs where -- 'avoidStruts', check 'dynamicEasySBs'. -- -- Heavily inspired by "XMonad.Hooks.DynamicBars" -dynamicSBs :: (ScreenId -> IO StatusBarConfig) -> XConfig l -> XConfig l +dynamicSBs :: (ScreenId -> X StatusBarConfig) -> XConfig l -> XConfig l dynamicSBs f conf = addAfterRescreenHook (updateSBs f) $ conf { startupHook = startupHook conf >> killAllStatusBars >> updateSBs f , logHook = logHook conf >> logSBs @@ -462,7 +462,7 @@ dynamicSBs f conf = addAfterRescreenHook (updateSBs f) $ conf -- resulting config and adds 'avoidStruts' to the -- layout. dynamicEasySBs :: LayoutClass l Window - => (ScreenId -> IO StatusBarConfig) + => (ScreenId -> X StatusBarConfig) -> XConfig l -> XConfig (ModifiedLayout AvoidStruts l) dynamicEasySBs f conf = @@ -471,7 +471,7 @@ dynamicEasySBs f conf = -- | Given the function to create status bars, update -- the status bars by killing those that shouldn't be -- visible anymore and creates any missing status bars -updateSBs :: (ScreenId -> IO StatusBarConfig) -> X () +updateSBs :: (ScreenId -> X StatusBarConfig) -> X () updateSBs f = do actualScreens <- withWindowSet $ return . map W.screen . W.screens (toKeep, toKill) <- @@ -480,7 +480,7 @@ updateSBs f = do cleanSBs (map snd toKill) -- Create new status bars if needed let missing = actualScreens \\ map fst toKeep - added <- io $ traverse (\s -> (s,) <$> f s) missing + added <- traverse (\s -> (s,) <$> f s) missing traverse_ (sbStartupHook . snd) added XS.put (ASB (toKeep ++ added))