Portability | unportable |
---|---|
Stability | unstable |
Maintainer | Joachim Breitner <mail@joachim-breitner.de> |
This module provides tools to automatically manage dock
type programs,
such as gnome-panel, kicker, dzen, and xmobar.
- manageDocks :: ManageHook
- checkDock :: Query Bool
- data AvoidStruts a
- avoidStruts :: LayoutClass l a => l a -> ModifiedLayout AvoidStruts l a
- avoidStrutsOn :: LayoutClass l a => [Direction2D] -> l a -> ModifiedLayout AvoidStruts l a
- data ToggleStruts
- data SetStruts = SetStruts {
- addedStruts :: [Direction2D]
- removedStruts :: [Direction2D]
- module XMonad.Util.Types
- calcGap :: Set Direction2D -> X (Rectangle -> Rectangle)
Usage
To use this module, add the following import to ~/.xmonad/xmonad.hs
:
import XMonad.Hooks.ManageDocks
The first component is a ManageHook
which recognizes these
windows and de-manages them, so that xmonad does not try to tile
them. To enable it:
manageHook = ... <+> manageDocks
The second component is a layout modifier that prevents windows from overlapping these dock windows. It is intended to replace xmonad's so-called "gap" support. First, you must add it to your list of layouts:
layoutHook = avoidStruts (tall ||| mirror tall ||| ...) where tall = Tall 1 (3/100) (1/2)
AvoidStruts
also supports toggling the dock gaps; add a keybinding
similar to:
,((modm, xK_b ), sendMessage ToggleStruts)
If you have multiple docks, you can toggle their gaps individually. For example, to toggle only the top gap:
,((modm .|. controlMask, xK_t), sendMessage $ ToggleStrut U)
Similarly, you can use D
, L
, and R
to individually toggle
gaps on the bottom, left, or right.
If you want certain docks to be avoided but others to be covered by
default, you can manually specify the sides of the screen on which
docks should be avoided, using avoidStrutsOn
. For example:
layoutHook = avoidStrutsOn [U,L] (tall ||| mirror tall ||| ...)
Important note: if you are switching from manual gaps
(defaultGaps in your config) to avoidStruts (recommended, since
manual gaps will probably be phased out soon), be sure to switch
off all your gaps (with mod-b) before reloading your config with
avoidStruts! Toggling struts with a ToggleStruts
message will
not work unless your gaps are set to zero.
For detailed instructions on editing your key bindings, see XMonad.Doc.Extending.
manageDocks :: ManageHookSource
Detects if the given window is of type DOCK and if so, reveals it, but does not manage it. If the window has the STRUT property set, adjust the gap accordingly.
data AvoidStruts a Source
LayoutModifier AvoidStruts a | |
Read (AvoidStruts a) | |
Show (AvoidStruts a) |
avoidStruts :: LayoutClass l a => l a -> ModifiedLayout AvoidStruts l aSource
Adjust layout automagically: don't cover up any docks, status bars, etc.
avoidStrutsOn :: LayoutClass l a => [Direction2D] -> l a -> ModifiedLayout AvoidStruts l aSource
Adjust layout automagically: don't cover up docks, status bars, etc. on the indicated sides of the screen. Valid sides are U (top), D (bottom), R (right), or L (left).
data ToggleStruts Source
Message type which can be sent to an AvoidStruts
layout
modifier to alter its behavior.
SetStruts is a message constructor used to set or unset specific struts, regardless of whether or not the struts were originally set. Here are some example bindings:
Show all gaps:
,((modm .|. shiftMask ,xK_b),sendMessage $ SetStruts [minBound .. maxBound] [])
Hide all gaps:
,((modm .|. controlMask,xK_b),sendMessage $ SetStruts [] [minBound .. maxBound])
Show only upper and left gaps:
,((modm .|. controlMask .|. shiftMask,xK_b),sendMessage $ SetStruts [U,L] [minBound .. maxBound])
Hide the bottom keeping whatever the other values were:
,((modm .|. controlMask .|. shiftMask,xK_g),sendMessage $ SetStruts [] [D])
SetStruts | |
|
module XMonad.Util.Types