Commit graph

2536 commits

Author SHA1 Message Date
Daniel Eklöf
cc48366f02
csi: implement CSI ? Pm s - XTSAVE 2020-08-16 16:47:46 +02:00
Daniel Eklöf
5593868471
csi: add xtsave()
This function stores the current state of DECSET private modes.
2020-08-16 16:46:21 +02:00
Daniel Eklöf
0787080023
csi: decrst: spell decset correctly 2020-08-16 16:38:30 +02:00
Daniel Eklöf
cf315de174
csi: add DEC names to a couple of DECSET modes 2020-08-16 16:25:52 +02:00
Daniel Eklöf
2eebf9b8cc
csi: break out decset/decrst 2020-08-16 16:23:17 +02:00
Daniel Eklöf
38ee05b1c7
Merge branch 'spelling-fix' into master 2020-08-16 16:04:37 +02:00
Craig Barnes
44499bbfe1 Fix spelling mistake in vt.c 2020-08-16 14:37:27 +01:00
Daniel Eklöf
5ab09cdc90
changelog: add ordoviz to contributors 2020-08-16 09:14:15 +02:00
Daniel Eklöf
a767139844
Merge branch 'typos' into master 2020-08-16 09:12:48 +02:00
Lennard Hofmann
df576d9a8e Fix typos 2020-08-15 23:29:38 +02:00
Daniel Eklöf
2ab2f5e99d
Merge branch 'spelling-fixes' into master 2020-08-15 21:28:13 +02:00
Daniel Eklöf
2013c373e6
Merge branch 'typo' into master 2020-08-15 21:26:49 +02:00
Craig Barnes
104fe2fa55 Fix some spelling mistakes 2020-08-15 19:39:00 +01:00
Birger Schacht
5d761a03cc Fix typo 2020-08-15 17:44:11 +02:00
Daniel Eklöf
ef1bab6559
readme: ctrl+shift+n: add link to wiki 2020-08-15 11:27:17 +02:00
Daniel Eklöf
b07a43c20e
changelog: remove duplicate entries (caused by bad merge) 2020-08-14 22:54:42 +02:00
Daniel Eklöf
b0d41324d6
render: render the render timer *before* committing the main surface 2020-08-14 07:52:08 +02:00
Daniel Eklöf
640445acb4
render: render-timer: position sub-surface similar to the scrollback indicator 2020-08-14 07:48:40 +02:00
Daniel Eklöf
394db77b04
Merge branch 'mouse-binding-actions' into master
Closes #79. Closes #75.
2020-08-14 07:39:11 +02:00
Daniel Eklöf
d29c4aed8a
input: mouse motion: don't update selection while scrollback searching
When we are doing a scrollback search, the selection *is* ongoing. We
still don't want to update the selection when the mouse moves.
2020-08-14 07:38:56 +02:00
Daniel Eklöf
bb9228dd21
input: bindings: calculate 'cursor_is_on_grid' once only 2020-08-14 07:38:56 +02:00
Daniel Eklöf
2764a8394a
footrc: fix combo for select-begin-block
Typo: should be a '+', not a '='.
2020-08-14 07:38:56 +02:00
Daniel Eklöf
364412bfaa
input: mouse-bindings: ignore Shift
Shift is used to enable selection when the client application is
grabbing the mouse.

