From 48888318d14cc859b9b00bf1369d876c346bbf99 Mon Sep 17 00:00:00 2001 From: "jmding@gmail.com" Date: Wed, 15 Sep 2021 05:19:01 +0000 Subject: [PATCH] clang, more tests --- app/src/behaviors/behavior_hold_tap.c | 18 +++++------- .../2-dn-timer-up/keycode_events.snapshot | 6 ++-- .../keycode_events.snapshot | 6 ++-- .../1-dn-up/events.patterns | 4 +++ .../1-dn-up/keycode_events.snapshot | 5 ++++ .../1-dn-up/native_posix.keymap | 11 +++++++ .../2-dn-timer-up/events.patterns | 4 +++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++++ .../2-dn-timer-up/native_posix.keymap | 11 +++++++ .../3c-kcdn-dn-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 +++++++++ .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 13 +++++++++ .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../4c-dn-kcdn-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 +++++++++ .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../behavior_keymap.dtsi | 29 +++++++++++++++++++ .../1-dn-up/events.patterns | 4 +++ .../1-dn-up/keycode_events.snapshot | 5 ++++ .../1-dn-up/native_posix.keymap | 11 +++++++ .../2-dn-timer-up/events.patterns | 4 +++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++++ .../2-dn-timer-up/native_posix.keymap | 11 +++++++ .../3c-kcdn-dn-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 +++++++++ .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 13 +++++++++ .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../4c-dn-kcdn-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 +++++++++ .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../behavior_keymap.dtsi | 29 +++++++++++++++++++ .../1-dn-up/events.patterns | 4 +++ .../1-dn-up/keycode_events.snapshot | 5 ++++ .../1-dn-up/native_posix.keymap | 11 +++++++ .../2-dn-timer-up/events.patterns | 4 +++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++++ .../2-dn-timer-up/native_posix.keymap | 11 +++++++ .../3c-kcdn-dn-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 +++++++++ .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 13 +++++++++ .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../4c-dn-kcdn-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 +++++++++ .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../behavior_keymap.dtsi | 29 +++++++++++++++++++ .../1-dn-up/events.patterns | 4 +++ .../1-dn-up/keycode_events.snapshot | 5 ++++ .../1-dn-up/native_posix.keymap | 11 +++++++ .../2-dn-timer-up/events.patterns | 4 +++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++++ .../2-dn-timer-up/native_posix.keymap | 11 +++++++ .../3c-kcdn-dn-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 +++++++++ .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 13 +++++++++ .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../4c-dn-kcdn-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 +++++++++ .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 +++ .../keycode_events.snapshot | 7 +++++ .../native_posix.keymap | 14 +++++++++ .../behavior_keymap.dtsi | 29 +++++++++++++++++++ docs/docs/behaviors/hold-tap.md | 10 +++---- 104 files changed, 887 insertions(+), 21 deletions(-) create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-disabled/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred-positional-enabled/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-disabled/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred-positional-enabled/behavior_keymap.dtsi diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 33d02833..82e097b8 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -371,15 +371,16 @@ static bool is_positional_hold_tap_enabled(struct active_hold_tap *hold_tap) { static bool passes_positional_hold_conditions(struct active_hold_tap *hold_tap) { for (int i = 0; i < hold_tap->config->hold_enabler_keys_len; i++) { - if (hold_tap->config->hold_enabler_keys[i] == hold_tap->position_of_first_other_key_pressed) { + if (hold_tap->config->hold_enabler_keys[i] == + hold_tap->position_of_first_other_key_pressed) { return true; } } return false; } -static void -decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment decision_moment) { +static void decide_hold_tap(struct active_hold_tap *hold_tap, + enum decision_moment decision_moment) { if (hold_tap->status != STATUS_UNDECIDED) { return; } @@ -401,16 +402,13 @@ decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment decision_ } } - // If the hold-tap behavior is still undecided, something went wrong. Gracefully fail by exiting. if (hold_tap->status == STATUS_UNDECIDED) { return; } // If positional hold-tap is enabled, force a decision if the positional conditiosn for // a hold decision are not met. - if ( - is_positional_hold_tap_enabled(hold_tap) && - !passes_positional_hold_conditions(hold_tap)) { + if (is_positional_hold_tap_enabled(hold_tap) && !passes_positional_hold_conditions(hold_tap)) { hold_tap->status = STATUS_TAP; } @@ -535,9 +533,9 @@ static int position_state_changed_listener(const zmk_event_t *eh) { } // Store the position of pressed key for positional hold-tap purposes. - if ( - (ev->state) // i.e. key pressed (not released) - && (undecided_hold_tap->position_of_first_other_key_pressed == -1) // i.e. no other key has been pressed yet + if ((ev->state) // i.e. key pressed (not released) + && (undecided_hold_tap->position_of_first_other_key_pressed == + -1) // i.e. no other key has been pressed yet ) { undecided_hold_tap->position_of_first_other_key_pressed = ev->position; } diff --git a/app/tests/hold-tap/balanced-positional-enabled/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced-positional-enabled/2-dn-timer-up/keycode_events.snapshot index 926174b4..ff1caa0e 100644 --- a/app/tests/hold-tap/balanced-positional-enabled/2-dn-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced-positional-enabled/2-dn-timer-up/keycode_events.snapshot @@ -1,5 +1,5 @@ ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (balanced decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot index afbb52cf..55665057 100644 --- a/app/tests/hold-tap/balanced-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot +++ b/app/tests/hold-tap/balanced-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -1,7 +1,7 @@ kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 ht_binding_pressed: 0 new undecided hold_tap kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 -ht_decide: 0 decided hold-timer (balanced decision moment timer) -kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 -kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (balanced decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/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/hold-preferred-positional-disabled/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/keycode_events.snapshot new file mode 100644 index 00000000..36dc281a --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/native_posix.keymap new file mode 100644 index 00000000..040cdd3e --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/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/hold-preferred-positional-disabled/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..0ad6f63f --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000..11d033f4 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/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/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..a5b9f134 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (hold-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..21baa447 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/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/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..d74affca --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (hold-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..cd7ff384 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/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/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..f7853185 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 00000000..bdfaf9d3 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/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/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..f7853185 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..c0fd1bd1 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/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/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..f7853185 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..69c19676 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/events.patterns b/app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/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/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 00000000..33d97686 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 00000000..301ef0ac --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-disabled/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred-positional-disabled/behavior_keymap.dtsi new file mode 100644 index 00000000..ae0e019c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-disabled/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + +/ { + behaviors { + ht_hold: behavior_hold_tap_hold_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_HOLD_PREFERRED"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-enabler-keys = <88>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_hold LEFT_SHIFT F &kp J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/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/hold-preferred-positional-enabled/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/keycode_events.snapshot new file mode 100644 index 00000000..36dc281a --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/native_posix.keymap new file mode 100644 index 00000000..040cdd3e --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/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/hold-preferred-positional-enabled/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..0ad6f63f --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000..11d033f4 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/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/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..a5b9f134 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (hold-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..21baa447 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/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/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..d74affca --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (hold-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..cd7ff384 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/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/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..1d2b827e --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +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/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 00000000..bdfaf9d3 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/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/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..1d2b827e --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +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/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..c0fd1bd1 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/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/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..1d2b827e --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +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/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..69c19676 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/events.patterns b/app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/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/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 00000000..ef3ea562 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold-interrupt (hold-preferred decision moment other-key-down) +kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 00000000..301ef0ac --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred-positional-enabled/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred-positional-enabled/behavior_keymap.dtsi new file mode 100644 index 00000000..f2e742b5 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred-positional-enabled/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + +/ { + behaviors { + ht_hold: behavior_hold_tap_hold_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_HOLD_PREFERRED"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-enabler-keys = <1 2 3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_hold LEFT_SHIFT F &kp J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/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-positional-disabled/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/keycode_events.snapshot new file mode 100644 index 00000000..d1f01261 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/native_posix.keymap new file mode 100644 index 00000000..040cdd3e --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/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-positional-disabled/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..a4af111b --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000..11d033f4 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/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-positional-disabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..72e3755a --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..21baa447 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/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-positional-disabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..691b75ff --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..cd7ff384 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/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-positional-disabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..119935eb --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 00000000..bdfaf9d3 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/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-positional-disabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..119935eb --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..c0fd1bd1 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/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-positional-disabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..93fa43be --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..69c19676 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/events.patterns b/app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/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-positional-disabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 00000000..e10f263e --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 00000000..301ef0ac --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-disabled/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred-positional-disabled/behavior_keymap.dtsi new file mode 100644 index 00000000..b19c4c98 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-disabled/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + +/ { + behaviors { + ht_tap: behavior_hold_tap_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_TAP_PREFERRED"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-enabler-keys = <88>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_tap LEFT_SHIFT F &kp J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/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-positional-enabled/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/keycode_events.snapshot new file mode 100644 index 00000000..d1f01261 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/native_posix.keymap new file mode 100644 index 00000000..040cdd3e --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/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-positional-enabled/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..a4af111b --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000..11d033f4 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/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-positional-enabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..72e3755a --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..21baa447 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/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-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..691b75ff --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +ht_decide: 0 decided tap (tap-preferred decision moment timer) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..cd7ff384 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/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-positional-enabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..2d985568 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +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 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +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-positional-enabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 00000000..bdfaf9d3 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/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-positional-enabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..2d985568 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +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 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +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-positional-enabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..c0fd1bd1 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/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-positional-enabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..93fa43be --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..69c19676 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/events.patterns b/app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/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-positional-enabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 00000000..e10f263e --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred decision moment key-up) +kp_pressed: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 implicit_mods 0x00 explicit_mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 00000000..301ef0ac --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred-positional-enabled/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred-positional-enabled/behavior_keymap.dtsi new file mode 100644 index 00000000..5ab10748 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred-positional-enabled/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + +/ { + behaviors { + ht_tap: behavior_hold_tap_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_TAP_PREFERRED"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping-term-ms = <300>; + quick-tap-ms = <200>; + bindings = <&kp>, <&kp>; + hold-enabler-keys = <1 2 3>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_tap LEFT_SHIFT F &kp J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; diff --git a/docs/docs/behaviors/hold-tap.md b/docs/docs/behaviors/hold-tap.md index 675035b0..827ce7ef 100644 --- a/docs/docs/behaviors/hold-tap.md +++ b/docs/docs/behaviors/hold-tap.md @@ -97,7 +97,7 @@ If this config does not work for you, try the flavor "balanced" with a medium `t #### Positional hold-tap and `hold-enabler-keys` -Including `hold-enabler-keys` in your hold-tap behavior definition turns on positional hold-tap. This causes the hold-tap behavior to only be allowed to produce a hold behavior if the next key pressed is one of the `hold-enabler-keys`. For example, with the following configuration: +Including `hold-enabler-keys` in your hold-tap behavior definition enables the positional hold-tap feature. With positional hold-tap enabled, your hold-tap behavior will only produce a hold behavior if while the hold-tap key is still pressed, the first other key to be pressed is one of the `hold-enabler-keys`. For example, with the following hold-tap behavior definiton: ``` #include @@ -129,13 +129,13 @@ Including `hold-enabler-keys` in your hold-tap behavior definition turns on posi }; ``` -The sequence `(cht_down, W_down, W_up, E_down, E_up, cht_up)` produces `WE`, because the positional hold-tap **IS** permitted to produce a hold behavior, because the next key pressed (the W key in position 1) **IS** one of the hold-enabler-keys. +The sequence `(cht_down, W_down, W_up, E_down, E_up, cht_up)` produces `WE`. The positional hold-tap **IS** permitted to produce a hold behavior, because the first key pressed after the hold-tap key (i.e. the W key, in position 1) **IS** one of the `hold-enabler-keys`. -Meanwhile, the sequence `(cht_down, E_down, E_up, W_down, W_up cht_up)` produces `qew`, because the positional hold-tap is **NOT** permitted to produce a hold behavior, because the next key pressed (the E key in position 2) is **NOT** one of the hold-enabler-keys. +Meanwhile, the sequence `(cht_down, E_down, E_up, W_down, W_up cht_up)` produces `qew`. The positional hold-tap is **NOT** permitted to produce a hold behavior, because the first key pressed after the hold-tap key (i.e. the E key, in position 2) is **NOT** one of the `hold-enabler-keys`. -Positional hold-taps can be useful with home-row modifiers for example. By setting `hold-enabler-keys` to include only the keys controlled by the opposite hand, positional hold-taps can prevent one-handed "rolls" from accidentally triggering hold behaviors. +Positional hold-taps can be useful with home-row modifiers. By using a positional hold-tap behavior for home-row modifiers on the left hand, and setting `hold-enabler-keys` to the keys under the right hand, positional hold-tap will only allow hold behaviors to occur with cross-hand keypresses. -Note that while for regular hold-tap behaviors a shorter `tapping-term` encourages hold decisions, the opposite is true for positional hold-tap behaviors. For positional hold-taps, a shorter `tapping-term` actually encourages tap decisions. This is because when the `tapping-term` expires, this triggers the behavior to decide as either a tap or a hold. But if the user has not yet had time to press one of the `hold-enabler-keys`, then the behavior will decide as a tap. Shortening the `tapping-term` thus gives the user less time to press one of the `hold-enabler-keys` to produce a hold behavior. +Note that for regular hold-tap behaviors a shorter `tapping-term` encourages hold decisions. However the opposite is true for positional hold-tap behaviors, where a shorter `tapping-term` actually encourages tap decisions. This is because when the `tapping-term` expires, this triggers the behavior to decide as either a tap or a hold. But if the user has not yet had time to press one of the `hold-enabler-keys`, then with positional hold-tap the behavior will decide as a tap. #### Comparison to QMK