
這只是一個小煩惱,但我已經使用以下程式碼使 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 做的大多數事情都已經解決了,你只需要知道去哪裡尋找。基本上,只需放棄腳本並使用它即可。我希望這有幫助。