From 3793479ac06bca54653c1aca0019e3100b334ef1 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Wed, 3 Nov 2021 17:18:57 -0600 Subject: Add ability to truncate xmobar output. This is done by removing all visible characters after a certain point. Right now that's set to 70, which was found just via trial-and-error. This will break if something has '>' or '<' and this will not be able to handle xmobar's 'raw' tag, but it's good enough. --- src/Internal/Keys.hs | 2 ++ src/Main.hs | 33 +++++++++++++++++---------------- 2 files changed, 19 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/Internal/Keys.hs b/src/Internal/Keys.hs index cf7846d..75c70a3 100644 --- a/src/Internal/Keys.hs +++ b/src/Internal/Keys.hs @@ -101,6 +101,8 @@ newKeys markContext = , ((modm, xK_t), (void $ spawn (terminal config))) , ((modm, xK_m), (submap $ mapAlpha modm (markCurrentWindow markContext))) , ((modm, xK_w), runXPlus markContext config windowJump) + , ((modm, xK_space), sendMessage NextLayout) + , ((modm .|. shiftMask, xK_space), sendMessage FirstLayout) , ((modm, xK_apostrophe), (submap $ Map.insert (modm, xK_apostrophe) diff --git a/src/Main.hs b/src/Main.hs index 47a00e2..689411c 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -67,15 +67,13 @@ main = do , ppHidden = xmobarColor "#888888" "" . printf "%s" , ppWsSep = " " , ppTitle = - xmobarColor "#808080" "" . - printf "%s" . - parseOut . - trunc 50 + xmobarColor "#a0a0a0" "" . + printf "%s" , ppSep = xmobarColor "#404040" "" " │ " , ppLayout = const (fromMaybe "" layout) , ppExtras = [] - , ppOutput = hPutStrLn xmproc + , ppOutput = hPutStrLn xmproc . reverse . trunc 80 , ppOrder = \ss -> let (icons, etc) = partition (" String - parseOut str = - let colors = ["#ff878f", "#e187ff", "#8f87ff", "#87fff7", "#8bff87", "#ffe987", "#ff8787"] - components = zip (cycle colors) (splitOnAll [" - ", " | ", " · ", " "] str) - in concatMap (\(color, str) -> - printf "%s " color str) components - - trunc amt str = - if length str > amt - 4 - then take (amt - 4) str ++ " ..." - else str + trunc amt str = trunc' False amt str [] + trunc' _ _ [] acc = acc + trunc' ignore amt (a:as) acc = + case a of + '<' -> trunc' True amt as (a : acc) + '>' -> trunc' False amt as (a : acc) + _ -> + if ignore + then trunc' True amt as (a : acc) + else + case amt of + 0 -> trunc' False 0 as acc + 4 -> trunc' False 0 as ("... " ++ acc) + _ -> trunc' False (amt - 1) as (a : acc) splitOnAll arr str = splitOnAll' arr [str] splitOnAll' [] str = str -- cgit