2
這是跟進到this question。
在追求試圖找到我多少物理監測員,我想出了XMobar由於我的Xmonad配置中的問題而死亡,與IO相關
screenCount :: X Int
screenCount = withDisplay (io.fmap length.getScreenInfo)
makeXMobars :: X [Handle] -- loads two xmobars per screen, one top & one bottom
makeXMobars = screenCount >>= (io.mapM spawnPipe.commandHandles)
where
commandHandles n = map ((\x -> "xmobar -x " ++ x).unwords) $ commandNames n
commandNames n = sequence [map show [0..n], map (\x -> "~/.xmobarrc" ++ x) ["Top", "Bottom"]]
myLogHook :: X()
myLogHook = do
handles <- makeXMobars
dynamicLogWithPP $ defaultPP
{
ppOutput = \x -> mapM_ (`hPutStrLn` x) handles
}
myLogHook只是下降到xmonad $ DefaultConfig
。但是,當我加載XMonad時,頂級XMobars的PipeReader(在兩個屏幕上)僅顯示updating
一小會兒,然後消失,並在我重新加載時拒絕回來。底層的人非常高興。
以前,我只是用我的ppOutput:
ppOutput = \x -> hPutStrLn xmobarTopScreen0 x >> hPutStrLn xmobarTopScreen1 x
這工作完全正常。
我假設我對IO的理解發生了一些錯誤,而不是代碼本身本身就是壞的,但我真的不確定。