diff options
Diffstat (limited to 'Plugins')
-rw-r--r-- | Plugins/Monitors/Common.hs | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/Plugins/Monitors/Common.hs b/Plugins/Monitors/Common.hs index 535329e..13f6323 100644 --- a/Plugins/Monitors/Common.hs +++ b/Plugins/Monitors/Common.hs @@ -83,6 +83,9 @@ data MConfig = , maxWidth :: IORef Int , padChars :: IORef [Char] , padRight :: IORef Bool + , barBack :: IORef String + , barFore :: IORef String + , barWidth :: IORef Int } -- | from 'http:\/\/www.haskell.org\/hawiki\/MonadState' @@ -122,7 +125,10 @@ mkMConfig tmpl exprts = mx <- newIORef 0 pc <- newIORef " " pr <- newIORef False - return $ MC nc l lc h hc t e p mn mx pc pr + bb <- newIORef ":" + bf <- newIORef "#" + bw <- newIORef 10 + return $ MC nc l lc h hc t e p mn mx pc pr bb bf bw data Opts = HighColor String | NormalColor String @@ -136,6 +142,9 @@ data Opts = HighColor String | Width String | PadChars String | PadAlign String + | BarBack String + | BarFore String + | BarWidth String options :: [OptDescr Opts] options = @@ -151,6 +160,9 @@ options = , 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" ] doArgs :: [String] @@ -181,6 +193,9 @@ doConfigOptions (o:oo) = setConfigValue (nz w) maxWidth >> next PadChars pc -> setConfigValue pc padChars >> next PadAlign pa -> setConfigValue (isPrefixOf "r" pa) padRight >> next + BarBack bb -> setConfigValue bb barBack >> next + BarFore bf -> setConfigValue bf barFore >> next + BarWidth bw -> setConfigValue (nz bw) barWidth >> next runM :: [String] -> IO MConfig -> ([String] -> Monitor String) -> Int -> (String -> IO ()) -> IO () runM args conf action r cb = do go @@ -370,18 +385,14 @@ showPercentsWithColors fs = do fstrs <- mapM floatToPercent fs zipWithM (showWithColors . const) fstrs (map (*100) fs) -barBackground :: Char -barBackground = ':' -barForeground :: Char -barForeground = '#' -barLength :: Int -barLength = 10 - showPercentBar :: Float -> Float -> Monitor String showPercentBar v x = do - let len = min barLength $ round (fromIntegral barLength * x) - s <- colorizeString v (replicate len barForeground) - return $ s ++ replicate (barLength - len) barBackground + bb <- getConfigValue barBack + bf <- getConfigValue barFore + bw <- getConfigValue barWidth + let len = min bw $ round (fromIntegral bw * x) + s <- colorizeString v (take len $ cycle bf) + return $ s ++ (take (bw - len) $ cycle bb) -- $threads |