summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2013-10-27 16:20:25 +0100
committerJose Antonio Ortega Ruiz <jao@gnu.org>2013-10-27 16:20:25 +0100
commit3d2af8a47332235d6556d2d2a40f7392269cf0b0 (patch)
tree75f75e4dd2bbae0106b77e333213ee6c9b6d4754
parent7e89ff8e2007e057a0b00a5a9c1fd953c565db25 (diff)
downloadxmobar-3d2af8a47332235d6556d2d2a40f7392269cf0b0.tar.gz
xmobar-3d2af8a47332235d6556d2d2a40f7392269cf0b0.tar.bz2
New N/A string monitor option (cf. #119)
-rw-r--r--news.md13
-rw-r--r--readme.md4
-rw-r--r--src/Plugins/Monitors/Batt.hs2
-rw-r--r--src/Plugins/Monitors/Common.hs43
-rw-r--r--src/Plugins/Monitors/CoreTemp.hs2
-rw-r--r--src/Plugins/Monitors/CpuFreq.hs6
-rw-r--r--src/Plugins/Monitors/Mem.hs2
-rw-r--r--src/Plugins/Monitors/Net.hs4
-rw-r--r--src/Plugins/Monitors/ThermalZone.hs5
-rw-r--r--src/Plugins/Monitors/Volume.hs10
-rw-r--r--src/Plugins/Monitors/Weather.hs2
-rw-r--r--src/Plugins/Monitors/Wireless.hs9
12 files changed, 59 insertions, 43 deletions
diff --git a/news.md b/news.md
index bbefd47..cf62423 100644
--- a/news.md
+++ b/news.md
@@ -1,12 +1,12 @@
% xmobar - Release notes
-## Vesion 0.19
+## Version 0.19 (October 27, 2013)
_New features_
- New monitor `BatteryN`, a variant of `BatteryP` that lets you
specify the name of the monitor in the template.
- - Support for configuration file living in XDG_CONFIG_HOME (see
+ - Support for configuration file living in `XDG_CONFIG_HOME` (see
[github #99]).
- `Com` uses safer `runInteractiveProcess` instead of spawning a
shell (David McLean). If you're using shell expansion in your
@@ -15,12 +15,16 @@ _New features_
- New plugin `UnsafeStdinReader` that allows actions from stdin.
Now it's possible to have clickable workspaces!
(Thiago Negri, see [github #125]).
+ - New monitor configuration option (`-x` or `--nastring`) that allows
+ specifying what string to display when a monitor is not available
+ (defaulting to "N/A"). Cf. [github #119].
+
_Bug fixes_
- - Honour the width options `-w`, `-m` and `-M` in battery monitors
+ - Using the width options `-w`, `-m` and `-M` in battery monitors
watts display ([github #118]).
- - Honour the `-d` option in `CoreTemp` ([github #115])
+ - Using the `-d` option in `CoreTemp` ([github #115])
- Fix for systems not supporting PCRE regular expressions: we use
now BCEs, so regex-compat should be enough everywhere (see
[github #117]).
@@ -33,6 +37,7 @@ _Bug fixes_
[github #125]: https://github.com/jaor/xmobar/issues/125
[issue #65]: http://code.google.com/p/xmobar/issues/detail?id=65
[github #118]: https://github.com/jaor/xmobar/issues/118
+[github #119]: https://github.com/jaor/xmobar/issues/119
[github #127]: https://github.com/jaor/xmobar/issues/127
## Version 0.18 (June 5, 2013)
diff --git a/readme.md b/readme.md
index c8dde7e..f995921 100644
--- a/readme.md
+++ b/readme.md
@@ -616,6 +616,10 @@ These are the options available for all monitors below:
- Total number of characters used to draw bars.
- Long option: `--bwidth`
- Default value: 10
+- `-x` _string_ N/A string
+ - String to be used when the monitor is not available
+ - Long option: `--nastring`
+ - Default value: "N/A"
Commands' arguments must be set as a list. E.g.:
diff --git a/src/Plugins/Monitors/Batt.hs b/src/Plugins/Monitors/Batt.hs
index 410aec6..4976b61 100644
--- a/src/Plugins/Monitors/Batt.hs
+++ b/src/Plugins/Monitors/Batt.hs
@@ -165,7 +165,7 @@ runBatt' bfs args = do
do l <- fmtPercent x
ws <- fmtWatts w opts suffix d
parseTemplate (l ++ [s, fmtTime $ floor t, ws])
- NA -> return "N/A"
+ NA -> getConfigValue naString
where fmtPercent :: Float -> Monitor [String]
fmtPercent x = do
let x' = minimum [1, x]
diff --git a/src/Plugins/Monitors/Common.hs b/src/Plugins/Monitors/Common.hs
index 973c5f9..58bfef3 100644
--- a/src/Plugins/Monitors/Common.hs
+++ b/src/Plugins/Monitors/Common.hs
@@ -89,6 +89,7 @@ data MConfig =
, barFore :: IORef String
, barWidth :: IORef Int
, useSuffix :: IORef Bool
+ , naString :: IORef String
}
-- | from 'http:\/\/www.haskell.org\/hawiki\/MonadState'
@@ -132,7 +133,8 @@ mkMConfig tmpl exprts =
bf <- newIORef "#"
bw <- newIORef 10
up <- newIORef False
- return $ MC nc l lc h hc t e p d mn mx pc pr bb bf bw up
+ na <- newIORef "N/A"
+ return $ MC nc l lc h hc t e p d mn mx pc pr bb bf bw up na
data Opts = HighColor String
| NormalColor String
@@ -151,27 +153,29 @@ data Opts = HighColor String
| BarFore String
| BarWidth String
| UseSuffix String
+ | NAString String
options :: [OptDescr Opts]
options =
[
- Option "H" ["High"] (ReqArg High "number") "The high threshold"
- , Option "L" ["Low"] (ReqArg Low "number") "The low threshold"
- , Option "h" ["high"] (ReqArg HighColor "color number") "Color for the high threshold: ex \"#FF0000\""
- , Option "n" ["normal"] (ReqArg NormalColor "color number") "Color for the normal threshold: ex \"#00FF00\""
- , Option "l" ["low"] (ReqArg LowColor "color number") "Color for the low threshold: ex \"#0000FF\""
- , Option "t" ["template"] (ReqArg Template "output template") "Output template."
- , Option "S" ["suffix"] (ReqArg UseSuffix "True/False") "Use % to display percents or other suffixes."
- , Option "d" ["ddigits"] (ReqArg DecDigits "decimal digits") "Number of decimal digits to display."
- , Option "p" ["ppad"] (ReqArg PercentPad "percent padding") "Minimum percentage width."
- , Option "m" ["minwidth"] (ReqArg MinWidth "minimum width") "Minimum field width"
- , Option "M" ["maxwidth"] (ReqArg MaxWidth "maximum width") "Maximum field width"
- , Option "w" ["width"] (ReqArg Width "fixed width") "Fixed field width"
- , Option "c" ["padchars"] (ReqArg PadChars "padding chars") "Characters to use for padding"
- , Option "a" ["align"] (ReqArg PadAlign "padding alignment") "'l' for left padding, 'r' for right"
- , Option "b" ["bback"] (ReqArg BarBack "bar background") "Characters used to draw bar backgrounds"
- , Option "f" ["bfore"] (ReqArg BarFore "bar foreground") "Characters used to draw bar foregrounds"
- , Option "W" ["bwidth"] (ReqArg BarWidth "bar width") "Bar width"
+ Option "H" ["High"] (ReqArg High "number") "The high threshold"
+ , Option "L" ["Low"] (ReqArg Low "number") "The low threshold"
+ , Option "h" ["high"] (ReqArg HighColor "color number") "Color for the high threshold: ex \"#FF0000\""
+ , Option "n" ["normal"] (ReqArg NormalColor "color number") "Color for the normal threshold: ex \"#00FF00\""
+ , Option "l" ["low"] (ReqArg LowColor "color number") "Color for the low threshold: ex \"#0000FF\""
+ , Option "t" ["template"] (ReqArg Template "output template") "Output template."
+ , Option "S" ["suffix"] (ReqArg UseSuffix "True/False") "Use % to display percents or other suffixes."
+ , Option "d" ["ddigits"] (ReqArg DecDigits "decimal digits") "Number of decimal digits to display."
+ , Option "p" ["ppad"] (ReqArg PercentPad "percent padding") "Minimum percentage width."
+ , Option "m" ["minwidth"] (ReqArg MinWidth "minimum width") "Minimum field width"
+ , Option "M" ["maxwidth"] (ReqArg MaxWidth "maximum width") "Maximum field width"
+ , Option "w" ["width"] (ReqArg Width "fixed width") "Fixed field width"
+ , Option "c" ["padchars"] (ReqArg PadChars "padding chars") "Characters to use for padding"
+ , Option "a" ["align"] (ReqArg PadAlign "padding alignment") "'l' for left padding, 'r' for right"
+ , Option "b" ["bback"] (ReqArg BarBack "bar background") "Characters used to draw bar backgrounds"
+ , Option "f" ["bfore"] (ReqArg BarFore "bar foreground") "Characters used to draw bar foregrounds"
+ , Option "W" ["bwidth"] (ReqArg BarWidth "bar width") "Bar width"
+ , Option "x" ["nastring"] (ReqArg NAString "N/A string") "String used when the monitor is not available"
]
doArgs :: [String] -> ([String] -> Monitor String) -> Monitor String
@@ -205,7 +209,8 @@ doConfigOptions (o:oo) =
BarBack s -> setConfigValue s barBack
BarFore s -> setConfigValue s barFore
BarWidth w -> setConfigValue (nz w) barWidth
- UseSuffix u -> setConfigValue (bool u) useSuffix) >> next
+ UseSuffix u -> setConfigValue (bool u) useSuffix
+ NAString s -> setConfigValue s naString) >> next
runM :: [String] -> IO MConfig -> ([String] -> Monitor String) -> Int
-> (String -> IO ()) -> IO ()
diff --git a/src/Plugins/Monitors/CoreTemp.hs b/src/Plugins/Monitors/CoreTemp.hs
index c6f98da..5109070 100644
--- a/src/Plugins/Monitors/CoreTemp.hs
+++ b/src/Plugins/Monitors/CoreTemp.hs
@@ -36,9 +36,9 @@ coreTempConfig = mkMConfig
runCoreTemp :: [String] -> Monitor String
runCoreTemp _ = do
dn <- getConfigValue decDigits
+ failureMessage <- getConfigValue naString
let path = ["/sys/bus/platform/devices/coretemp.", "/temp", "_input"]
lbl = Just ("_label", read . (dropWhile (not . isDigit)))
divisor = 1e3 :: Double
- failureMessage = "CoreTemp: N/A"
show' = showDigits (max 0 dn)
checkedDataRetrieval failureMessage path lbl (/divisor) show'
diff --git a/src/Plugins/Monitors/CpuFreq.hs b/src/Plugins/Monitors/CpuFreq.hs
index 6209ef3..8334d1a 100644
--- a/src/Plugins/Monitors/CpuFreq.hs
+++ b/src/Plugins/Monitors/CpuFreq.hs
@@ -30,10 +30,10 @@ cpuFreqConfig = mkMConfig
-- |
-- Function retrieves monitor string holding the cpu frequency (or frequencies)
runCpuFreq :: [String] -> Monitor String
-runCpuFreq _ =
+runCpuFreq _ = do
let path = ["/sys/devices/system/cpu/cpu", "/cpufreq/scaling_cur_freq"]
divisor = 1e6 :: Double
- failureMessage = "CpuFreq: N/A"
fmt x | x < 1 = (show (round (x * 1000) :: Integer)) ++ "MHz"
| otherwise = (show x) ++ "GHz"
- in checkedDataRetrieval failureMessage path Nothing (/divisor) fmt
+ failureMessage <- getConfigValue naString
+ checkedDataRetrieval failureMessage path Nothing (/divisor) fmt
diff --git a/src/Plugins/Monitors/Mem.hs b/src/Plugins/Monitors/Mem.hs
index 3cf46c7..7e9341f 100644
--- a/src/Plugins/Monitors/Mem.hs
+++ b/src/Plugins/Monitors/Mem.hs
@@ -52,7 +52,7 @@ formatMem (r:fr:xs) =
fs <- showPercentWithColors fr
s <- mapM (showWithColors f) xs
return (ub:fb:rs:fs:s)
-formatMem _ = return $ replicate 10 "N/A"
+formatMem _ = replicate 10 `fmap` getConfigValue naString
runMem :: [String] -> Monitor String
runMem _ =
diff --git a/src/Plugins/Monitors/Net.hs b/src/Plugins/Monitors/Net.hs
index b8adc74..2117a2d 100644
--- a/src/Plugins/Monitors/Net.hs
+++ b/src/Plugins/Monitors/Net.hs
@@ -1,7 +1,7 @@
-----------------------------------------------------------------------------
-- |
-- Module : Plugins.Monitors.Net
--- Copyright : (c) 2011, 2012 Jose Antonio Ortega Ruiz
+-- Copyright : (c) 2011, 2012, 2013 Jose Antonio Ortega Ruiz
-- (c) 2007-2010 Andrea Rossato
-- License : BSD-style (see LICENSE)
--
@@ -114,7 +114,7 @@ printNet nd =
(tx, tb) <- formatNet t
parseTemplate [d,rx,tx,rb,tb]
NI _ -> return ""
- NA -> return "N/A"
+ NA -> getConfigValue naString
parseNet :: NetDevRef -> String -> IO NetDev
parseNet nref nd = do
diff --git a/src/Plugins/Monitors/ThermalZone.hs b/src/Plugins/Monitors/ThermalZone.hs
index 55fb2ca..d692191 100644
--- a/src/Plugins/Monitors/ThermalZone.hs
+++ b/src/Plugins/Monitors/ThermalZone.hs
@@ -1,7 +1,7 @@
------------------------------------------------------------------------------
-- |
-- Module : Plugins.Monitors.ThermalZone
--- Copyright : (c) 2011 Jose Antonio Ortega Ruiz
+-- Copyright : (c) 2011, 2013 Jose Antonio Ortega Ruiz
-- License : BSD3-style (see LICENSE)
--
-- Maintainer : jao@gnu.org
@@ -39,5 +39,4 @@ runThermalZone args = do
then do mdegrees <- io $ B.readFile file >>= parse
temp <- showWithColors show (mdegrees `quot` 1000)
parseTemplate [ temp ]
- else return "N/A"
-
+ else getConfigValue naString
diff --git a/src/Plugins/Monitors/Volume.hs b/src/Plugins/Monitors/Volume.hs
index f3d0f4c..76831ff 100644
--- a/src/Plugins/Monitors/Volume.hs
+++ b/src/Plugins/Monitors/Volume.hs
@@ -1,7 +1,7 @@
-----------------------------------------------------------------------------
-- |
-- Module : Plugins.Monitors.Volume
--- Copyright : (c) 2011 Thomas Tuegel
+-- Copyright : (c) 2011, 2013 Thomas Tuegel
-- License : BSD-style (see LICENSE)
--
-- Maintainer : Jose A. Ortega Ruiz <jao@gnu.org>
@@ -135,7 +135,7 @@ runVolume mixerName controlName argv = do
liftMaybe = fmap (liftM2 (,) (fmap fst) (fmap snd)) . sequenceA
liftMonitor :: Maybe (Monitor String) -> Monitor String
- liftMonitor Nothing = return unavailable
+ liftMonitor Nothing = unavailable
liftMonitor (Just m) = m
getDB :: Maybe Volume -> Monitor (Maybe Integer)
@@ -152,11 +152,11 @@ runVolume mixerName controlName argv = do
getSw (Just s) = io $ getChannel FrontLeft s
getFormatDB :: VolumeOpts -> Maybe Integer -> Monitor String
- getFormatDB _ Nothing = return unavailable
+ getFormatDB _ Nothing = unavailable
getFormatDB opts (Just d) = formatDb opts d
getFormatSwitch :: VolumeOpts -> Maybe Bool -> Monitor String
- getFormatSwitch _ Nothing = return unavailable
+ getFormatSwitch _ Nothing = unavailable
getFormatSwitch opts (Just sw) = formatSwitch opts sw
- unavailable = "N/A"
+ unavailable = getConfigValue naString
diff --git a/src/Plugins/Monitors/Weather.hs b/src/Plugins/Monitors/Weather.hs
index 6c685ec..bb3d5da 100644
--- a/src/Plugins/Monitors/Weather.hs
+++ b/src/Plugins/Monitors/Weather.hs
@@ -149,7 +149,7 @@ formatWeather [(WI st ss y m d h w v sk tC tF dp r p)] =
do cel <- showWithColors show tC
far <- showWithColors show tF
parseTemplate [st, ss, y, m, d, h, w, v, sk, cel, far, dp, show r , show p ]
-formatWeather _ = return "N/A"
+formatWeather _ = getConfigValue naString
runWeather :: [String] -> Monitor String
runWeather str =
diff --git a/src/Plugins/Monitors/Wireless.hs b/src/Plugins/Monitors/Wireless.hs
index 8d32c99..f8192dc 100644
--- a/src/Plugins/Monitors/Wireless.hs
+++ b/src/Plugins/Monitors/Wireless.hs
@@ -24,11 +24,14 @@ wirelessConfig =
runWireless :: [String] -> Monitor String
runWireless (iface:_) = do
wi <- io $ getWirelessInfo iface
+ na <- getConfigValue naString
let essid = wiEssid wi
qlty = fromIntegral $ wiQuality wi
- e = if essid == "" then "N/A" else essid
+ e = if essid == "" then na else essid
ep <- showWithPadding e
- q <- if qlty >= 0 then showPercentWithColors (qlty/100) else showWithPadding ""
+ q <- if qlty >= 0
+ then showPercentWithColors (qlty / 100)
+ else showWithPadding ""
qb <- showPercentBar qlty (qlty / 100)
parseTemplate [ep, q, qb]
-runWireless _ = return ""
+runWireless _ = getConfigValue naString