Je cours XMonad sur un ordinateur portable que j'ai parfois, mais pas toujours, un moniteur supplémentaire attaché. Je voudrais détecter le nombre d'écrans dans mon xmonad.hs
avoir une instance de XMobar par écran.Comment mettre une instance de XMobar sur chaque écran de XMonad?
J'ai vu this question and answer, mais je n'ai pas vraiment eu la tête autour des transformateurs monad et comment faire usage d'une valeur de type X [Rectangle]
.
En ce moment, j'ai, à peu près, ceci:
import XMonad
import XMonad.Config.Desktop
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Core (X ,withDisplay ,io)
import Graphics.X11.Xinerama (getScreenInfo)
import Graphics.X11.Xlib.Types (Rectangle)
import System.IO
xdisplays :: X [Rectangle]
xdisplays = withDisplay $ io . getScreenInfo
main = do
xmproc <- spawnPipe "/usr/bin/xmobar /home/liam/.xmobarrc"
xmonad $ desktopConfig
{ layoutHook = avoidStruts $ layoutHook defaultConfig,
manageHook = manageHook defaultConfig <+> manageDocks,
logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
}
}
Naïvement, j'aimerais mettre rects <- xdisplays
au début de mon bloc do, puis frayer xmobar cas de façon appropriée, mais évidemment, cela ne fonctionne pas travailler parce que le type est X [Rectangle]
pas IO [Rectangle]
. Je me demandais si je devais utiliser runX en quelque sorte?