Copyright | (c) 2021 Xiaokui Shu |
---|---|
License | BSD-style (see LICENSE) |
Maintainer | subbyte@gmail.com |
Stability | unstable |
Portability | unportable |
Safe Haskell | None |
Language | Haskell2010 |
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.
actionQueue :: forall (l :: Type -> Type). XConfig l -> XConfig l Source #
Every time the logHook
runs, execute all actions in the queue.
Design Considerations
- 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.
- 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.