From aab348a142122ba5d538f61101ade52e121ee92d Mon Sep 17 00:00:00 2001 From: Nick Conway <nick@conway.dev> Date: Sun, 4 Jun 2023 02:23:15 -0400 Subject: [PATCH] Fix leader overlapping with timerless --- app/src/leader.c | 2 +- .../behavior_keymap_overlap_timerless.dtsi | 37 +++++++++++++++++++ .../overlapping-timerless/events.patterns | 2 + .../keycode_events.snapshot | 4 ++ .../native_posix_64.keymap | 10 +++++ 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/tests/leader/behavior_keymap_overlap_timerless.dtsi create mode 100644 app/tests/leader/overlapping-timerless/events.patterns create mode 100644 app/tests/leader/overlapping-timerless/keycode_events.snapshot create mode 100644 app/tests/leader/overlapping-timerless/native_posix_64.keymap diff --git a/app/src/leader.c b/app/src/leader.c index 9f90ebf1..ed7e5493 100644 --- a/app/src/leader.c +++ b/app/src/leader.c @@ -324,7 +324,7 @@ static int position_state_changed_listener(const zmk_event_t *ev) { zmk_leader_deactivate(); } } - if (!timerless) { + if (!timerless || num_comp_candidates < num_candidates) { reset_timer(data->timestamp); } } diff --git a/app/tests/leader/behavior_keymap_overlap_timerless.dtsi b/app/tests/leader/behavior_keymap_overlap_timerless.dtsi new file mode 100644 index 00000000..c4c66fa5 --- /dev/null +++ b/app/tests/leader/behavior_keymap_overlap_timerless.dtsi @@ -0,0 +1,37 @@ +#include <dt-bindings/zmk/keys.h> +#include <behaviors.dtsi> +#include <dt-bindings/zmk/kscan_mock.h> + +&leader { + timeout-ms = <200>; + timerless; +}; + +/ { + leader-sequences { + compatible = "zmk,leader-sequences"; + + leader_seq_one { + key-positions = <0>; + bindings = <&kp A>; + }; + + leader_seq_two { + key-positions = <0 0>; + bindings = <&kp B>; + }; + + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp N1 &kp N2 + &kp N3 &leader + >; + }; + }; +}; diff --git a/app/tests/leader/overlapping-timerless/events.patterns b/app/tests/leader/overlapping-timerless/events.patterns new file mode 100644 index 00000000..e7381345 --- /dev/null +++ b/app/tests/leader/overlapping-timerless/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode_//p +s/.*zmk_leader.*:/leader:/p diff --git a/app/tests/leader/overlapping-timerless/keycode_events.snapshot b/app/tests/leader/overlapping-timerless/keycode_events.snapshot new file mode 100644 index 00000000..9ab32b1a --- /dev/null +++ b/app/tests/leader/overlapping-timerless/keycode_events.snapshot @@ -0,0 +1,4 @@ +leader: leader key activated +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +leader: leader key deactivated diff --git a/app/tests/leader/overlapping-timerless/native_posix_64.keymap b/app/tests/leader/overlapping-timerless/native_posix_64.keymap new file mode 100644 index 00000000..ce1258f7 --- /dev/null +++ b/app/tests/leader/overlapping-timerless/native_posix_64.keymap @@ -0,0 +1,10 @@ +#include "../behavior_keymap_overlap_timerless.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,2000) + >; +};