From 01fd56d1567fcb8011e8897801e362537f8f5f15 Mon Sep 17 00:00:00 2001 From: BardofSprites <89086143+BardofSprites@users.noreply.github.com> Date: Tue, 7 Apr 2026 17:50:09 -0400 Subject: fix XMobar workspaces issue --- xmonad/.config/xmonad/xmonad.hs | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'xmonad') diff --git a/xmonad/.config/xmonad/xmonad.hs b/xmonad/.config/xmonad/xmonad.hs index f718c3a..e177db9 100644 --- a/xmonad/.config/xmonad/xmonad.hs +++ b/xmonad/.config/xmonad/xmonad.hs @@ -30,6 +30,7 @@ import XMonad.Hooks.DynamicLog import System.IO import XMonad.Hooks.ManageDocks import XMonad.Hooks.ManageHelpers +import Data.List(isPrefixOf) import qualified XMonad.StackSet as W @@ -237,25 +238,33 @@ myLayout = avoidStruts $ toggleLayouts full (tiled ||| bstack ||| tabbedBottom | deck = renamed [Replace "[D]"] $ mySpacing (TwoPane delta ratio) full = renamed [Replace "[M]"] $ Full -stripScreenPrefix :: String -> String -stripScreenPrefix ws = case dropWhile (/= '_') ws of - ('_':rest) -> rest - _ -> ws - ppForScreen :: Int -> Handle -> X () -ppForScreen sid xmproc = dynamicLogWithPP $ marshallPP (S sid) xmobarPP +ppForScreen sid xmproc = dynamicLogWithPP $ xmobarPP { ppOutput = hPutStrLn xmproc , ppTitle = xmobarColor green "" . shorten 50 , ppLayout = xmobarColor yellow "" , ppSep = " | " - , ppCurrent = xmobarColor active_fg "" . wrap "[" "]" - , ppVisible = wrap "[" "]" - , ppHidden = \ws -> if ws == "NSP" then "" else wrap "[" "]" ws + , ppCurrent = xmobarColor active_fg "" . wrap "[" "]" . stripScreenPrefix + , ppVisible = wrap "[" "]" . stripScreenPrefix + , ppHidden = \ws -> if ws == "NSP" then "" else wrap "[" "]" (stripScreenPrefix ws) , ppHiddenNoWindows = const "" - , ppUrgent = xmobarColor "red" "" . wrap "!" "!" + , ppUrgent = xmobarColor "red" "" . wrap "!" "!" . stripScreenPrefix + , ppSort = fmap (. filterByScreen sid) (ppSort def) } -myLogHook xmprocs = sequence_ $ zipWith ppForScreen [0..] xmprocs +filterByScreen :: Int -> [WindowSpace] -> [WindowSpace] +filterByScreen sid allWs = filter isRelevant allWs + where + isRelevant ws = + let tag = W.tag ws + prefix = show sid ++ "_" + in prefix `isPrefixOf` tag || not ('_' `elem` tag) + +stripScreenPrefix :: String -> String +stripScreenPrefix ws = + case dropWhile (/= '_') ws of + ('_':rest) -> rest + _ -> ws myLogHook xmprocs = do sequence_ $ zipWith ppForScreen [0..] xmprocs -- cgit v1.2.3