Si vous avez un script shell pour démarrer XMobar, vous vous trompez. Vous devez démarrer xmobar en utilisant les fonctions Haskell correctes dans le fichier source de configuration xmonad.hs. Jetez un oeil à ma fonction principale de configs:
-- 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
La ligne saillante est celle-ci:
xmonad =<< xmobar myBaseConfig
Cela exécute xmobar comme il se doit, même lorsque vous rechargez xmonad. Vous obtenez la fonction 'xmobar' de l'instruction:
import XMonad.Hooks.DynamicLog (xmobar)
Qui à son tour provient du paquet xmonad-contrib .
Donc vous voyez, la plupart des choses que vous voulez faire avec XMonad sont déjà un problème résolu, il vous suffit de savoir où chercher. Fondamentalement, abandonnez simplement votre script et utilisez-le à la place. J'espère que ça aide.
spawnPipe
code sur le site XMonad, ce n'est vraiment pas facile de savoir où chercher! Mais au final, je préfère la technique que j'utilise car elle est plus propre, l'utilisationDynamicLog
n'a pas tué l'ancien processus dans mes tests. J'aime vraiment XMonad, mais Haskell n'est pas un bon langage de configuration.spawnPipe
bifurquerez un processus dans un nouveau thread. Si vous voulezspawnPipe
plutôt créer un processus enfant (qui se ferme lorsque le processus principal le fait), je crains que vous n'ayez à écrire votre proprespawnPipe
fonction.