XMonad.Hooks.BorderPerWindow

xmonad-contrib-0.18.1: Community-maintained extensions for xmonad

Copyright | (c) 2021 Xiaokui Shu
License | BSD-style (see LICENSE)
Maintainer | subbyte@gmail.com
Stability | unstable
Portability | unportable
Safe Haskell | None
Language | Haskell2010

XMonad.Hooks.BorderPerWindow

Contents

- Usage
- Design Considerations

Description

Want to customize border width, for each window on all layouts? Want specific window have no border on all layouts? Try this.

Synopsis

- defineBorderWidth :: Dimension -> ManageHook
- actionQueue :: forall (l :: Type -> Type). XConfig l -> XConfig l

# Usage

To use this module, first import it

    import XMonad.Hooks.BorderPerWindow (defineBorderWidth, actionQueue)

Then specify which window to customize the border of in your `manageHook`:

    myManageHook :: ManageHook
    myManageHook = composeAll
        [ className =? "firefox"  --> defineBorderWidth 0
        , className =? "Chromium" --> defineBorderWidth 0
        , isDialog                --> defineBorderWidth 8
        ]

Finally, add the `actionQueue` combinator and `myManageHook` to your config:

    main = xmonad $ actionQueue $ def
        { ...
        , manageHook = myManageHook
        , ...
        }

Note that this module is incompatible with other ways of changing borders, like XMonad.Layout.NoBorders. This is because we are changing the border exactly once (when the window first appears) and not every time some condition is satisfied.

defineBorderWidth :: Dimension -> ManageHook #

actionQueue :: forall (l :: Type -> Type). XConfig l -> XConfig l #

Every time the `logHook` runs, execute all actions in the queue.

# Design Considerations

1. Keep it simple. Since the extension does not aim to change border setting when layout changes, only execute the border setting function once to avoid potential window flashingjumpingscaling.
2. The `ManageHook` eDSL is a nice language for specifying windows. Let's build on top of it and use it to specify window to define border.