summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
Diffstat (limited to 'input')
-rw-r--r--input/input.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/input/input.c b/input/input.c
index 5e25dd9c38..5245fd8b63 100644
--- a/input/input.c
+++ b/input/input.c
@@ -393,10 +393,14 @@ static struct cmd_bind *find_bind_for_key_section(struct input_ctx *ictx,
memcpy(keys, ictx->key_history, sizeof(keys));
key_buf_add(keys, code);
+ struct cmd_bind *best = NULL;
+
// Prefer user-defined keys over builtin bindings
for (int builtin = 0; builtin < 2; builtin++) {
if (builtin && !ictx->default_bindings)
break;
+ if (best)
+ break;
for (int n = 0; n < bs->num_binds; n++) {
if (bs->binds[n].is_builtin == (bool)builtin) {
struct cmd_bind *b = &bs->binds[n];
@@ -406,12 +410,13 @@ static struct cmd_bind *find_bind_for_key_section(struct input_ctx *ictx,
if (b->keys[i] != keys[b->num_keys - 1 - i])
goto skip;
}
- return b;
+ if (!best || b->num_keys >= best->num_keys)
+ best = b;
skip: ;
}
}
}
- return NULL;
+ return best;
}
static struct cmd_bind *find_any_bind_for_key(struct input_ctx *ictx,