mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05: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
|
||||
### 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
|
||||
|
|
|
|||
38
config.c
38
config.c
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2
foot.ini
2
foot.ini
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue