summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2011-01-04 21:35:13 +0100
committerJose Antonio Ortega Ruiz <jao@gnu.org>2011-01-04 21:35:13 +0100
commit65bead03bb04256ae2001f6c1d2388b476057ec3 (patch)
tree107196248358a51a55d9068783ab9e1c10cb4a20
parent6e96535bedfa86e5b8a5bb59e70dac69207af02a (diff)
downloadxmobar-65bead03bb04256ae2001f6c1d2388b476057ec3.tar.gz
xmobar-65bead03bb04256ae2001f6c1d2388b476057ec3.tar.bz2
Battery: support for non-standard locations of AC/online (issue 36)
We provied a new monitor-specific flag (-f) to specify the location of the file.
-rw-r--r--README1
-rw-r--r--src/Plugins/Monitors/Batt.hs30
2 files changed, 17 insertions, 14 deletions
diff --git a/README b/README
index 44660f5..7655709 100644
--- a/README
+++ b/README
@@ -435,6 +435,7 @@ Monitors have default aliases.
- `-m`: color to display power lower than the `-H` threshold
- `-h`: color to display power highter than the `-H` threshold
- `-p`: color to display positive power (battery charging)
+ - `-f`: file `/sys/class/power_supply` with AC info (default: AC/online)
- Variables that can be used with the `-t`/`--template` argument:
`left`, `leftbar`, `timeleft`, `watts`, `acstatus`
- Default template: `Batt: <watts>, <left>% / <timeleft>`
diff --git a/src/Plugins/Monitors/Batt.hs b/src/Plugins/Monitors/Batt.hs
index 11b2d6c..102f635 100644
--- a/src/Plugins/Monitors/Batt.hs
+++ b/src/Plugins/Monitors/Batt.hs
@@ -1,7 +1,8 @@
-----------------------------------------------------------------------------
-- |
-- Module : Plugins.Monitors.Batt
--- Copyright : (c) Andrea Rossato, 2010 Petr Rockai, 2010 Jose A Ortega
+-- Copyright : (c) 2010 Andrea Rossato, Petr Rockai
+-- (c) 2010, 2011 Jose A Ortega
-- License : BSD-style (see LICENSE)
--
-- Maintainer : Jose A. Ortega Ruiz <jao@gnu.org>
@@ -16,6 +17,7 @@ module Plugins.Monitors.Batt ( battConfig, runBatt, runBatt' ) where
import qualified Data.ByteString.Lazy.Char8 as B
import Plugins.Monitors.Common
+import System.FilePath ((</>))
import System.Posix.Files (fileExist)
import System.Console.GetOpt
@@ -28,6 +30,7 @@ data BattOpts = BattOpts
, highWColor :: Maybe String
, lowThreshold :: Float
, highThreshold :: Float
+ , onlineFile :: FilePath
}
defaultOpts :: BattOpts
@@ -40,6 +43,7 @@ defaultOpts = BattOpts
, highWColor = Nothing
, lowThreshold = -12
, highThreshold = -10
+ , onlineFile = "AC/online"
}
options :: [OptDescr (BattOpts -> BattOpts)]
@@ -52,6 +56,7 @@ options =
, Option "h" ["high"] (ReqArg (\x o -> o { highWColor = Just x }) "") ""
, Option "L" ["lowt"] (ReqArg (\x o -> o { lowThreshold = read x }) "") ""
, Option "H" ["hight"] (ReqArg (\x o -> o { highThreshold = read x }) "") ""
+ , Option "f" ["online"] (ReqArg (\x o -> o { onlineFile = x }) "") ""
]
parseOpts :: [String] -> IO BattOpts
@@ -98,12 +103,13 @@ batteryFiles bat =
, f_current = prefix ++ "/current_now"
, f_voltage = prefix ++ "/voltage_now" }
-haveAc :: IO (Maybe Bool)
-haveAc = do know <- fileExist $ base ++ "/AC/online"
- if know
- then do s <- B.unpack `fmap` catRead (base ++ "/AC/online")
- return $ Just $ s == "1\n"
- else return Nothing
+haveAc :: FilePath -> IO Bool
+haveAc f = do
+ know <- fileExist ofile
+ if know
+ then fmap ((== "1\n") . B.unpack) (catRead ofile)
+ else return False
+ where ofile = base </> f
readBattery :: Files -> IO Battery
readBattery NoFiles = return $ Battery 0 0 0 0
@@ -121,17 +127,13 @@ readBattery files =
readBatteries :: BattOpts -> [Files] -> IO Result
readBatteries opts bfs =
do bats <- mapM readBattery (take 3 bfs)
- ac' <- haveAc
- let ac = (ac' == Just True)
- sign = if ac then 1 else -1
+ ac <- haveAc (onlineFile opts)
+ let sign = if ac then 1 else -1
left = sum (map now bats) / sum (map full bats)
watts = sign * sum (map voltage bats) * sum (map current bats)
time = if watts == 0 then 0 else sum $ map time' bats -- negate sign
time' b = (if ac then full b - now b else now b) / (sign * watts)
- acstr = case ac' of
- Nothing -> "?"
- Just True -> onString opts
- Just False -> offString opts
+ acstr = if ac then onString opts else offString opts
return $ if isNaN left then NA else Result left watts time acstr
runBatt :: [String] -> Monitor String