Browse Source

Add some comments, use spawnonce

Josh Bicking 6 years ago
parent
commit
7e1f4dc759
1 changed files with 7 additions and 19 deletions
  1. 7 19
      xmonad/.xmonad/xmonad.hs

+ 7 - 19
xmonad/.xmonad/xmonad.hs

@@ -6,6 +6,7 @@ import XMonad.Hooks.DynamicLog(dynamicLogWithPP
                               , ppTitle)
 import XMonad.Hooks.ManageDocks(docks, docksEventHook, manageDocks, avoidStruts)
 import XMonad.Util.Run(spawnPipe, hPutStrLn, runProcessWithInput)
+import XMonad.Util.SpawnOnce(spawnOnce)
 
 -- Layouts
 import XMonad.Layout.Spacing(smartSpacing)
@@ -30,13 +31,15 @@ import XMonad.Hooks.EwmhDesktops(ewmh, fullscreenEventHook)
 myModMask = mod4Mask
 myTerminal   = "konsole"
 
--- Custom PP, configure it as you like. It determines what is being written to the bar.
+-- Only show workspaces on xmobar, as everything else will be on KDE's panels
 myPP = xmobarPP { ppTitle = \_ -> ""
                 , ppLayout = \_ -> ""}
 
 main = do
+  -- Spawn an xmobar on each screen
   nScreen <- countScreens
   xmprocs <- mapM (\dis -> spawnPipe ("xmobar -x " ++ show dis)) [0..nScreen-1]
+
   xmonad $ ewmh $ docks $ kde4Config {
     manageHook = manageDocks <+> myManageHook <+> manageHook kde4Config
   , layoutHook = avoidStruts $ desktopLayoutModifiers $ smartBorders $
@@ -51,10 +54,12 @@ main = do
                  -- It's not a bug, it's a feature.
                  simpleTabbed
 
+  -- Write signals to all xmobars.
   , logHook = dynamicLogWithPP myPP {
       ppOutput = \s -> sequence_ [hPutStrLn h s | h <- xmprocs]
     }
-  , startupHook = startup startupList
+
+  , startupHook = sequence_ [spawnOnce s | s <- startupList]
   , handleEventHook = handleEventHook kde4Config <+> fullscreenEventHook <+> docksEventHook
   , modMask     = mod4Mask
   , keys        = \c -> myKeys c `M.union` keys kde4Config c
@@ -201,20 +206,3 @@ startupList =
   -- TODO find a way around this dirty hack
   , "sleep 5 && for i in `xdotool search --all --name xmobar`; do xdotool windowraise $i; done"
   ]
-
-startup :: [String] -> X ()
-startup l = do
-  foldl1' (>>) $ map (spawn . ifNotRunning) l
-
--- Wrap a command in Bash that checks if it's running.
--- TODO do this in haskell
-ifNotRunning :: String -> String
-ifNotRunning s = "if [ `pgrep -c " ++ (basename s) ++ "` == 0 ]; then " ++ s ++ "; fi"
-
--- Grab the program name from a command (everything up to the space,
--- if there's a space). Doesn't work with escaped spaces.
-basename :: String -> String
-basename s = case elemIndex ' ' s of
-  (Just n) -> take n s
-  Nothing -> s
-