只移除全屏浮动窗口的边框(XMonad配置)

15

我想要实现:

  1. 仅从覆盖整个屏幕的浮动窗口(如 mplayer)中删除边框,并且
  2. 在工作区中只有一个窗口时使用不同的边框颜色(normalBorderColor)。

目前,我正在使用 XMonad.Layout.NoBorders 中的 smartBorders 来删除 mplayer 的边框,并在窗口是工作区中唯一的窗口时删除边框。然而,当我在两个工作区之间切换并且这两个工作区都有单个非浮动窗口时(无论是哪种模式(tall/mirror/full)),那么我会看到窗口(在我改变到的工作区中)“跳”了一下,因为它的边框被绘制,然后在短暂的时间内被删除(如果您将 borderWidth 设置为大数值,则效果更明显)。

我的 ~/.xmonad/xmonad.hs 中相关的部分如下所示。

import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
myLayout = tiled ||| Mirror tiled ||| Full
  where
    tiled   = Tall 1 (3/100) (3/5)                                 
main = xmonad $ defaultConfig 
                 { layoutHook = avoidStruts $ smartBorders $ myLayout 
                 , borderWidth = 4
                 , normalBorderColor  = "#000000" -- black
                 , focusedBorderColor = "#ff3f3f" -- reddish
                 }

你们知道我如何实现这个效果吗?(第二部分是否可能?)非常感谢对能够实现类似效果的扩展和/或现有配置的建议和指针。

2个回答

9

我使用 XMonad.Layout.NoBorders 中的 OnlyFloat 模块来解决 pt. 1,它是一个模糊构造函数。

import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
myLayout = tiled ||| Mirror tiled ||| Full
  where
    tiled   = Tall 1 (3/100) (3/5)                                 
main = xmonad $ defaultConfig 
                 { layoutHook = lessBorders OnlyFloat $ avoidStruts $ myLayout 
                 , borderWidth = 4
                 , normalBorderColor  = "#000000" -- black
                 , focusedBorderColor = "#ff3f3f" -- reddish
                 }

我还没有解决第二个问题。另外,当我切换到工作区时,焦点窗口的边框颜色会"闪烁",因为初始时窗口没有被聚焦(所以边框的颜色是普通的BorderColor),随后窗口变成了焦点窗口(因此其边框变为了聚焦边框的颜色)。


1
关于第二部分:xmonad-contrib软件包的0.17.0版本引入了新的XMonad.Layout.VoidBorders布局修饰符,它可以像XMonad.Layout.NoBorders一样去除边框,但是有点类似于永久性的(即使将窗口移动到VoidBorders控制的工作区之外,窗口仍将保留其零宽度边框)。这种副作用可能会或可能不会成为一个破坏因素,但它解决了在切换工作区时窗口“跳动”的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接