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


9

これはほんの少しの煩わしさですが、次のコードを使用してXMonad構成ファイルにxmobarをロードさせました。

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

これはうまく機能しますが、XMonadがリロードされるたびに新しいxmobarプロセスを生成します。古いものを殺す簡単な方法はあるのだろうか?

update:entropoの提案に従い、次のようなbashスクリプトを作成しました。

#!/bin/bash

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

/usr/bin/xmobar &

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

回答:



16

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で実行したいことのほとんどは既に解決済みの問題であり、どこを見ればよいのかを知っているだけです。基本的には、スクリプトを破棄して、代わりにそれを使用します。これがお役に立てば幸いです。


2
ええと、spawnPipeXMonadのウェブサイトでコードを見つけました。しかし、結局のところ、私が使用している手法はよりクリーンDynamicLogで、テストで古いプロセスを殺すことはなかったので、私は好みます。私はXMonadが本当に好きですが、Haskellは良い構成言語ではありません。
Nicolas Buduroi、2011

1
さて、あなたのために働くものは何でも結局は良いです。しかし、私はあなたがそれを間違っていると考えていると思います。XMonadを構成するのではなく、拡張します。Haskellは拡張に最適です。
Robert Massaioli、2011

私にとって、これはxmonadをリロードするたびに2つの新しいプロセスを作成しています。spawnPipeを使用すると、2つの追加プロセスが作成されます。ps -axは次を返します: "/ bin / sh -c /.cabal/bin/xmobar〜/ .xmobarrc:"、 "/ bin / sh -c xmobar"、 "〜/ .cabal / bin / xmonad〜/ .xmobarrc"そして「xmobar」。
2015

両方を再インストールすると、上記のコマンドで問題が修正されました。
2015

1
私はあなたspawnPipeが新しいスレッドでプロセスをフォークするだろうと確信しています。あなたがしたい場合はspawnPipe代わりに子プロセスを作成します(メインプロセスがないときに閉じ1)を、私はあなたがあなた自身の書き込みをする必要があります怖いspawnPipe機能を。
イニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.