From 93c2c87632071d672a016efc9f101ca911be26c6 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 16 Dec 2025 13:41:06 +0100 Subject: [PATCH] feat: map kp_ movement keys as regular keys if the kp_ variants are not explicitly mapped This makes it possible to use keypad movements without duplicating keybinds. --- src/keybind/keybind.zig | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/keybind/keybind.zig b/src/keybind/keybind.zig index 0143f97..6ab0e75 100644 --- a/src/keybind/keybind.zig +++ b/src/keybind/keybind.zig @@ -435,11 +435,22 @@ pub const Binding = struct { if (self.key_events.len == 0) return .match_impossible; for (self.key_events, 0..) |key_event, i| { if (match_key_events.len <= i) return .match_possible; - if (!(key_event.eql(match_key_events[i]) or key_event.eql_unshifted(match_key_events[i]))) + if (!keyevents_eql(key_event, match_key_events[i])) return .match_impossible; } return if (self.key_events.len == match_key_events.len) .matched else .match_possible; } + + fn keyevents_eql(lhs: KeyEvent, rhs: KeyEvent) bool { + if (lhs.eql(rhs) or lhs.eql_unshifted(rhs)) return true; + if (input.map_non_input_kp_key_to_regular_key(rhs.key)) |key| { + var mapped = rhs; + mapped.key = key; + mapped.key_unshifted = key; + if (lhs.eql(mapped) or lhs.eql_unshifted(mapped)) return true; + } + return false; + } }; pub const KeybindHints = std.StringHashMapUnmanaged([]u8);