Kill xmobars by name when restarting status bars
killAllStatusBars only kills the PIDs xmonad has stored, and bars that dropped off that list kept running after M-q and movie, leaving a laptop-config bar on HDMI. pkill -x xmobar catches them all.
This commit is contained in:
@@ -26,6 +26,7 @@ import XMonad.Util.EZConfig
|
||||
import qualified XMonad.Util.Hacks as Hacks
|
||||
import XMonad.Util.Loggers
|
||||
import XMonad.Util.NamedScratchpad
|
||||
import XMonad.Util.Run (runProcessWithInput)
|
||||
import XMonad.Util.SpawnOnce
|
||||
|
||||
-- Main
|
||||
@@ -191,12 +192,13 @@ myStatusBar nScreens i = "xmobar -x " ++ show i ++ " ~/.config/xmobar/" ++ rc
|
||||
rc = if nScreens > 1 && i /= 1 then "xmobarrc_hdmi" else "xmobarrc_laptop"
|
||||
|
||||
-- One bar per screen, all restarted on every screen change: the right config for a
|
||||
-- screen id depends on the screen count, and dynamicSBs would keep the old bar
|
||||
-- screen id depends on the screen count, and dynamicSBs would keep the old bar.
|
||||
-- Kills by name (pkill waits) because killAllStatusBars' PID list can lose bars.
|
||||
restartStatusBars :: X ()
|
||||
restartStatusBars = do
|
||||
killAllStatusBars
|
||||
_ <- runProcessWithInput "pkill" ["-x", "xmobar"] ""
|
||||
screens <- gets (W.screens . windowset)
|
||||
forM_ screens $ \s -> let S i = W.screen s in spawnStatusBar (myStatusBar (length screens) i)
|
||||
forM_ screens $ \s -> let S i = W.screen s in spawn (myStatusBar (length screens) i)
|
||||
|
||||
myXmobarPP :: PP
|
||||
myXmobarPP =
|
||||
|
||||
Reference in New Issue
Block a user