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




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, as well as to actually invoke xrandr or autorandr when an output is (dis)connected.

You can use it by including the following in your ~/.xmonad/xmonad.hs:

import XMonad.Hooks.RescreenHook

defining your custom hooks:

myAfterRescreenHook :: X ()
myAfterRescreenHook = …
myRandrChangeHook :: X ()
myRandrChangeHook = …
rescreenCfg = def{
    afterRescreenHook = myAfterRescreenHook,
    randrChangeHook = myRandrChangeHook

and adding rescreenHook to your xmonad config:

main = xmonad $ … . rescreenHook rescreenCfg . … $ def{…}

data RescreenConfig Source #

Hook configuration for rescreenHook.




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

Shortcut 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.