如何从XMonad中的所有浮动窗口中删除边框

迪伦

有几个类似的问题,但还没有一个为我解决,例如,这个问题说明了如何从全屏浮动窗口中删除边框。

使用XMonad.Layout.NoBorders可以做很多很酷的事情,例如从某些窗口中删除边框,或者如果这是唯一窗口或仅是全屏浮动窗口。

我无法为所有浮动窗口找到任何东西,但是,如果有人可以将我指向可以用来检查窗口是否在浮动的工具,我相信我可以尝试破解一个解决方案。

欢迎任何建议

达斯·芬尼斯

我将使用XMonad.Layout.NoBorders源代码作为参考,因为我找不到已经存在的更合适的东西。我们想看看它如何实现“在全屏浮动窗口上删除边框”,以查看是否可以轻松放宽“在全屏浮动窗口上删除边框”(没有全屏约束)。

根据您所链接问题的答案:

layoutHook = lessBorders OnlyFloat $ avoidStruts $ myLayout

OnlyFloat 似乎是“删除全屏浮动窗口上的边框”的说明符,所以让我们检查一下它的定义:

data Ambiguity = Combine With Ambiguity Ambiguity
               | OnlyFloat
               | Never
               | EmptyScreen
               | OtherIndicated
               | Screen
    deriving (Read, Show)

本身并不太有用。我们应该去别处看看代码如何处理这些值。


可以肯定地说,要检查的第一个功能是lessBorders

lessBorders :: (SetsAmbiguous p, Read p, Show p, LayoutClass l a) =>
        p -> l a -> ModifiedLayout (ConfigurableBorder p) l a
lessBorders amb = ModifiedLayout (ConfigurableBorder amb [])

从的类型签名中lessBorders,我们可以看到:

OnlyFloat :: (SetsAmbiguous p, Read p, Show p) => p

这是一个好兆头,因为这意味着lessBorders不会明确期望Ambiguity:我们可以在这里扩展功能,方法是实现自己的功能SetsAmbiguous并将其传递给现有的lessBorders现在让我们看一下SetsAmbiguousAmbiguity的实现:

class SetsAmbiguous p where
    hiddens :: p -> WindowSet -> Maybe (W.Stack Window) -> [(Window, Rectangle)] -> [Window]

instance SetsAmbiguous Ambiguity where
    hiddens amb wset mst wrs
      | Combine Union a b <- amb = on union next a b
      | Combine Difference a b <- amb = on (\\) next a b
      | Combine Intersection a b <- amb = on intersect next a b
      | otherwise = tiled ms ++ floating
      where next p = hiddens p wset mst wrs
            nonzerorect (Rectangle _ _ 0 0) = False
            nonzerorect _ = True
            screens =
              [ scr | scr <- W.screens wset,
                      case amb of
                            Never -> True
                            _ -> not $ null $ integrate scr,
                      nonzerorect . screenRect $ W.screenDetail scr]
            floating = [ w |
                        (w, W.RationalRect px py wx wy) <- M.toList . W.floating $ wset,
                        px <= 0, py <= 0,
                        wx + px >= 1, wy + py >= 1]
            ms = filter (`elem` W.integrate' mst) $ map fst wrs
            tiled [w]
              | Screen <- amb = [w]
              | OnlyFloat <- amb = []
              | OtherIndicated <- amb
              , let nonF = map integrate $ W.current wset : W.visible wset
              , length (concat nonF) > length wrs
              , singleton $ filter (1==) $ map length nonF = [w]
              | singleton screens = [w]
            tiled _ = []
            integrate y = W.integrate' . W.stack $ W.workspace y

hiddens是我们唯一需要实现的方法。它的参数是我们的SetsAmbiguousvalue,aWindowSet和其他东西,它返回不显示边框的窗口列表。合并操作和其他Ambiguity有很多逻辑,但是现在这些对我们来说都无关紧要。我们关心的是以下片段:

            floating = [ w |
                        (w, W.RationalRect px py wx wy) <- M.toList . W.floating $ wset,
                        px <= 0, py <= 0,
                        wx + px >= 1, wy + py >= 1]

这是非常有希望的。它通过提取所有窗口定义了一组浮动窗口floating的部分WindowSet,将其转换为一个列表(最初这是一个Data.Map),并过滤掉所有不覆盖整个屏幕的窗口。我们需要做的就是删除过滤器。


进行更改后,除去所有与平铺窗口和set操作有关的不必要代码(这是大多数实现),我们最终得到了简单的结果:

import XMonad.Layout.NoBorders
import qualified XMonad.StackSet as W
import qualified Data.Map as M

data AllFloats = AllFloats deriving (Read, Show)

instance SetsAmbiguous AllFloats where
    hiddens _ wset _ _ = M.keys $ W.floating wset

然后我们可以说:

layoutHook = lessBorders AllFloats $ myLayout...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何防止所有窗口浮动(xmonad)

如何使用 GNOME shell 从 Ubuntu 18.04 中的窗口中删除圆角边框?

如何从最大化的WPF窗口中删除边框?

如何在模式窗口中删除内容边框

Xmonad如何防止浮动窗口始终在顶部?

引导表。如何从表格中删除所有边框?

JavaFX CSS 从窗口中删除蓝色边框

如何获取鼠标浮动窗口中的内容?

XMonad:在将窗口浮动后,如何再次将其重新插入平铺布局中?

如何获取在Firefox中在多个窗口中打开的所有选项卡的标题?

如何在单个浏览器窗口中预览目录中的所有图像?

如何使用 LXDE 在 Ubuntu 18.04 中的所有 Uxterm 窗口中增加字体大小?

如何在 ncurses 窗口中打印出数组中的所有字符串?

xmonad:浮动窗口的默认大小

如何记录在Powershell窗口中编写的所有内容?

如何更改窗口中所有按钮的属性?

在VI中的所有窗口中插入模式

如何删除窗口中NaN值周围的数组中的点

快速删除Excel工作表中的所有浮动图片

在tmux中,是否可以列出所有窗口中的所有窗格?

在tmux中,是否可以列出所有窗口中的所有窗格?

大虾:如何删除桌子上的所有边框?

如何删除选择框的所有边框?

pywinauto:遍历窗口中的所有控件

如何配置TypeScript以隐藏窗口中的所有全局变量,但访问窗口本身?

从引导表中删除所有边框

removeEventListener 没有从窗口中删除事件

在i3wm中禁用浮动窗口的边框

如何从弹出窗口中删除背景控件?