首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将XMobar实例放在XMonad的每个屏幕上?

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

Stack Overflow用户
提问于 2017-10-13 18:40:27
回答 1查看 3K关注 0票数 1

我在笔记本电脑上运行XMonad,有时,但并不总是会附加一个监视器。我想检测我的xmonad.hs中的屏幕数量,每个屏幕都有一个XMobar实例。

我已经看过这个问题和答案了,但我对单台变压器和如何使用X [Rectangle]类型的值并没有太大的兴趣。

现在,我粗略地说:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-13 20:42:02

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

代码语言:javascript
复制
main = xmonad $ desktopConfig
    { startupHook = do
        rects <- xdisplays
        {- spawn xmobar -}
    }

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46736192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档