diff options
Diffstat (limited to 'src/Xmobar/Plugins/Monitors')
-rw-r--r-- | src/Xmobar/Plugins/Monitors/Batt.hs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/Xmobar/Plugins/Monitors/Batt.hs b/src/Xmobar/Plugins/Monitors/Batt.hs index 9f74835..bebbf1c 100644 --- a/src/Xmobar/Plugins/Monitors/Batt.hs +++ b/src/Xmobar/Plugins/Monitors/Batt.hs @@ -15,6 +15,8 @@ module Xmobar.Plugins.Monitors.Batt ( battConfig, runBatt, runBatt' ) where +import System.Process (system) +import Control.Monad (void) import Control.Exception (SomeException, handle) import Xmobar.Plugins.Monitors.Common import System.FilePath ((</>)) @@ -36,6 +38,8 @@ data BattOpts = BattOpts , highWColor :: Maybe String , lowThreshold :: Float , highThreshold :: Float + , onLowAction :: Maybe String + , actionThreshold :: Float , onlineFile :: FilePath , scale :: Float , onIconPattern :: Maybe IconPattern @@ -52,6 +56,8 @@ defaultOpts = BattOpts , lowWColor = Nothing , mediumWColor = Nothing , highWColor = Nothing + , onLowAction = Nothing + , actionThreshold = 6 , lowThreshold = 10 , highThreshold = 12 , onlineFile = "AC/online" @@ -74,6 +80,9 @@ options = , Option "H" ["hight"] (ReqArg (\x o -> o { highThreshold = read x }) "") "" , Option "f" ["online"] (ReqArg (\x o -> o { onlineFile = x }) "") "" , Option "s" ["scale"] (ReqArg (\x o -> o {scale = read x}) "") "" + , Option "a" ["action"] (ReqArg (\x o -> o { onLowAction = Just x }) "") "" + , Option "A" ["action-threshold"] + (ReqArg (\x o -> o { actionThreshold = read x }) "") "" , Option "" ["on-icon-pattern"] (ReqArg (\x o -> o { onIconPattern = Just $ parseIconPattern x }) "") "" , Option "" ["off-icon-pattern"] (ReqArg (\x o -> @@ -172,6 +181,14 @@ sortOn f = mostCommonDef :: Eq a => a -> [a] -> a mostCommonDef x xs = head $ last $ [x] : sortOn length (group xs) +maybeAlert :: BattOpts -> Float -> IO () +maybeAlert opts left = + case onLowAction opts of + Nothing -> do return () + Just x -> if not (isNaN left) && actionThreshold opts >= (100 * left) + then void $ system x + else return () + readBatteries :: BattOpts -> [Files] -> IO Result readBatteries opts bfs = do let bfs' = filter (/= NoFiles) bfs @@ -192,6 +209,7 @@ readBatteries opts bfs = | time == 0 = Idle | ac = Charging | otherwise = Discharging + maybeAlert opts left return $ if isNaN left then NA else Result left watts time racst runBatt :: [String] -> Monitor String |