diff options
Diffstat (limited to 'src/Xmobar')
-rw-r--r-- | src/Xmobar/Plugins/Monitors/MultiCpu.hs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/Xmobar/Plugins/Monitors/MultiCpu.hs b/src/Xmobar/Plugins/Monitors/MultiCpu.hs index 3db3b5f..70ae132 100644 --- a/src/Xmobar/Plugins/Monitors/MultiCpu.hs +++ b/src/Xmobar/Plugins/Monitors/MultiCpu.hs @@ -25,6 +25,7 @@ data MultiCpuOpts = MultiCpuOpts { loadIconPatterns :: [IconPattern] , loadIconPattern :: Maybe IconPattern , fallbackIconPattern :: Maybe IconPattern + , contiguous :: Bool } defaultOpts :: MultiCpuOpts @@ -32,6 +33,7 @@ defaultOpts = MultiCpuOpts { loadIconPatterns = [] , loadIconPattern = Nothing , fallbackIconPattern = Nothing + , contiguous = False } options :: [OptDescr (MultiCpuOpts -> MultiCpuOpts)] @@ -42,6 +44,7 @@ options = o { loadIconPatterns = parseIconPattern x : loadIconPatterns o }) "") "" , Option "" ["fallback-icon-pattern"] (ReqArg (\x o -> o { fallbackIconPattern = Just $ parseIconPattern x }) "") "" + , Option "" ["contiguous-icons"] (NoArg (\o -> o {contiguous = True})) "" ] parseOpts :: [String] -> IO MultiCpuOpts @@ -87,7 +90,8 @@ percent b a = if tot > 0 then map (/ tot) $ take 4 dif else [0, 0, 0, 0] formatMultiCpus :: MultiCpuOpts -> [[Float]] -> Monitor [String] formatMultiCpus _ [] = return [] -formatMultiCpus opts xs = concat <$> mapM (\(i, x) -> formatCpu opts i x) (zip [0..] xs) +formatMultiCpus opts xs = + concat <$> mapM (\(i, x) -> formatCpu opts i x) (zip [0..] xs) formatCpu :: MultiCpuOpts -> Int -> [Float] -> Monitor [String] formatCpu opts i xs @@ -100,7 +104,8 @@ formatCpu opts i xs return (b:h:d:ps) where tryString | i == 0 = loadIconPattern opts - | i <= length (loadIconPatterns opts) = Just $ loadIconPatterns opts !! (i - 1) + | i <= length (loadIconPatterns opts) = + Just $ loadIconPatterns opts !! (i - 1) | otherwise = fallbackIconPattern opts splitEvery :: Int -> [a] -> [[a]] @@ -109,16 +114,17 @@ splitEvery n = unfoldr (\x -> if null x then Nothing else Just $ splitAt n x) groupData :: [String] -> [[String]] groupData = transpose . tail . splitEvery vNum -formatAutoCpus :: [String] -> Monitor [String] -formatAutoCpus [] = return $ replicate vNum "" -formatAutoCpus xs = return $ map unwords (groupData xs) +formatAutoCpus :: MultiCpuOpts -> [String] -> Monitor [String] +formatAutoCpus _ [] = return $ replicate vNum "" +formatAutoCpus opts xs = + return $ map (if (contiguous opts) then concat else unwords) (groupData xs) runMultiCpu :: CpuDataRef -> [String] -> Monitor String runMultiCpu cref argv = do c <- io $ parseCpuData cref opts <- io $ parseOpts argv l <- formatMultiCpus opts c - a <- formatAutoCpus l + a <- formatAutoCpus opts l parseTemplate $ a ++ l startMultiCpu :: [String] -> Int -> (String -> IO ()) -> IO () |