As such, mouse bindings *never* have Shift as a modifier, but should
still trigger when Shift is being pressed.
2020-08-14 07:38:56 +02:00
Daniel Eklöf
517d13fbce
config: don't allow Shift in mouse bindings
Shift is a special modifier that is used to enable selection when the
client application is grabbing the mouse.
2020-08-14 07:38:56 +02:00
Daniel Eklöf
28410f1b99
input: mouse-bindings: check selection is enabled/possible and that pointer is on grid
We shouldn't start or modify a selection if selection isn't
possible (i.e. client application is grabbing the mouse, and user
isn't holding Shift).

We also shouldn't start or modify a selection if the pointer is
outside the grid (updating an ongoing selection on motion events is an
exception to this).
2020-08-14 07:38:56 +02:00
Daniel Eklöf
24ee6d836b
doc: footrc: mouse-bindings: clean up description 2020-08-14 07:38:56 +02:00
Daniel Eklöf
8f99a032c9
changelog: new mouse actions 2020-08-14 07:38:56 +02:00
Daniel Eklöf
4d2bc54fa2
config: mouse bindings: add select-begin-block and select-row 2020-08-14 07:38:56 +02:00
Daniel Eklöf
f14b49068a
selection: extend: set ongoing to true 2020-08-14 07:38:56 +02:00
Daniel Eklöf
9517c6443c
selection: finalize: clear ongoing selection
Check for ongoing selection, and *clear* it before bailing out due to
the selection not having an end-point.

This fixes an issue where a selection was kept as ongoing, even though
the button had been released. Typically triggered by clicking without
moving the mouse; this started a new selection, then (tried to)
finalize it, but failed since the selection didn't have an end-point.
2020-08-14 07:38:55 +02:00
Daniel Eklöf
cddeaa2c1c
selection: update: don't update if there's no ongoing selection 2020-08-14 07:38:55 +02:00
Daniel Eklöf
9352befd13
doc: footrc: document the new mouse actions 2020-08-14 07:38:55 +02:00
Daniel Eklöf
20f0334e13
config: add mouse specific bind actions
This extends the "normal" bind action enum with mouse specific
actions.

When parsing key bindings, we only check up to the last valid keyboard
binding, while mouse bindings support *both* key actions and mouse
actions.

The new actions are:

* select-begin: starts an interactive selection
* select-extend: interactively extend an existing selection
* select-word: select word under cursor
* select-word-whitespace: select word under cursor, where the only
  word separating characters are whitespace characters.

The old hard-coded selection "bindings" have been converted to instead
use these actions, via default bindings added to the configuration.
2020-08-14 07:38:55 +02:00
Daniel Eklöf
1dd142aeab
changelog: click count in mouse bindings 2020-08-14 07:38:55 +02:00
Daniel Eklöf
8ed3f66ad9
changelog: modifier support in mouse bindings 2020-08-14 07:38:55 +02:00
Daniel Eklöf
d940815f6d
Merge branch 'click-count-in-mouse-bindings' into master
Closes #78
2020-08-14 07:38:05 +02:00
Daniel Eklöf
f647816ff7
changelog: click count in mouse bindings 2020-08-14 07:36:53 +02:00
Daniel Eklöf
c6ad765f91
doc: footrc: document click count in mouse bindings 2020-08-14 07:36:53 +02:00
Daniel Eklöf
d74e583089
config: mouse bindings: add support for click count
Specified by appending "-X", where X is a number.
2020-08-14 07:36:53 +02:00
Daniel Eklöf
593cad3680
config: wrap LOG_AND_NOTIFY_*() in do {} while (0)
This allows us to use these macros in if-statement without braces.
2020-08-14 07:36:53 +02:00
Daniel Eklöf
9b65531d6a
Merge branch 'modifiers-in-mouse-bindings' into master 2020-08-14 07:36:34 +02:00
Daniel Eklöf
44557dc7cf
input: don't crash on mouse motion events on the render timer surface 2020-08-14 07:35:01 +02:00
Daniel Eklöf
b783e4c6ea
doc: footrc: document modifiers in mouse bindings 2020-08-13 18:47:20 +02:00
Daniel Eklöf
704d182c88
changelog: modifier support in mouse bindings 2020-08-13 18:47:20 +02:00
Daniel Eklöf
b97ef5819f
config: key/mouse bindings: refactor: less parsing in keyboard_enter()
This simplifies the handling of mouse and keyboard bindings.

Before, the bindings where parsed *both* when loading the
configuration, and then on every keyboard enter event. This was done
since keys require a keymap to be decoded. Something we don't have at
configuration time. The idea was that at config time, we used a
default keymap just to verify the key combo strings were valid.

The following has changed:

* The bindings in the config struct is now *one* key combo per
  entry. Previously, it was one *action* per entry, and each entry
  had one or more key combos.

  Doing it this way makes it easier when converting the binding in the
  keyboard enter event (which previously had to expand the combos
  anyway).

* The bindings in the config struct no longer contains any unparsed
  strings.

  A key binding contains a decoded 'modifier' struct (which specifies
  whether e.g. ctrl, or shift, or ctrl+shift must be pressed for the
  binding to be used).

  It also contains a decoded XKB keysym.

* A mouse binding in the config struct is similar to a key binding,
  except it contains the button, and click count instead of the XKB
  key sym.

* The modifiers in the user-specified key combo is decoded at config
  time, by using the pre-defined XKB constants
  XKB_MOD_NAME_<modifier>.

  The result is stored in a 'modifiers' struct, which is just a
  collection of booleans; one for each supported modifier.

  The supported modifiers are: shift, ctrl, alt and meta/super.

* The key sym is decoded at config time using
  xkb_keysym_from_name(). This call does *not* depend on a keymap.

* The mouse button is decoded at config time using a hardcoded mapping
  table (just like before).

* The click count is currently hard-coded to 1.

* In the keyboard enter event, all we need to do is pre-compute the
  xkb_mod_mask_t variable for each key/mouse binding, and find all the
  *key codes* that map to the (already decoded) symbol.

  For mouse bindings, the modifiers are the *only* reason we convert
  the mouse bindings at all.

  In fact, on button events, we check if the seat has a keyboard. If
  not, we use the mouse bindings from the configuration directly, and
  simply filter out those with a non-empty set of modifiers.
2020-08-13 18:47:19 +02:00
Daniel Eklöf
375dcf0810
input: pointer-leave: don't reset mouse properties with memset()
Using memset() also clears the mouse bindings. This is both incorrect,
and leaked memory.
2020-08-13 18:47:19 +02:00
Daniel Eklöf
49eea3893e
wayland: global-remove: return after finding a matching seat 2020-08-13 18:47:19 +02:00
Daniel Eklöf
6b18bd998a
wayland: global-remove: fix call to pointer_listener.leave()
Don't call it when we have keyboard focus, call it when we have mouse
focus.
2020-08-13 18:47:19 +02:00
Daniel Eklöf
544c1b1976
config: wip: add support for modifiers in mouse bindings
Mouse bindings can now include modifiers. They are specified in pretty
much the same way as in keyboard bindings:

  Control+BTN_LEFT
2020-08-13 18:47:19 +02:00
Daniel Eklöf
823a7c0318
render: oops... swprintf() needs to number of *chars*, not *bytes* 2020-08-13 18:46:57 +02:00