Skip to content
banish the mouse cursor when typing, show it again when the mouse moves
Branch: master
Clone or download
Latest commit 22aa867 Aug 31, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore Ignore output files Jul 28, 2015
Makefile release 1.6 Aug 31, 2018
README.md README: better formatting Jul 19, 2018
xbanish.1 document modifiers (#28) Jun 3, 2018
xbanish.c fix -i flag for xinput (non-legacy) (#31) Jul 19, 2018

README.md

xbanish

xbanish hides the mouse cursor when you start typing, and shows it again when the mouse cursor moves or a mouse button is pressed. This is similar to xterm's pointerMode setting, but xbanish works globally in the X11 session.

unclutter's -keystroke mode is supposed to do this, but it's broken. I looked into fixing it, but the unclutter source code is terrible, so I wrote xbanish.

The name comes from ratpoison's "banish" command that sends the cursor to the corner of the screen.

Implementation

If the XInput extension is supported, xbanish uses it to request input from all attached keyboards and mice. If XInput 2.2 is supported, raw mouse movement and button press inputs are requested which helps detect cursor movement while in certain applications such as Chromium.

If Xinput is not available, xbanish recurses through the list of windows starting at the root, and calls XSelectInput() on each window to receive notification of mouse motion, button presses, and key presses.

In response to any available keyboard input events, the cursor is hidden. On mouse movement or button events, the cursor is shown.

xbanish initially hid the cursor by calling XGrabPointer() with a blank cursor image, similar to unclutter's -grab mode, but this had problematic interactions with certain X applications. For example, xlock could not grab the pointer and sometimes didn't lock, xwininfo wouldn't work at all, Firefox would quickly hide the Awesome Bar dropdown as soon as a key was pressed, and xterm required two middle-clicks to paste the clipboard contents.

To avoid these problems and simplify the implementation, xbanish now uses the modern Xfixes extension to easily hide and show the cursor with XFixesHideCursor() and XFixesShowCursor().

You can’t perform that action at this time.