Search code examples
haskellxmonad

Xmonad warning and error for docksEventHook following last update


I am running xmonad on Arch. I just updated to 0.17.0-1

I have this in my xmonad.hs file:

108   xmonad $ ewmh $ myConfig
109     { --These three line fix xmobar getting overlapped. Need all three in this order
110       manageHook      = manageDocks <+> manageHook def
111     , layoutHook      = spacing 5 $ avoidStruts $ layoutHook def
112     , handleEventHook = handleEventHook def <+> docksEventHook
113     }

After the last xmonad update I am now getting this warning when I try to recompile xmonod:

xmonad.hs:112:49: warning: [-Wdeprecations]
    In the use of ‘docksEventHook’
    (imported from XMonad.Hooks.ManageDocks):
    Deprecated: "Use docks instead."
    |
112 |     , handleEventHook = handleEventHook def <+> docksEventHook
    |                                                 ^^^^^^^^^^^^^^

Please correct them or silence using {-# OPTIONS_GHC -Wno-deprecations #-}.

```hs
I have tried following the recommendation and changed line 112 to:

```hs
112 |     , handleEventHook = handleEventHook def <+> docks

But that just creates the following error:

xmonad.hs:112:49: error:
    • Couldn't match type ‘XConfig a0’ with ‘Event’
      Expected: Event -> X base-4.15.1.0:Data.Semigroup.Internal.All
        Actual: XConfig a0 -> XConfig a0
    • In the second argument of ‘(<+>)’, namely ‘docks’
      In the ‘handleEventHook’ field of a record
      In the second argument of ‘($)’, namely
        ‘myConfig
           {manageHook = manageDocks <+> manageHook def,
            layoutHook = spacing 5 $ avoidStruts $ layoutHook def,
            handleEventHook = handleEventHook def <+> docks}’
    |
112 |     , handleEventHook = handleEventHook def <+> docks
    |                                                 ^^^^^

Please check the file for errors.

I do not understand how to proceed. If docks is the replacement for docksEventHook then why would the type be wrong?

What is the actual fix for this? I would prefer to fix the warnings rather than silence them.


Solution

  • docks is now a combinator that operates on the whole configuration object, not just a hook like docksEventHook was, so you use it the same way you do ewmh:

       xmonad $ ewmh . docks $ myConfig
         {
           manageHook      = manageDocks <+> manageHook def
         , layoutHook      = spacing 5 $ avoidStruts $ layoutHook def
         }