fix(behaviors): Properly clean up timed out hold.

* If our handler dedides our undedided hold-tap,
  return early before continuing.
This commit is contained in:
Peter Johanson 2022-07-31 03:44:57 +00:00
parent 0b4198d0a6
commit d1006caf37
4 changed files with 55 additions and 0 deletions

View file

@ -612,6 +612,10 @@ static int position_state_changed_listener(const zmk_event_t *eh) {
decide_hold_tap(undecided_hold_tap, HT_TIMER_EVENT);
}
if (undecided_hold_tap == NULL) {
return ZMK_EV_EVENT_BUBBLE;
}
if (!ev->state && find_captured_keydown_event(ev->position) == NULL) {
// no keydown event has been captured, let it bubble.
// we'll catch modifiers later in modifier_state_changed_listener

View file

@ -0,0 +1 @@
s/.*hid_listener_keycode_//p

View file

@ -0,0 +1,4 @@
pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00

View file

@ -0,0 +1,46 @@
#include <dt-bindings/zmk/keys.h>
#include <behaviors.dtsi>
#include <dt-bindings/zmk/kscan-mock.h>
#define ZMK_COMBO(name, combo_bindings, keypos, combo_term) \
/ { \
combos { \
compatible = "zmk,combos"; \
combo_ ## name { \
key-positions = <keypos>; \
bindings = <combo_bindings>; \
timeout-ms = <combo_term>; \
}; \
}; \
};
ZMK_COMBO(qmark, &kp QMARK, 0 3, 30)
ZMK_COMBO(dllr, &kp DLLR, 1 3, 50)
ZMK_COMBO(tilde, &kp TILDE, 3 4, 50)
/ {
keymap {
compatible = "zmk,keymap";
label = "Default keymap";
default_layer {
bindings = <
&none &none
&kp A &mt LSHFT T
&none
>;
};
};
};
&kscan {
rows = <3>;
columns = <2>;
events = <
ZMK_MOCK_PRESS(1,1,500)
ZMK_MOCK_PRESS(1,0,100)
ZMK_MOCK_RELEASE(1,0,500)
ZMK_MOCK_RELEASE(1,1,0)
>;
};