これはちょっとした煩わしさですが、次のコードを使用してXMonad構成ファイルにxmobarをロードさせました。
xmproc <- spawnPipe "/use/bin/xmobar ~/.xmobarrc"
それはうまく機能しますが、XMonadがリロードされるたびに新しいxmobarプロセスを生成します。古いものを殺す簡単な方法があるのだろうか?
pdate:entropoが示唆しているように、私は次のようなbashスクリプトを作成しました。
#!/bin/bash
for PID in `pgrep xmobar`; do
kill ${PID} > /dev/null &
done
/usr/bin/xmobar &
xMonad構成ファイルからそのスクリプトを呼び出します。
Xmonad固有ではありませんが、既存のxmobarプロセスをチェックするシェルスクリプトを介してxmobarを起動できます。たとえば、 http://bash.cyberciti.biz/web-server/restart-Apache2-httpd-Shell-script/ を参照してください。
XMobarを起動するためのシェルスクリプトがある場合は、「間違ったことをしている」ことになります。 xmonad.hs構成ソースファイルの正しいHaskell関数を使用してxmobarを起動する必要があります。私のconfigsの主な機能を見てください:
-- 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でやりたいことのほとんどはすでに解決された問題であり、どこを見ればよいかを知る必要があります。基本的には、スクリプトを捨てて、代わりにそれを使用してください。これがお役に立てば幸いです。