]> git.corax.cc Git - dwm/commit
Add experimental keyboard pointer
authorMatthias Kruk <m@m10k.eu>
Fri, 19 Mar 2021 07:28:33 +0000 (16:28 +0900)
committerMatthias Kruk <m@m10k.eu>
Fri, 19 Mar 2021 07:28:33 +0000 (16:28 +0900)
commit8d057a9511e1fe050209c8d18f1fe412176eff27
tree3099aa8bb40d84cd0693c2e0f2381d622b2fce04
parentd7317a5f0b614b1fc0ef914e32c143c69f90b370
Add experimental keyboard pointer

The pointer is typically very awkward to use, especially on devices with mice or
similar input devices. This commit adds an experimental keyboard pointer, which
allows the user to move the pointer and perform clicks through the keyboard.
The keyboard pointer follows this basic idea: The user can move the pointer in
four directions: North, East, South, West. The pointer has a horizontal stride
and a vertical stride (the size of a step in horizontal or vertical direction,
respectively). With each step, the respective stride is reduced by half.
The origin of the pointer is the center of the focused window, and the initial
horizontal and vertical stride are a quarter of the window's width and height,
respectively.

For example in a 100x100px window (the point (0, 0) being the top left corner),
the pointer's origin is (50, 50). If the pointer makes one step north, it will
be at (50, 25). Moving another step north will put the pointer at (50, 12.5).
The user can also hold the shift key while moving, which will cause the stride
to be reduced once before the movement and once after the movement (this seemed
useful for targets that are close to the origin).

This pointer behavior has two implications:

 1. If the stride reaches zero, the pointer can't be moved anymore
 2. The pointer can never leave the window (it asymptotically approaches the
    outermost pixel, strictly speaking)

Re-centering the pointer also replenishes the stride. If a user misses their
target, they have to start over from the center of the window. If a user wants
to point at another window, they have to move the focus to that window first.
I'm not sure if this kind of pointer behavior is more or less annoying than
using a traditional pointing device. That's why this feature is experimental.
config.def.h
dwm.c