xmonad-config/lib/Xmobar/Plugins/Common.hs

53 lines
1.5 KiB
Haskell
Raw Normal View History

module Xmobar.Plugins.Common
2021-11-24 01:14:23 -05:00
( chooseColor
, startListener
, procSignalMatch
2021-11-25 00:12:00 -05:00
, na
, fromSingletonVariant
, withDBusClientConnection
, Callback
2021-11-27 13:24:13 -05:00
, displayMaybe
, displayMaybe'
2021-11-24 01:14:23 -05:00
)
where
import Control.Monad
2021-11-24 01:14:23 -05:00
import DBus
import DBus.Client
import DBus.Internal
2021-11-24 01:14:23 -05:00
import XMonad.Hooks.DynamicLog (xmobarColor)
2021-11-24 01:14:23 -05:00
type Callback = String -> IO ()
2021-11-24 01:14:23 -05:00
startListener :: IsVariant a => MatchRule -> (Client -> IO [Variant])
-> ([Variant] -> SignalMatch a) -> (a -> IO String) -> Callback
2021-11-25 00:12:00 -05:00
-> Client -> IO ()
startListener rule getProp fromSignal toColor cb client = do
reply <- getProp client
2021-11-27 13:24:13 -05:00
displayMaybe cb toColor $ fromSingletonVariant reply
void $ addMatchCallback rule (procMatch . fromSignal) client
2021-11-24 01:14:23 -05:00
where
procMatch = procSignalMatch cb toColor
2021-11-27 13:24:13 -05:00
procSignalMatch :: Callback -> (a -> IO String) -> SignalMatch a -> IO ()
procSignalMatch cb f = withSignalMatch (displayMaybe cb f)
chooseColor :: String -> String -> String -> Bool -> String
chooseColor text colorOn colorOff state =
xmobarColor (if state then colorOn else colorOff) "" text
2021-11-25 00:12:00 -05:00
na :: String
na = "N/A"
2021-11-27 13:24:13 -05:00
displayMaybe :: Callback -> (a -> IO String) -> Maybe a -> IO ()
displayMaybe cb f = cb <=< maybe (return na) f
displayMaybe' :: Callback -> (a -> IO ()) -> Maybe a -> IO ()
displayMaybe' cb = maybe (cb na)
withDBusClientConnection :: Bool -> Callback -> (Client -> IO ()) -> IO ()
2021-11-27 13:24:13 -05:00
withDBusClientConnection sys cb f = displayMaybe' cb f =<< getDBusClient sys