xmonad をリロードすると xmobar がきれいに再出現する

xmonad をリロードすると xmobar がきれいに再出現する

これはちょっとした煩わしさですが、次のコードを使用して XMonad 構成ファイルに xmobar をロードするようにしました。

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

うまく動作しますが、XMonad がリロードされるたびに新しい xmobar プロセスが生成されます。古いプロセスを終了する簡単な方法があるのでしょうか?

アップデート: entropo の提案に従って、次のような bash スクリプトを作成しました。

#!/bin/bash

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

/usr/bin/xmobar &

XMonad 構成ファイルからそのスクリプトを呼び出します。

答え1

xmonad に限ったことではありませんが、既存の xmobar プロセスをチェックするシェル スクリプトを使用して xmobar を起動することができます。たとえば、http://bash.cyberciti.biz/web-server/restart-apache2-httpd-shell-script/

答え2

XMobar を起動するためのシェル スクリプトがある場合は、やり方が間違っています。xmonad.hs 構成ソース ファイル内の正しい Haskell 関数を使用して xmobar を起動する必要があります。私の構成のメイン関数を見てみましょう。

-- 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

注目すべき一文は次の通りです:

xmonad =<< xmobar myBaseConfig

これにより、xmonad をリロードした場合でも、xmobar が適切に実行されます。次のステートメントから 'xmobar' 関数を取得します。

import XMonad.Hooks.DynamicLog (xmobar)

それは、xmonad-contrib パッケージ

つまり、XMonad でやり​​たいことのほとんどはすでに解決済みの問題であり、どこを調べればよいかを知る必要があるだけです。基本的には、スクリプトを捨てて、代わりにそれを使用してください。これが役立つことを願っています。

関連情報