diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2010-12-08 20:03:55 -0500 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2010-12-08 20:03:55 -0500 |
commit | 9425e2f2b424f23346bd6c7af7494be66145c5c0 (patch) | |
tree | 7e7a103ca97c455e565868ff0fc33cfdcdaee55a /Plugins/Monitors | |
parent | f7cbb14d9ee40d07abcde45868507f858e072fdd (diff) | |
download | xmobar-9425e2f2b424f23346bd6c7af7494be66145c5c0.tar.gz xmobar-9425e2f2b424f23346bd6c7af7494be66145c5c0.tar.bz2 |
Add auto* and auto*% templates
These template automatically detect the number of CPUs and list all of
them in order, split by a space (with or without a '%' after each
number).
Diffstat (limited to 'Plugins/Monitors')
-rw-r--r-- | Plugins/Monitors/MultiCpu.hs | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/Plugins/Monitors/MultiCpu.hs b/Plugins/Monitors/MultiCpu.hs index 069199b..f32c966 100644 --- a/Plugins/Monitors/MultiCpu.hs +++ b/Plugins/Monitors/MultiCpu.hs @@ -16,13 +16,16 @@ module Plugins.Monitors.MultiCpu(multiCpuConfig, runMultiCpu) where import Plugins.Monitors.Common import qualified Data.ByteString.Lazy.Char8 as B -import Data.List (isPrefixOf) +import Data.List (isPrefixOf,intersperse,transpose) multiCpuConfig :: IO MConfig multiCpuConfig = - mkMConfig "Cpu: <total>%" - [ k ++ n | n <- "" : map show [0 :: Int ..] - , k <- ["bar","total","user","nice","system","idle"]] + mkMConfig "Cpu: <total>%" $ + map ("auto" ++) monitors + ++ map ((++ "%") . ("auto" ++)) monitors + ++ [ k ++ n | n <- "" : map show [0 :: Int ..] + , k <- monitors] + where monitors = ["bar","total","user","nice","system","idle"] cpuData :: IO [[Float]] @@ -59,8 +62,28 @@ formatCpu xs ps <- showPercentsWithColors (t:xs) return (b:ps) +splitEvery :: Int -> [a] -> [[a]] +splitEvery _ [] = [] +splitEvery n l = (take n l) : splitEvery n (drop n l) + +groupData :: [String] -> [[String]] +groupData = transpose . tail . splitEvery 6 + +formatAutoCpus :: [String] -> Monitor [String] +formatAutoCpus [] = return $ replicate 6 "" +formatAutoCpus xs = return $ map concat . map (intersperse " ") $ groupData xs + +formatAutoCpusPercents :: [String] -> Monitor [String] +formatAutoCpusPercents [] = return $ replicate 6 "" +formatAutoCpusPercents xs = return $ map concat . map (intersperse " ") $ withPercents groups + where groups = groupData xs + withPercents [] = [] + withPercents (y:ys) = y : (map (map (++ "%")) (tail ys)) + runMultiCpu :: [String] -> Monitor String runMultiCpu _ = do c <- io parseCpuData l <- formatMultiCpus c - parseTemplate l + a <- formatAutoCpus l + p <- formatAutoCpusPercents l + parseTemplate (a ++ p ++ l) |