如何使用 xmonad 在每个 window 焦点上做间距?

How to do spacing per window on focus with xmonad?

我正在尝试在 window 周围设置焦点而不是边框​​。它更容易看到,window 是重点。

XMonad.Actions.Spacing 模块不包含根据 window id 制作间距的方法,我可以这样做:

myHook ConfigureEvent{ev_event_type = focusIn, ev_window = id} = do
 setSpacing id opacity

有什么办法吗,我需要什么?

免责声明:下面的代码尚未经过测试,很可能不会编译,即使编译了,也可能有xmonadxmonad-contrib 不导出此功能的充分理由,因为它似乎破坏了平铺设置......这个答案不适合评论,但应该考虑建议而不是解决方案.

您可以复制粘贴一些操作代码并根据您的意愿进行修改。例如从 XMonad.Actions.NoBorders 模仿 toggleBorder 你可以获得 width 和 heigth 属性并将它们设置为原始值的 95%。

-- Maybe more inputs are necesary, check for compiler errors
import XMonad

resizeOnFocus :: Window -> X ()
resizeOnFocus w = do
    withDisplay $ \d -> io $ do
        windowW <- wa_width <$> getWindowAttributes d w
        windowH <- wa_height <$> getWindowAttributes d w
        let newW = floor $ fromIntegral windowW * 0.95
            newH = floor $ fromIntegral windowH * 0.95
        resizeWindow d w newW newH 

将它与 withFocused 一起作为标准动作使用 ((modMask x, xK_g ), withFocused resizeOnFocus )