input: make wheel events mappable

Un-grabbed wheel events are now passed through the mouse binding
matching logic, instead of being hardcoded to scrolling the terminal
contents.

They are mappable through the BTN_BACK and BTN_FORWARD buttons.

Since they're not actually button *presses*, they never generate a
click count other than 1. This limitation is documented, but not
checked in the config. This means it's possible to create bindings
like "BTN_BACK+3" (i.e. triple "click"). They will however never
trigger.

The old, hardcoded logic is now accessible through the new
scrollback-up-mouse and scrollback-down-mouse mouse
bindings. They (obiously) default to BTN_BACK and BTN_FORWARD,
respectively.

Example usage: keep the default of scrolling terminal contents with
the wheel, when used without modifiers, but map Control+wheel to font
zoom in/out:

  [mouse-bindings]
  font-increase=Control+BTN_FORWARD
  font-decrease=Control+BTN_BACK

(this also keeps the default key bindings to zoom in/out; ctrl-+ and
ctrl+-)

Closes #1077
This commit is contained in:
Daniel Eklöf 2023-09-18 16:36:39 +02:00
parent f0f0d02bf7
commit fe7aa25ad8
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
6 changed files with 162 additions and 105 deletions

View file

@ -50,6 +50,13 @@
### Added
* Support for building with _wayland-protocols_ as a subproject.
* Mouse wheel scrolls can now be used in `mouse-bindings`
([#1077](1077)).
* New mouse bindings: `scrollback-up-mouse` and
`scrollback-down-mouse`, bound to `BTN_BACK` and `BTN_FORWARD`
respectively.
[1077]: https://codeberg.org/dnkl/foot/issues/1077
### Changed