From 968421004fe65227f0fd608494120c32eccd8cff Mon Sep 17 00:00:00 2001 From: wirtwolff Date: Sat, 14 Mar 2009 05:15:17 +0100 Subject: H.DynamicLog: revised dzenStrip and xmobarStrip functions Ignore-this: 9897c60b8dfc59344939b7aebc370953 Reconcile darcswatch patch with pushed version of dzenStrip. darcs-hash:20090314041517-d17f0-85d43c2bc0bddf3a6322c8ec195095117840e372.gz --- XMonad/Hooks/DynamicLog.hs | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'XMonad') diff --git a/XMonad/Hooks/DynamicLog.hs b/XMonad/Hooks/DynamicLog.hs index b4bbe48..51fb70b 100644 --- a/XMonad/Hooks/DynamicLog.hs +++ b/XMonad/Hooks/DynamicLog.hs @@ -39,7 +39,8 @@ module XMonad.Hooks.DynamicLog ( -- * Formatting utilities wrap, pad, shorten, - xmobarColor, dzenColor, dzenEscape, dzenStrip, + xmobarColor, xmobarStrip, + dzenColor, dzenEscape, dzenStrip, -- * Internal formatting functions pprWindowSet, @@ -332,16 +333,19 @@ dzenColor fg bg = wrap (fg1++bg1) (fg2++bg2) dzenEscape :: String -> String dzenEscape = concatMap (\x -> if x == '^' then "^^" else [x]) --- | Strip dzen formatting (used in ppUrgent) +-- | Strip dzen formatting or commands. Useful to remove ppHidden +-- formatting in ppUrgent field. For example: +-- +-- > , ppHidden = dzenColor "gray20" "" . wrap "(" ")" +-- > , ppUrgent = dzenColor "dark orange" "" . dzenStrip dzenStrip :: String -> String dzenStrip = strip [] where - strip keep [] = keep - strip keep ('^':'^':x) = strip (keep ++ "^") x - strip keep ('^':x) = strip keep (drop 1 . dropWhile (')' /=) $ x) - strip keep x = let (good,x') = span ('^' /=) x - in strip (keep ++ good) x' - - + strip keep x + | null x = keep + | "^^" `isPrefixOf` x = strip (keep ++ "^") (drop 2 x) + | '^' == head x = strip keep (drop 1 . dropWhile (/= ')') $ x) + | otherwise = let (good,x') = span (/= '^') x + in strip (keep ++ good) x' -- | Use xmobar escape codes to output a string with given foreground -- and background colors. @@ -354,6 +358,21 @@ xmobarColor fg bg = wrap t "" -- ??? add an xmobarEscape function? +-- | Strip xmobar markup. Useful to remove ppHidden color from ppUrgent +-- field. For example: +-- +-- > , ppHidden = xmobarColor "gray20" "" . wrap "<" ">" +-- > , ppUrgent = xmobarColor "dark orange" "" . xmobarStrip +xmobarStrip :: String -> String +xmobarStrip = strip [] where + strip keep x + | null x = keep + | "') $ x) + | "" `isPrefixOf` x = strip keep (drop 5 x) + | '<' == head x = strip (keep ++ "<") (tail x) + | otherwise = let (good,x') = span (/= '<') x + in strip (keep ++ good) x' + -- | The 'PP' type allows the user to customize the formatting of -- status information. data PP = PP { ppCurrent :: WorkspaceId -> String @@ -426,7 +445,8 @@ defaultPP = PP { ppCurrent = wrap "[" "]" , ppExtras = [] } --- | Settings to emulate dwm's statusbar, dzen only. +-- | Settings to emulate dwm's statusbar, dzen only. Uses dzenStrip in +-- ppUrgent. dzenPP :: PP dzenPP = defaultPP { ppCurrent = dzenColor "white" "#2b4f98" . pad , ppVisible = dzenColor "black" "#999999" . pad -- cgit v1.2.3