Wenn Sie ein Shell-Skript zum Starten von XMobar haben, machen Sie es falsch. Sie sollten xmobar mit den richtigen Haskell-Funktionen in der Konfigurationsquelldatei xmonad.hs starten. Schauen Sie sich die Hauptfunktion meiner Konfiguration an:
-- 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
Die hervorstechende Linie ist diese:
xmonad =<< xmobar myBaseConfig
Dadurch wird xmobar so ausgeführt, wie es ausgeführt werden sollte, auch wenn Sie xmonad neu laden. Sie erhalten die Funktion 'xmobar' aus der Anweisung:
import XMonad.Hooks.DynamicLog (xmobar)
Was wiederum aus dem xmonad-contrib-Paket stammt .
Sie sehen also, die meisten Dinge, die Sie mit XMonad tun möchten, sind bereits ein gelöstes Problem. Sie müssen nur wissen, wo Sie suchen müssen. Lassen Sie Ihr Skript einfach fallen und verwenden Sie es stattdessen. Ich hoffe das hilft.
spawnPipe
Code auf der XMonad-Website gefunden. Es ist wirklich nicht einfach zu wissen, wo man suchen muss! Aber am Ende bevorzuge ich die Technik, die ich verwende, da sie sauberer ist undDynamicLog
den alten Prozess in meinen Tests nicht beendet hat. Ich mag XMonad wirklich, aber Haskell ist keine gute Konfigurationssprache.spawnPipe
einen Prozess in einem neuen Thread auslösen werden. Wenn SiespawnPipe
stattdessen einen untergeordneten Prozess erstellen möchten (einen, der geschlossen wird, wenn der Hauptprozess ausgeführt wird), müssen Sie leider Ihre eigenespawnPipe
Funktion schreiben .