
これはちょっとした煩わしさですが、次のコードを使用して 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 でやりたいことのほとんどはすでに解決済みの問題であり、どこを調べればよいかを知る必要があるだけです。基本的には、スクリプトを捨てて、代わりにそれを使用してください。これが役立つことを願っています。