X.H.DynamicIcons: Add X.H.StatusBar support

This commit is contained in:
Yecine Megdiche 2021-10-04 18:22:49 +02:00
parent f470f18cf0
commit 8ef05975c7

View File

@ -10,7 +10,7 @@
-- Stability : unstable -- Stability : unstable
-- Portability : unportable -- Portability : unportable
-- --
-- Dynamically augment workspace names logged to a status bar via DynamicLog -- Dynamically augment workspace names logged to a status bar
-- based on the contents (windows) of the workspace. -- based on the contents (windows) of the workspace.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
@ -19,7 +19,7 @@ module XMonad.Hooks.DynamicIcons (
-- $usage -- $usage
-- * Creating Dynamic Icons -- * Creating Dynamic Icons
dynamicLogIconsWithPP, appIcon, iconsPP, dynamicLogIconsWithPP, appIcon,
-- * Customization -- * Customization
dynamicIconsPP, getWorkspaceIcons, dynamicIconsPP, getWorkspaceIcons,
@ -55,11 +55,10 @@ import XMonad.Prelude (for, maybeToList, (<&>), (<=<), (>=>))
-- > , className =? "Spotify" <||> className =? "spotify" --> appIcon "阮" -- > , className =? "Spotify" <||> className =? "spotify" --> appIcon "阮"
-- > ] -- > ]
-- --
-- then you can add the hook to your config: -- then you can add it to your "XMonad.Hooks.StatusBar" config:
-- --
-- > main = xmonad $ … $ def -- > myBar = statusBarProp "xmobar" (iconsPP myIcons myPP)
-- > { logHook = dynamicLogIconsWithPP myIcons xmobarPP -- > main = xmonad . withSB myBar $ … $ def
-- > , … }
-- --
-- Here is an example of this -- Here is an example of this
-- --
@ -73,6 +72,18 @@ import XMonad.Prelude (for, maybeToList, (<&>), (<=<), (>=>))
-- advanced example how to do that: -- advanced example how to do that:
-- --
-- > myIconConfig = def{ iconConfigIcons = myIcons, iconConfigFmt = iconsFmtAppend concat } -- > myIconConfig = def{ iconConfigIcons = myIcons, iconConfigFmt = iconsFmtAppend concat }
-- > myBar = statusBarProp "xmobar" (clickablePP =<< dynamicIconsPP myIconConfig myPP)
-- > main = xmonad . withSB myBar . … $ def
--
-- This can be also used with "XMonad.Hooks.DynamicLog":
--
-- > main = xmonad $ … $ def
-- > { logHook = dynamicLogIconsWithPP myIcons xmobarPP
-- > , … }
--
-- or with more customziation:
--
-- > myIconConfig = def{ iconConfigIcons = myIcons, iconConfigFmt = iconsFmtAppend concat }
-- > main = xmonad $ … $ def -- > main = xmonad $ … $ def
-- > { logHook = xmonadPropLog =<< dynamicLogString =<< clickablePP =<< -- > { logHook = xmonadPropLog =<< dynamicLogString =<< clickablePP =<<
-- > dynamicIconsPP myIconConfig xmobarPP -- > dynamicIconsPP myIconConfig xmobarPP
@ -87,9 +98,15 @@ appIcon = pure . pure
dynamicLogIconsWithPP :: Query [String] -- ^ The 'IconSet' to use dynamicLogIconsWithPP :: Query [String] -- ^ The 'IconSet' to use
-> PP -- ^ The 'PP' to alter -> PP -- ^ The 'PP' to alter
-> X () -- ^ The resulting 'X' action -> X () -- ^ The resulting 'X' action
dynamicLogIconsWithPP q = dynamicLogWithPP <=< dynamicIconsPP def{ iconConfigIcons = q } dynamicLogIconsWithPP q = dynamicLogWithPP <=< iconsPP q
-- | Modify "XMonad.Hooks.DynamicLog"\'s pretty-printing format to augment -- | Adjusts the 'PP' with the given 'IconSet'
iconsPP :: Query [String] -- ^ The 'IconSet' to use
-> PP -- ^ The 'PP' to alter
-> X PP -- ^ The resulting 'X PP'
iconsPP q = dynamicIconsPP def{ iconConfigIcons = q }
-- | Modify a pretty-printer, 'PP', to augment
-- workspace names with icons based on the contents (windows) of the workspace. -- workspace names with icons based on the contents (windows) of the workspace.
dynamicIconsPP :: IconConfig -> PP -> X PP dynamicIconsPP :: IconConfig -> PP -> X PP
dynamicIconsPP ic pp = getWorkspaceIcons ic <&> \ren -> pp{ ppRename = ppRename pp >=> ren } dynamicIconsPP ic pp = getWorkspaceIcons ic <&> \ren -> pp{ ppRename = ppRename pp >=> ren }