重新加載 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 進程的 shell 腳本啟動 xmobar。參見,例如,http://bash.cyberciti.biz/web-server/restart-apache2-httpd-shell-script/

答案2

如果您有一個 shell 腳本來啟動 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 做的大多數事情都已經解決了,你只需要知道去哪裡尋找。基本上,只需放棄腳本並使用它即可。我希望這有幫助。

相關內容