Jeśli masz skrypt powłoki, aby uruchomić XMobar, to „robisz to źle”. Powinieneś uruchomić xmobar używając poprawnych funkcji Haskell w pliku źródłowym konfiguracji xmonad.hs. Spójrz na moją główną funkcję 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
Istotna linia jest następująca:
xmonad =<< xmobar myBaseConfig
Działa xmobar tak, jak powinien, nawet po ponownym załadowaniu xmonada. Otrzymasz funkcję „xmobar” z instrukcji:
import XMonad.Hooks.DynamicLog (xmobar)
Co z kolei pochodzi z pakietu xmonad-contrib .
Widzisz, większość rzeczy, które chcesz zrobić z XMonad, to już rozwiązany problem, musisz tylko wiedzieć, gdzie szukać. Zasadniczo po prostu porzuć skrypt i użyj go zamiast tego. Mam nadzieję, że to pomoże.
spawnPipe
kod na stronie XMonad, naprawdę nie jest łatwo wiedzieć, gdzie szukać! Ale ostatecznie wolę technikę, ponieważ jest czystsza,DynamicLog
ponieważ nie zabiłem starego procesu w moich testach. Naprawdę lubię XMonad, ale Haskell nie jest dobrym językiem konfiguracyjnym.spawnPipe
że rozwiniesz proces w nowym wątku. Jeśli chceszspawnPipe
zamiast tego utworzyć proces potomny (taki, który zamyka się, gdy robi to główny proces), obawiam się, że będziesz musiał napisać własnąspawnPipe
funkcję.