我在笔记本电脑上运行 XMonad,有时但不总是,我连接了一个额外的显示器。我想检测我的屏幕数量,xmonad.hs
每个屏幕都有一个 XMobar 实例。
我已经看过这个问题和答案,但我并没有真正了解 monad 转换器以及如何使用 type 的值X [Rectangle]
。
现在,我大致有这个:
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
}
}
天真地,我想把rects <- xdisplays
我的 do 块放在开头,然后适当地产生 xmobar 实例,但显然这不起作用,因为类型X [Rectangle]
不是IO [Rectangle]
. 我想知道我是否需要以某种方式使用runX?