如何在XMonad的每个屏幕上放置XMobar实例? [英] How to put an instance of XMobar on each screen in XMonad?

查看:207
本文介绍了如何在XMonad的每个屏幕上放置XMobar实例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在笔记本电脑上运行XMonad,有时但并非总是如此,但要附加一台显示器.我想检测每个屏幕上都有XMobar实例的xmonad.hs中的屏幕数量.

I'm running XMonad on a laptop that I sometimes, but not always, have an additional monitor attached. I'd like to detect the number of screens in my xmonad.hs have a instance of XMobar per screen.

我已经看到此问题和答案,但是我并没有真正了解monad变压器以及如何利用类型X [Rectangle]的值.

I've seen this question and answer, but I've not really got my head around monad transformers and how to make use of a value of 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 不知道吗?

Naively, I'd like to put rects <- xdisplays at the start of my do block, then spawn xmobar instances appropriately, but obviously this doesn't work because the type is X [Rectangle] not IO [Rectangle]. I wondered if I need to use runX somehow?

推荐答案

使用您可能还喜欢 countScreens ,如果您真正关心的只是有多少个屏幕,并且

You might also like countScreens if all you actually care about is how many screens there are and spawnOnce so that you don't get an extra copy of xmobar on each restart of xmonad.

这篇关于如何在XMonad的每个屏幕上放置XMobar实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