web-dev-qa-db-ja.com

xmonadをリロードするときにxmobarをきれいに再生成します

これはちょっとした煩わしさですが、次のコードを使用して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構成ファイルからそのスクリプトを呼び出します。

9
Nicolas Buduroi

Xmonad固有ではありませんが、既存のxmobarプロセスをチェックするシェルスクリプトを介してxmobarを起動できます。たとえば、 http://bash.cyberciti.biz/web-server/restart-Apache2-httpd-Shell-script/ を参照してください。

3
entropo

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でやりたいことのほとんどはすでに解決された問題であり、どこを見ればよいかを知る必要があります。基本的には、スクリプトを捨てて、代わりにそれを使用してください。これがお役に立てば幸いです。

16