mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-16 05:34:00 -04:00
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:
parent
46cadee80f
commit
b52cd67467
4 changed files with 41 additions and 25 deletions
|
|
@ -38,9 +38,9 @@
|
||||||
## Unreleased
|
## Unreleased
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
* `[mouse].selection-override-modifiers` option, specifying which modifiers
|
* `[mouse-bindings].selection-override-modifiers` option, specifying
|
||||||
to hold to override mouse grabs by client applications and force selection
|
which modifiers to hold to override mouse grabs by client
|
||||||
instead.
|
applications and force selection instead.
|
||||||
|
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
||||||
38
config.c
38
config.c
|
|
@ -1349,13 +1349,6 @@ parse_section_mouse(struct context *ctx)
|
||||||
else if (strcmp(key, "alternate-scroll-mode") == 0)
|
else if (strcmp(key, "alternate-scroll-mode") == 0)
|
||||||
return value_to_bool(ctx, &conf->mouse.alternate_scroll_mode);
|
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 {
|
else {
|
||||||
LOG_CONTEXTUAL_ERR("not a valid option: %s", key);
|
LOG_CONTEXTUAL_ERR("not a valid option: %s", key);
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -2166,6 +2159,37 @@ parse_section_mouse_bindings(struct context *ctx)
|
||||||
const char *key = ctx->key;
|
const char *key = ctx->key;
|
||||||
const char *value = ctx->value;
|
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;
|
struct argv pipe_argv;
|
||||||
|
|
||||||
ssize_t pipe_remove_len = pipe_argv_from_value(ctx, &pipe_argv);
|
ssize_t pipe_remove_len = pipe_argv_from_value(ctx, &pipe_argv);
|
||||||
|
|
|
||||||
|
|
@ -470,16 +470,6 @@ applications can change these at runtime.
|
||||||
|
|
||||||
Default: _yes_.
|
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
|
# 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
|
*must* be a valid libinput name. You can find the button names using
|
||||||
*libinput debug-events*.
|
*libinput debug-events*.
|
||||||
|
|
||||||
Note that the modifiers set in *mouse.selection-override-modifiers*
|
The modifiers set in *[mouse-bindings].selection-override-modifiers*
|
||||||
(by default, *Shift*) cannot be used as modifiers in mouse bindings
|
(by default, *Shift*) cannot be used as modifiers in mouse bindings,
|
||||||
since they are used to enable selection when the client application is
|
and are instead used to enable selecting text with the mouse
|
||||||
grabbing 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
|
The trailing *COUNT* is optional and specifies the click count
|
||||||
required to trigger the binding. The default if *COUNT* is omitted is
|
required to trigger the binding. The default if *COUNT* is omitted is
|
||||||
|
|
|
||||||
2
foot.ini
2
foot.ini
|
|
@ -63,7 +63,6 @@
|
||||||
[mouse]
|
[mouse]
|
||||||
# hide-when-typing=no
|
# hide-when-typing=no
|
||||||
# alternate-scroll-mode=yes
|
# alternate-scroll-mode=yes
|
||||||
# selection-override-modifiers=Shift
|
|
||||||
|
|
||||||
[colors]
|
[colors]
|
||||||
# alpha=1.0
|
# alpha=1.0
|
||||||
|
|
@ -170,6 +169,7 @@
|
||||||
# toggle-url-visible=t
|
# toggle-url-visible=t
|
||||||
|
|
||||||
[mouse-bindings]
|
[mouse-bindings]
|
||||||
|
# selection-override-modifiers=Shift
|
||||||
# primary-paste=BTN_MIDDLE
|
# primary-paste=BTN_MIDDLE
|
||||||
# select-begin=BTN_LEFT
|
# select-begin=BTN_LEFT
|
||||||
# select-begin-block=Control+BTN_LEFT
|
# select-begin-block=Control+BTN_LEFT
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue