summaryrefslogtreecommitdiffhomepage
path: root/src/Xmobar/Plugins/Monitors/Disk.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Xmobar/Plugins/Monitors/Disk.hs')
-rw-r--r--src/Xmobar/Plugins/Monitors/Disk.hs19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/Xmobar/Plugins/Monitors/Disk.hs b/src/Xmobar/Plugins/Monitors/Disk.hs
index 0305d78..6af99a1 100644
--- a/src/Xmobar/Plugins/Monitors/Disk.hs
+++ b/src/Xmobar/Plugins/Monitors/Disk.hs
@@ -31,6 +31,7 @@ data DiskIOOpts = DiskIOOpts
{ totalIconPattern :: Maybe IconPattern
, writeIconPattern :: Maybe IconPattern
, readIconPattern :: Maybe IconPattern
+ , contiguous :: Bool
}
parseDiskIOOpts :: [String] -> IO DiskIOOpts
@@ -42,6 +43,7 @@ parseDiskIOOpts argv =
{ totalIconPattern = Nothing
, writeIconPattern = Nothing
, readIconPattern = Nothing
+ , contiguous = False
}
options =
[ Option "" ["total-icon-pattern"] (ReqArg (\x o ->
@@ -50,6 +52,7 @@ parseDiskIOOpts argv =
o { writeIconPattern = Just $ parseIconPattern x}) "") ""
, Option "" ["read-icon-pattern"] (ReqArg (\x o ->
o { readIconPattern = Just $ parseIconPattern x}) "") ""
+ , Option "c" ["contiguous"] (NoArg (\o -> o {contiguous = True})) ""
]
diskIOConfig :: IO MConfig
@@ -66,6 +69,7 @@ diskIOConfig = mkMConfig "" ["total", "read", "write"
data DiskUOpts = DiskUOpts
{ freeIconPattern :: Maybe IconPattern
, usedIconPattern :: Maybe IconPattern
+ , contiguousU :: Bool
}
parseDiskUOpts :: [String] -> IO DiskUOpts
@@ -76,12 +80,14 @@ parseDiskUOpts argv =
where defaultOpts = DiskUOpts
{ freeIconPattern = Nothing
, usedIconPattern = Nothing
+ , contiguousU = False
}
options =
[ Option "" ["free-icon-pattern"] (ReqArg (\x o ->
o { freeIconPattern = Just $ parseIconPattern x}) "") ""
, Option "" ["used-icon-pattern"] (ReqArg (\x o ->
o { usedIconPattern = Just $ parseIconPattern x}) "") ""
+ , Option "c" ["contiguous"] (NoArg (\o -> o {contiguousU = True})) ""
]
diskUConfig :: IO MConfig
@@ -147,25 +153,26 @@ mountedData dref devs = do
return $ map (parseDev (zipWith diff dt' dt)) devs
where diff (dev, xs) (_, ys) = (dev, zipWith (-) xs ys)
+
parseDev :: [(DevName, [Float])] -> DevName -> (DevName, [Float])
parseDev dat dev =
case find ((==dev) . fst) dat of
Nothing -> (dev, [0, 0, 0])
Just (_, xs) ->
- let r = xs !! 2
- w = xs !! 6
+ let r = 4096 * xs !! 2
+ w = 4096 * xs !! 6
t = r + w
rSp = speed r (xs !! 3)
wSp = speed w (xs !! 7)
sp = speed t (xs !! 3 + xs !! 7)
- speed x d = if d == 0 then 0 else 500 * x / d
+ speed x d = if d == 0 then 0 else x / d
dat' = if length xs > 6
then [sp, rSp, wSp, t, r, w]
else [0, 0, 0, 0, 0, 0]
in (dev, dat')
speedToStr :: Float -> String
-speedToStr = showWithUnits 2 1
+speedToStr = showWithUnits 2 1 . (/ 1024)
sizeToStr :: Integer -> String
sizeToStr = showWithUnits 3 0 . fromIntegral
@@ -205,7 +212,7 @@ runDiskIO dref disks argv = do
dev <- io $ mountedOrDiskDevices (map fst disks)
dat <- io $ mountedData dref (map fst dev)
strs <- mapM (runDiskIO' opts) $ devTemplates disks dev dat
- return $ unwords strs
+ return $ (if contiguous opts then concat else unwords) strs
startDiskIO :: [(String, String)] ->
[String] -> Int -> (String -> IO ()) -> IO ()
@@ -249,4 +256,4 @@ runDiskU disks argv = do
devs <- io $ mountedDevices (map fst disks)
opts <- io $ parseDiskUOpts argv
strs <- mapM (\(d, p) -> runDiskU' opts (findTempl d p disks) p) devs
- return $ unwords strs
+ return $ (if contiguousU opts then concat else unwords) strs