目标
在 Xmonad 中为特定窗口设置无边框。
具体例子:我想要firefox
并且feh
总是没有边界。我不仅要为特定布局(例如,单个窗口)或特定窗口模式(如浮动)设置它。
尝试A
我最直接的想法是在 中添加一行manageHook
,它应该处理窗口创建。所以我在我的自定义中放了一行ManageHook
:
className =? "firefox" --> ask >>= \w -> liftX $ withDisplay $ \d -> io $ setWindowBorderWidth d w 0 >> idHook
它编译,但不幸的是,当我开始时没有任何反应firefox
。
然后我尝试调试它:
- 测试了以下,它可以工作(新的firefox窗口浮动),这表明我的自定义
ManageHook
工作,我的逻辑(修改窗口后跟idHook
)应该是可以的。
className =? "firefox" --> ask >>= liftX . float >> idHook
通过在XMonad.Actions.NoBorders中尝试测试
setWindowBorderWidth
功能。做类似的事情。我使用了一个键绑定来调用它并且它有效。因此在创建窗口后的 Xmonad 会话期间运行良好。toggleBorder
toggleBorder
setWindowBorderWidth
toggleBorder
setWindowBorderWidth
测试了以下内容(在此处找到)但它不起作用,与我的代码相同(尝试 A)。
className =? "firefox" --> ask >>= liftX . toggleBorder >> idHook
尝试 B
我在XMonad.Layout.NoBorders和这个答案hasBorder
中找到了这个函数,但我没有成功。
如果我只放入className =? "firefox" --> hasBorder False
但ManageHook
不使用layoutHook
,则不会发生任何事情。我查看了源代码,hasBorder
发现它只广播了一条消息,但没有设置边框。我想我可能需要调用layoutHook
fromXMonad.Layout.NoBorders
来真正设置边界,但我不确定应该使用哪一个。而且我也不确定是否需要指定要使用的任何布局XMonad.Layout.NoBorders
。
问题
Xmonad 是否设置了边界,
ManageHook
所以我在尝试 A 中的代码无效?如果 Q1 为真,这是否意味着在屏幕上绘制窗口时我只能在
LayoutHook
(可能使用)处不设置边框?XMonad.Layout.NoBorders
如果 Q2 为真,我是否需要指定布局以及
layoutHook
可以使用的布局?