Copyright | (c) -- David Roundy <droundy@darcs.net> 2018 Yclept Nemo |
---|---|
License | BSD3-style (see LICENSE) |
Maintainer | Spencer Janssen <spencerjanssen@gmail.com> |
Stability | unstable |
Portability | unportable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Make a given layout display without borders. This is useful for full-screen or tabbed layouts, where you don't really want to waste a couple of pixels of real estate just to inform yourself that the visible window has focus.
Synopsis
- noBorders :: LayoutClass l Window => l Window -> ModifiedLayout WithBorder l Window
- smartBorders :: LayoutClass l a => l a -> ModifiedLayout SmartBorder l a
- withBorder :: LayoutClass l a => Dimension -> l a -> ModifiedLayout WithBorder l a
- lessBorders :: (SetsAmbiguous p, Read p, Show p, LayoutClass l a) => p -> l a -> ModifiedLayout (ConfigurableBorder p) l a
- hasBorder :: Bool -> ManageHook
- class SetsAmbiguous p where
- data Ambiguity
- data With
- data BorderMessage
- borderEventHook :: Event -> X All
- type SmartBorder = ConfigurableBorder Ambiguity
- data WithBorder a
- data ConfigurableBorder p w
Usage
You can use this module with the following in your xmonad.hs file:
import XMonad.Layout.NoBorders
and modify the layouts to call noBorders on the layouts you want to lack borders:
layoutHook = ... ||| noBorders Full ||| ...
For more detailed instructions on editing the layoutHook see the tutorial and XMonad.Doc.Extending.
noBorders :: LayoutClass l Window => l Window -> ModifiedLayout WithBorder l Window Source #
Removes all window borders from the specified layout.
smartBorders :: LayoutClass l a => l a -> ModifiedLayout SmartBorder l a Source #
Removes the borders from a window under one of the following conditions:
- There is only one screen and only one window. In this case it's obvious that it has the focus, so no border is needed.
- A floating window covers the entire screen (e.g. mplayer).
withBorder :: LayoutClass l a => Dimension -> l a -> ModifiedLayout WithBorder l a Source #
Forces a layout to use the specified border width. noBorders
is
equivalent to
.withBorder
0
lessBorders :: (SetsAmbiguous p, Read p, Show p, LayoutClass l a) => p -> l a -> ModifiedLayout (ConfigurableBorder p) l a Source #
Apply a datatype that has a SetsAmbiguous instance to provide a list of windows that should not have borders.
This gives flexibility over when borders should be drawn, in particular with
xinerama setups: Ambiguity
has a number of useful SetsAmbiguous
instances
hasBorder :: Bool -> ManageHook Source #
ManageHook
for sending HasBorder
messages:
title =? "foo" --> hasBorder True
There is no equivalent for ResetBorder
.
class SetsAmbiguous p where Source #
SetsAmbiguous allows custom actions to generate lists of windows that
should not have borders drawn through ConfigurableBorder
To add your own (though perhaps those options would better belong as an
additional constructor to Ambiguity
), you can add the following function.
Note that lr
, the parameter representing the Rectangle
of the parent
layout, was added to hiddens
in 0.14. Update your instance accordingly.
data MyAmbiguity = MyAmbiguity deriving (Read, Show)
instance SetsAmbiguous MyAmbiguity where hiddens _ wset lr mst wrs = otherHiddens Screen \\ otherHiddens OnlyScreenFloat where otherHiddens p = hiddens p wset lr mst wrs
The above example is redundant, because you can have the same result with:
layoutHook = lessBorders (Combine Difference Screen OnlyScreenFloat) (Tall 1 0.5 0.03 ||| ... )
To get the same result as smartBorders
:
layoutHook = lessBorders Never (Tall 1 0.5 0.03 ||| ...)
This indirect method is required to keep the Read
and Show
for
ConfigurableBorder so that xmonad can serialize state.
In order of increasing ambiguity (less borders more frequently), where
subsequent constructors add additional cases where borders are not drawn
than their predecessors. These behaviors make most sense with with multiple
screens: for single screens, Never
or smartBorders
makes more sense.
Combine With Ambiguity Ambiguity | This constructor is used to combine the borderless windows
provided by the SetsAmbiguous instances from two other |
OnlyLayoutFloatBelow | Like |
OnlyLayoutFloat | Only remove borders on floating windows that exactly cover the parent layout rectangle. |
OnlyScreenFloat | Only remove borders on floating windows that cover the whole screen. |
Never | Like |
EmptyScreen | Focus in an empty screen does not count as ambiguous. |
OtherIndicated | No borders on full when all other screens have borders. |
OnlyFloat | Remove borders on all floating windows; tiling windows of any kinds are not affected. |
Screen | Borders are never drawn on singleton screens. With this one you really need another way such as a statusbar to detect focus. |
Used to indicate to the SetsAmbiguous
instance for Ambiguity
how two
lists should be combined.
Union | uses |
Difference | uses |
Intersection | uses |
data BorderMessage Source #
HasBorder Bool Window | If |
ResetBorder Window | Reset the effects of any |
Instances
Message BorderMessage Source # | |
Defined in XMonad.Layout.NoBorders |
borderEventHook :: Event -> X All Source #
Only necessary with BorderMessage
- remove non-existent windows from the
alwaysHidden
or neverHidden
lists.
data WithBorder a Source #
Instances
data ConfigurableBorder p w Source #