When `runProcessWithInput` is invoked immediately after `ungrabPointer`/`ungrabKeyboard`, we don't actually ungrab at all because `runProcessWithInput` blocks and the ungrab requests wait in Xlib's queue for a requests that needs a queue flush. Common uses of `unGrab` (before `spawn`) aren't followed by a blocking action, so the ungrab requests are flushed by xmonad's main loop, and this is merely a timing issue—fork/exec takes a while and xmonad probably manages to get back to its main loop in time. Uses of `runProcessWithInput` in ordinary non-submap key bindings happen to work because key bindings are passive grabs—the grab is released by the user's fingers releasing the key itself, even if xmonad's ungrab requests are stuck in a blocked queue. Submap key bindings, however, take an active grab and therefore need to ungrab explicitly. Easy fix—explicit `sync`. Fixes: https://github.com/xmonad/xmonad/issues/313
xmonad-contrib: Third Party Extensions to the xmonad Window Manager
You need the ghc compiler and xmonad window manager installed in order to use these extensions.
For installation and configuration instructions, please see the xmonad website, the documents included with the xmonad source distribution, and the online haddock documentation.
Getting or Updating XMonadContrib
-
Latest release: https://hackage.haskell.org/package/xmonad-contrib
-
Git version: https://github.com/xmonad/xmonad-contrib
(To use git xmonad-contrib you must also use the git version of xmonad.)
Contributing
Haskell code contributed to this repo should live under the
appropriate subdivision of the XMonad
namespace (currently includes
Actions
, Config
, Hooks
, Layout
, Prompt
, and Util
). For
example, to use the Grid layout, one would import:
XMonad.Layout.Grid
For further details, see the documentation for the
XMonad.Doc.Developing
module, XMonad's CONTRIBUTING.md and the xmonad website.
License
Code submitted to the contrib repo is licensed under the same license as xmonad itself, with copyright held by the authors.