这只是一个小麻烦,但我已经使用以下代码让 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
这样就可以按应有的方式运行 xmobar,即使您重新加载 xmonad 也是如此。您可以从以下语句中获取“xmobar”函数:
import XMonad.Hooks.DynamicLog (xmobar)
这又来自于xmonad-contrib 包。
所以你看,你想用 XMonad 做的大多数事情都已经是解决了的问题,你只需要知道去哪里找。基本上,只要放弃你的脚本并使用它就可以了。我希望这能有所帮助。