diff --git a/app/dts/bindings/behaviors/zmk,behavior-leader-key.yaml b/app/dts/bindings/behaviors/zmk,behavior-leader-key.yaml index 22cc4e78a..9647044d4 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-leader-key.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-leader-key.yaml @@ -8,8 +8,6 @@ compatible: "zmk,behavior-leader-key" include: zero_param.yaml properties: - timerless: - type: boolean timeout-ms: type: int - default: 200 + default: -1 diff --git a/app/include/zmk/leader.h b/app/include/zmk/leader.h index e0ea5b0df..49f477c26 100644 --- a/app/include/zmk/leader.h +++ b/app/include/zmk/leader.h @@ -6,5 +6,5 @@ #pragma once -void zmk_leader_activate(int32_t timeout, bool timeout_on_activation, uint32_t position); +void zmk_leader_activate(int32_t timeout, uint32_t position); void zmk_leader_deactivate(); diff --git a/app/src/behaviors/behavior_leader_key.c b/app/src/behaviors/behavior_leader_key.c index 6ca63b34c..cc59076a1 100644 --- a/app/src/behaviors/behavior_leader_key.c +++ b/app/src/behaviors/behavior_leader_key.c @@ -20,7 +20,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); struct behavior_leader_key_config { int32_t timeout_ms; - bool timerless; }; static int behavior_leader_key_init(const struct device *dev) { return 0; } @@ -30,7 +29,7 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, const struct device *dev = device_get_binding(binding->behavior_dev); const struct behavior_leader_key_config *cfg = dev->config; - zmk_leader_activate(cfg->timeout_ms, cfg->timerless, event.position); + zmk_leader_activate(cfg->timeout_ms, event.position); return ZMK_BEHAVIOR_OPAQUE; } @@ -46,7 +45,7 @@ static const struct behavior_driver_api behavior_leader_key_driver_api = { #define LEAD_INST(n) \ static struct behavior_leader_key_config behavior_leader_key_config_##n = { \ - .timerless = DT_INST_PROP(n, timerless), .timeout_ms = DT_INST_PROP(n, timeout_ms)}; \ + .timeout_ms = DT_INST_PROP(n, timeout_ms)}; \ BEHAVIOR_DT_INST_DEFINE(n, behavior_leader_key_init, NULL, NULL, \ &behavior_leader_key_config_##n, POST_KERNEL, \ CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_leader_key_driver_api); diff --git a/app/src/leader.c b/app/src/leader.c index 9fc2b42e0..ef0210da2 100644 --- a/app/src/leader.c +++ b/app/src/leader.c @@ -37,7 +37,6 @@ static struct k_work_delayable release_timer; static int64_t release_at; // static bool timer_started; static bool timer_cancelled; -static bool timerless; struct leader_seq_cfg { int32_t key_positions[CONFIG_ZMK_LEADER_MAX_KEYS_PER_SEQUENCE]; @@ -234,7 +233,7 @@ static void reset_timer(int32_t timestamp) { } } -void zmk_leader_activate(int32_t timeout, bool _timerless, uint32_t position) { +void zmk_leader_activate(int32_t timeout, uint32_t position) { LOG_DBG("leader key activated"); leader_status = true; press_count = 0; @@ -243,10 +242,11 @@ void zmk_leader_activate(int32_t timeout, bool _timerless, uint32_t position) { active_leader_position = position; layer = zmk_keymap_highest_layer_active(); first_release = false; - timerless = _timerless; - if (!timerless) { + + if (timeout_ms > 0) { reset_timer(k_uptime_get()); } + for (int i = 0; i < CONFIG_ZMK_LEADER_MAX_KEYS_PER_SEQUENCE; i++) { leader_pressed_keys[i] = NULL; } @@ -328,7 +328,8 @@ static int position_state_changed_listener(const zmk_event_t *ev) { zmk_leader_deactivate(); } } - if (!timerless || num_comp_candidates < num_candidates) { + + if (timeout_ms > 0 || 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 index c4c66fa5a..1c338d2b2 100644 --- a/app/tests/leader/behavior_keymap_overlap_timerless.dtsi +++ b/app/tests/leader/behavior_keymap_overlap_timerless.dtsi @@ -2,11 +2,6 @@ #include #include -&leader { - timeout-ms = <200>; - timerless; -}; - / { leader-sequences { compatible = "zmk,leader-sequences"; diff --git a/app/tests/leader/behavior_keymap_three.dtsi b/app/tests/leader/behavior_keymap_three.dtsi index f21ca2602..54f05f222 100644 --- a/app/tests/leader/behavior_keymap_three.dtsi +++ b/app/tests/leader/behavior_keymap_three.dtsi @@ -2,11 +2,6 @@ #include #include -&leader { - timeout-ms = <200>; - timerless; -}; - / { leader-sequences { compatible = "zmk,leader-sequences"; diff --git a/docs/docs/keymaps/behaviors/leader-key.md b/docs/docs/keymaps/behaviors/leader-key.md index 9812ce19a..63ec82f9a 100644 --- a/docs/docs/keymaps/behaviors/leader-key.md +++ b/docs/docs/keymaps/behaviors/leader-key.md @@ -21,7 +21,7 @@ Example: #### `timeout-ms` -Defines the amount of time to wait to trigger a completed leader sequence. Defaults to 200ms. +Defines the amount of time to wait to trigger a completed leader sequence. Defaults to no timeout and will wait indefinitely. To change the timeout term, you can update the existing behavior: @@ -36,7 +36,3 @@ To change the timeout term, you can update the existing behavior: }; }; ``` - -#### `timerless` - -By default, the leader key will have a timeout, and will not wait for a sequence to be completed or another key to be pressed. Specify `timerless` if you don't want a timeout.