首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xmonad切换全屏/ xmobar

Xmonad切换全屏/ xmobar
EN

Stack Overflow用户
提问于 2013-12-07 20:39:05
回答 5查看 20.2K关注 0票数 19

考虑到我对Haskell的有限(零)知识,xmonad.hs可能具有挑战性。

我正在寻找如何修改我的配置文件,以允许“真”全屏使用,例如VLC观看视频。

我现在的xmonad.hs:

代码语言:javascript
复制
    import XMonad
    import XMonad.Hooks.DynamicLog
    import XMonad.Hooks.ManageDocks
    import XMonad.Util.Run(spawnPipe)
    import XMonad.Util.EZConfig(additionalKeys)
    import Graphics.X11.ExtraTypes.XF86
    import System.IO

main = do
    xmproc <- spawnPipe "xmobar /home/user/.xmobarrc"
    xmonad $ defaultConfig
        { terminal = "urxvt",
          manageHook = manageDocks <+> manageHook defaultConfig
        , layoutHook = avoidStruts  $  layoutHook defaultConfig
        , logHook = dynamicLogWithPP xmobarPP
                        { ppOutput = hPutStrLn xmproc
                        , ppTitle = xmobarColor "green" "" . shorten 50
                        }
        } `additionalKeys`
                [ ((0 , xF86XK_AudioLowerVolume), spawn "amixer set Master on && amixer set Headphone on && amixer set Master 2-"),
                  ((0 , xF86XK_AudioRaiseVolume), spawn "amixer set Master on && amixer set Headphone on && amixer set Master 2+"),
                  ((0 , xF86XK_AudioMute), spawn "amixer set Master toggle && amixer set Headphone toggle")
                ]

目前,我的xmobar在观看视频时是可见的,我在窗口上有一个红色边框,显示视频。

我如何修改这个配置,例如允许Mod-b在全屏模式和普通模式之间切换?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-08 00:40:39

虽然我对此一点都不确定,但我认为当你试图全屏地屏蔽一个瓷砖窗口时,你的问题就会出现。在你的配置中,一行写着

代码语言:javascript
复制
manageHook = manageDocks <+> ...

告诉xmonad,您不希望您的平铺窗口重叠xmobar。因此,xmonad试图遵守这一点,即使是在全屏蔽窗口时,他们被平铺。因此,解决方案分为三部分:

  1. 您可以浮动您的窗口,然后全面屏蔽他们。这通常是通过按住modkey并左击窗口一次来实现的。当您浮动窗口时,它可以覆盖所有其他窗口,包括xmobar。因此,如果您然后尝试全屏窗口,它应该覆盖整个屏幕。
  2. 默认情况下,您可以告诉xmonad浮动VLC。这是mplayer的内置行为,但显然不是针对VLC的。要做到这一点,请将配置更改为 manageHook = manageDocks <+> (className =?"Vlc“-> doFloat) <+> manageHook defaultConfig “管理挂钩”是决定窗口应该如何出现的东西。<+>结合了管理钩子的选项。那句话 (className =?"Vlc“-> doFloat) 意思是“如果窗口是VLC窗口,默认情况下让它浮动”。
  3. 第三个非常可行的选项是下载包含xmonad-contrib模块的XMonad.Hooks.ManageHelpers包。这个模块包含了许多聪明的帮助函数来定制xmonad应该如何处理您的窗口。例如,使用它,您可以添加一条规则: (isFullscreen -> doFullFloat) 这意味着“如果窗口试图成为全屏,自动浮动并使其覆盖整个屏幕”--这正是您想要的效果。将它添加到管理钩子中的方式与类名一样: manageHook = manageDocks <+> (isFullscreen -> doFullFloat) <+> manageHook defaultConfig 然后,当你全屏时,VLC应该表现得很好,不管你是否让它浮动!

作为一个小提示:当您开始在管理钩子中获得许多不同的选项,并且厌倦了将它们与<+>结合时,您也可以将其写成

代码语言:javascript
复制
manageHook = composeAll [
    manageDocks,
    isFullscreen --> doFullFloat,
    className =? "Vlc" --> doFloat,
    manageHook defaultConfig
  ]

composeAll将自动将列表中的每个项与<+>运算符结合起来。

请询问是否有一些配置,您不确定这意味着什么。我敢打赌这里的很多人都很乐意把Haskell代码翻译成一种人类语言。我知道要疯狂地复制和粘贴配置是多么令人沮丧,而不是真正知道它是如何工作的。(就在最近,我开始了解xmonad配置是如何工作的,这是一种美丽。)

编辑:关于您的窗口边框完全屏蔽窗口。有一个模块XMonad.Layout.NoBorders提供了整洁的函数smartBorders,它可以修改布局挂钩,这样它就不会在看起来完全屏蔽的窗口上绘制边框。也可以更改布局挂钩以使用此函数,方法是将配置中的行更改为

代码语言:javascript
复制
layoutHook = smartBorders . avoidStruts $ layoutHook defaultConfig

.将几个函数合并为一个函数,在本例中,它将smartBordersavoidStruts结合起来,从而使您得到两者的好处。然后将默认的布局钩子传递给它们,以创建修改过的、更好的布局挂钩。

不幸的是,我无法测试它的工作效果,因为我运行的是没有边界的XMonad。

票数 30
EN

Stack Overflow用户

发布于 2014-12-25 11:09:35

尝试在您的.xmobarrc中设置.xmobarrc,拥有avoidStruts (您已经拥有它),以及切换struts的键盘快捷方式,例如:

代码语言:javascript
复制
((mod4Mask .|. shiftMask, xK_f), sendMessage ToggleStruts)
票数 2
EN

Stack Overflow用户

发布于 2013-12-07 21:21:55

这就是我在配置中所拥有的内容(稍微修改一下格式,使其更像您的配置):

代码语言:javascript
复制
main = do
    config <- statusBar "xmobar" myPP toggleXMobarKey myConfig
    xmonad config

myPP = xmobarPP { -- your PP customizations...
                  ppOutput = hPutStrLn xmproc
                , ppTitle = xmobarColor "green" "" . shorten 50
                }

toggleXMobarKey XConfig { XMonad.modMask = modMask } = (modMask, xK_b)

myConfig = defaultConfig { -- put your config here...
                           -- not including your logHook
                         }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20446348

复制
相关文章

相似问题

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