繁体   English   中英

如何在XMonad的每个屏幕上放置XMobar的实例?

[英]How to put an instance of XMobar on each screen in XMonad?

我正在笔记本电脑上运行XMonad,我有时(但并不总是)附加了一台额外的显示器。 我想检测我的xmonad.hs的屏幕数量,每个屏幕都有一个XMobar实例。

我已经看到了这个问题和答案 ,但我没有真正了解monad变换器以及如何使用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
            }
        }

天真地,我想在我的do块的开头放置rects <- xdisplays ,然后适当地生成xmobar实例,但显然这不起作用,因为类型是X [Rectangle]而不是IO [Rectangle] 我想知道我是否需要以某种方式使用runX

使用startupHook在每次调用xmonad时运行X操作。 例如,

main = xmonad $ desktopConfig
    { startupHook = do
        rects <- xdisplays
        {- spawn xmobar -}
    }

您可能也喜欢countScreens如果你真正关心的是有多少个屏幕和spawnOnce这样你就不会在每次重启xmonad时获得额外的xmobar副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM