diff options
author | Okke Formsma <okke@formsma.nl> | 2021-03-07 14:50:30 +0100 |
---|---|---|
committer | Pete Johanson <peter@peterjohanson.com> | 2021-06-13 10:44:18 -0400 |
commit | efa497c69b813852d3704dbd96207f1186eb941a (patch) | |
tree | 5547b9ad3418998bfff514583a9da5c4d97d7250 /app/tests | |
parent | 0f281304938dd1820cfe71dee431770ae545c883 (diff) |
fix(behaviors): Fix timing of delayed hold-tap trigger
A hold-tap timer event would be triggered too soon if the hold-tap
was delayed for longer than its tapping-term. This may cause
accidental hold behavior when the correct behavior would be tap.
By queuing the timer event instead of executing it immediately,
other delayed events get a chance to be processed properly.
Diffstat (limited to 'app/tests')
3 files changed, 67 insertions, 0 deletions
diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/events.patterns b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p
\ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot new file mode 100644 index 0000000..54ac986 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-timer (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap new file mode 100644 index 0000000..adbd648 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/6-nested-timeouts/native_posix.keymap @@ -0,0 +1,53 @@ +#include <dt-bindings/zmk/keys.h> +#include <behaviors.dtsi> +#include <dt-bindings/zmk/kscan_mock.h> + +/* +* A hold-tap with long tapping term is pressed first. +* A hold-tap with short tapping term is quickly tapped. +* The short tapping term hold-tap should 'tap', not 'hold'. +*/ + +/ { + behaviors { + tp_short: short_tap { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP_SHORT"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <100>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + tp_long: long_tap { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP_LONG"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <200>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &tp_long LEFT_SHIFT F &tp_short LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,20) + ZMK_MOCK_PRESS(0,1,20) + ZMK_MOCK_RELEASE(0,1,200) + ZMK_MOCK_RELEASE(0,0,10) + >; +};
\ No newline at end of file |