This is just a small annoyance, but I've made the XMonad configuration file load xmobar using this code:

xmproc <- spawnPipe "/use/bin/xmobar ~/.xmobarrc"

It works well, but it spawn a new xmobar process every time XMonad is reloaded. I wonder if there's an easy way to kill the old one?

update: As suggested by entropo, I've created a bash script like this one:

#!/bin/bash

for PID in `pgrep xmobar`; do
    kill ${PID} > /dev/null &
done

/usr/bin/xmobar &

and call that script from XMonad configuration file.

link|improve this question

80% accept rate
feedback

2 Answers

up vote 1 down vote accepted

Not xmonad specific, but you could launch xmobar through a shell script that checks for an existing xmobar process. See, e.g., http://bash.cyberciti.biz/web-server/restart-apache2-httpd-shell-script/

link|improve this answer
feedback

If you have a shell script to start XMobar then you are 'doing it wrong'. You should be starting xmobar using the correct Haskell functions in the xmonad.hs config source file. Take a look at my configs main function:

-- put it all together
main = do
    nScreens <- countScreens    -- just in case you are on a laptop like me count the screens so that you can go
    xmonad =<< xmobar myBaseConfig
      { modMask = myModMask
      , workspaces = withScreens nScreens myWorkspaces
      , layoutHook = myLayoutHook nScreens
      , manageHook = myManageHook
      , borderWidth = myBorderWidth
      , normalBorderColor = myNormalBorderColor
      , focusedBorderColor = myFocusedBorderColor
      , keys = myKeys
      , mouseBindings = myMouseBindings
      , logHook = myLogHook
      }
    where
        myLogHook = dynamicLogXinerama

myBaseConfig = gnomeConfig

The salient line is this one:

xmonad =<< xmobar myBaseConfig

That runs xmobar as it should be run, even when you reload xmonad. You get the 'xmobar' function from the statement:

import XMonad.Hooks.DynamicLog (xmobar)

Which in turn comes from the xmonad-contrib package.

So you see, most things that you want to do with XMonad are already a solved problem, you just have to know where to look. Basically, just ditch your script and use that instead. I hope this helps.

link|improve this answer
Well, I've found the spawnPipe code on the XMonad website, it's really not easy to know where to look! But in the end, I prefer the technique I'm using as it is cleaner, using DynamicLog didn't kill the old process in my tests. I really like XMonad, but Haskell is not a good configuration language. – Nicolas Buduroi Apr 10 '11 at 15:21
Okay, whatever works for you is good in the end. But I think you are thinking about it wrong. You do not configure XMonad: you extend it. Haskell the prefect fit for extension. – Robert Massaioli Apr 10 '11 at 23:00
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.