xmonad-contrib- Community-maintained extensions for xmonad
Copyright(c) 2021 Tomáš Janoušek <tomi@nomi.cz>
MaintainerTomáš Janoušek <tomi@nomi.cz>
Safe HaskellSafe-Inferred




Custom hooks for screen (xrandr) configuration changes.



This module provides a replacement for the screen configuration change handling in core that enables attaching custom hooks to screen (xrandr) configuration change events. These can be used to restart/reposition status bars or systrays automatically after xrandr (dynamicSBs uses this module internally), as well as to actually invoke xrandr or autorandr when an output is (dis)connected.

To use this, include the following in your xmonad.hs:

import XMonad.Hooks.Rescreen

define your custom hooks:

myAfterRescreenHook :: X ()
myAfterRescreenHook = spawn "fbsetroot -solid red"
myRandrChangeHook :: X ()
myRandrChangeHook = spawn "autorandr --change"

and hook them into your xmonad config:

main = xmonad $ …
              . addAfterRescreenHook myAfterRescreenHook
              . addRandrChangeHook myRandrChangeHook
              . …
              $ def{…}

See documentation of rescreenHook for details about when these hooks are called.

addRandrChangeHook :: X () -> XConfig l -> XConfig l Source #

Shortcut for rescreenHook.

data RescreenConfig Source #

Hook configuration for rescreenHook.




rescreenHook :: RescreenConfig -> XConfig l -> XConfig l Source #

Attach custom hooks to screen (xrandr) configuration change events. Replaces the built-in rescreen handling of xmonad core with:

  1. listen to RRScreenChangeNotifyEvent in addition to ConfigureEvent on the root window
  2. whenever such event is received:
  3. clear any other similar events (Xorg server emits them in bunches)
  4. if any event was ConfigureEvent, rescreen and invoke afterRescreenHook
  5. if there was no ConfigureEvent, invoke randrChangeHook only

afterRescreenHook is useful for restarting/repositioning status bars and systray.

randrChangeHook may be used to automatically trigger xrandr (or perhaps autorandr) when outputs are (dis)connected.

Note that rescreenHook is safe to use several times, rescreen is still done just once and hooks are invoked in sequence, also just once.