config, doc, changelog: move selection-override-modifiers to [mouse-bindings] and validate other case

specifically, check for conflicts both when mouse bindings are set and when the selection-override-modifiers setting itself is set
This commit is contained in:
feeptr@codeberg.org 2021-11-29 22:06:35 +00:00
parent 46cadee80f
commit b52cd67467
4 changed files with 41 additions and 25 deletions

View file

@ -38,9 +38,9 @@
## Unreleased
### Added
* `[mouse].selection-override-modifiers` option, specifying which modifiers
to hold to override mouse grabs by client applications and force selection
instead.
* `[mouse-bindings].selection-override-modifiers` option, specifying
which modifiers to hold to override mouse grabs by client
applications and force selection instead.
### Changed

View file

@ -1349,13 +1349,6 @@ parse_section_mouse(struct context *ctx)
else if (strcmp(key, "alternate-scroll-mode") == 0)
return value_to_bool(ctx, &conf->mouse.alternate_scroll_mode);
else if (strcmp(key, "selection-override-modifiers") == 0) {
if (!parse_modifiers(ctx, ctx->value, strlen(ctx->value), &conf->mouse.selection_override_modifiers)) {
LOG_CONTEXTUAL_ERR("%s: invalid modifiers '%s'", key, ctx->value);
return false;
}
}
else {
LOG_CONTEXTUAL_ERR("not a valid option: %s", key);
return false;
@ -2166,6 +2159,37 @@ parse_section_mouse_bindings(struct context *ctx)
const char *key = ctx->key;
const char *value = ctx->value;
if (strcmp(ctx->key, "selection-override-modifiers") == 0) {
if (!parse_modifiers(ctx, ctx->value, strlen(ctx->value),
&conf->mouse.selection_override_modifiers)) {
LOG_CONTEXTUAL_ERR("%s: invalid modifiers '%s'", key, ctx->value);
return false;
}
/* Ensure no existing bindings use these modifiers */
for (size_t i = 0; i < conf->bindings.mouse.count; i++) {
const struct config_mouse_binding *binding = &conf->bindings.mouse.arr[i];
struct key_combo combo = {
.modifiers = binding->modifiers,
.m = {
.button = binding->button,
.count = binding->count,
},
};
struct key_combo_list key_combos = {
.count = 1,
.combos = &combo,
};
if (selection_override_interferes_with_mouse_binding(ctx, &key_combos)) {
return false;
}
}
return true;
}
struct argv pipe_argv;
ssize_t pipe_remove_len = pipe_argv_from_value(ctx, &pipe_argv);

View file

@ -470,16 +470,6 @@ applications can change these at runtime.
Default: _yes_.
*selection-override-modifiers*
Modifiers. The set of modifiers which, when held, will override
attempts by programs running in the terminal to capture mouse
input.
Any modifiers in this set cannot be used for mouse bindings
themselves.
Default: Shift
# SECTION: colors
@ -875,10 +865,12 @@ of the modifiers *must* be valid XKB key names, and the button name
*must* be a valid libinput name. You can find the button names using
*libinput debug-events*.
Note that the modifiers set in *mouse.selection-override-modifiers*
(by default, *Shift*) cannot be used as modifiers in mouse bindings
since they are used to enable selection when the client application is
grabbing the mouse.
The modifiers set in *[mouse-bindings].selection-override-modifiers*
(by default, *Shift*) cannot be used as modifiers in mouse bindings,
and are instead used to enable selecting text with the mouse
irrespective of whether a client application currently has the mouse
grabbed. Because the order of bindings is significant, it's best to
set this prior to any other mouse bindings that might use *Shift*.
The trailing *COUNT* is optional and specifies the click count
required to trigger the binding. The default if *COUNT* is omitted is

View file

@ -63,7 +63,6 @@
[mouse]
# hide-when-typing=no
# alternate-scroll-mode=yes
# selection-override-modifiers=Shift
[colors]
# alpha=1.0
@ -170,6 +169,7 @@
# toggle-url-visible=t
[mouse-bindings]
# selection-override-modifiers=Shift
# primary-paste=BTN_MIDDLE
# select-begin=BTN_LEFT
# select-begin-block=Control+BTN_LEFT