![](/img/trans.png)
[英]Remove border from fullscreen floating windows only (XMonad configuration)
[英]Config No Border For Specific Windows in Xmonad
在 Xmonad 中不为特定窗口设置边框。
具体示例:我希望firefox
和feh
始终没有边框。 我想不仅为特定布局(例如,单个窗口)或特定窗口模式(如浮动)设置它。
我最直接的想法是在manageHook
添加一行,它假设处理窗口创建。 所以我在我定制的ManageHook
放了一行:
className =? "firefox" --> ask >>= \w -> liftX $ withDisplay $ \d -> io $ setWindowBorderWidth d w 0 >> idHook
它编译,但不幸的是当我启动firefox
时没有任何反应。
然后我尝试调试它:
ManageHook
有效,并且我的逻辑(修改窗口后跟idHook
)应该没问题。className =? "firefox" --> ask >>= liftX . float >> idHook
经测试setWindowBorderWidth
试图功能toggleBorder
在XMonad.Actions.NoBorders 。 toggleBorder
执行类似调用setWindowBorderWidth
。 我使用键绑定来调用toggleBorder
并且它有效。 因此setWindowBorderWidth
在创建窗口后的setWindowBorderWidth
会话期间运行良好。
测试了以下内容(在此处找到)但它不起作用,与我的代码(尝试 A)相同。
className =? "firefox" --> ask >>= liftX . toggleBorder >> idHook
我在XMonad.Layout.NoBorders和这个答案中找到了hasBorder
函数,但我没有成功。
如果我只放className =? "firefox" --> hasBorder False
className =? "firefox" --> hasBorder False
的ManageHook
但不使用layoutHook
,什么都不会发生。 查了hasBorder
的源码,发现只广播消息,没有设置边框。 我想我可能需要调用一个layoutHook
从XMonad.Layout.NoBorders
真正设置边界,但我不知道哪一个,我应该使用。 而且我也不确定是否需要指定任何布局来使用XMonad.Layout.NoBorders
。
ManageHook
是否在ManageHook
之后设置了边框,以便我在尝试 A 中的代码无效?
如果 Q1 为真,是否意味着当窗口在屏幕上绘制时,我只能在LayoutHook
(可能使用XMonad.Layout.NoBorders
)上不设置边框?
如果 Q2 为真,我是否需要指定布局以及我可以使用哪个layoutHook
?
我会尝试B:
从 xmonad-contrib 导入NoBorders模块:
import XMonad.Layout.NoBorders
在您的 manageHook 中定义您的约束:
className =? "feh" --> hasBorder False
className =? "firefox" --> hasBorder False
并将模块的布局修饰符之一,例如smartBorders
应用于所有布局:
layoutHook = smartBorders $ Full ||| ResizableTall 1 (3/100) (1/2) [] ||| ...
注意:这只会影响重新编译并重新启动 XMonad后创建的窗口。 已经存在的 firefox 和 feh 实例在关闭和重新启动之前仍然有它们的边界。
我想我找到了第一个问题的答案。
Xmonad 是否在 ManageHook 之后设置了边框,以便我在尝试 A 中的代码无效?
是的。
看起来 xmonad 窗口初始化逻辑在XMonad/Operations.hs 中。 创建窗口时,将调用函数manage() 。 函数的最后三行:
ManageHook
,runQuery()
应用ManageHook
, 最后一步setInitialProperties()
使用从配置加载的边框宽度调用setWindowBorderWidth()
,这使我的setWindowBorderWidth()
作为ManageHook
步骤无效。
如果我不更改XMonad/Operations.hs 中的这个逻辑,看起来我只能尝试 B。但是,我真的觉得windows跳转问题很烦人。 这不仅发生在Full
布局中,我在单个窗口中使用Tall
。 当我在两个工作区之间切换时,这两个工作区都有一个没有边框的窗口,我看到这个跳跃。 视觉效果影响屏幕上的所有像素,因为它需要缩放整个窗口。 需要为此找到解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.