feat(behaviors): Continue on mods in caps word.
* Continue caps word when mods are changed, and match the continue list on combination of explicit and implicit modifiers.
This commit is contained in:
parent
d01bc6afc6
commit
b3c9c18fee
4 changed files with 62 additions and 1 deletions
|
@ -16,6 +16,7 @@
|
||||||
#include <zmk/events/position_state_changed.h>
|
#include <zmk/events/position_state_changed.h>
|
||||||
#include <zmk/events/keycode_state_changed.h>
|
#include <zmk/events/keycode_state_changed.h>
|
||||||
#include <zmk/events/modifiers_state_changed.h>
|
#include <zmk/events/modifiers_state_changed.h>
|
||||||
|
#include <zmk/keys.h>
|
||||||
#include <zmk/hid.h>
|
#include <zmk/hid.h>
|
||||||
#include <zmk/keymap.h>
|
#include <zmk/keymap.h>
|
||||||
|
|
||||||
|
@ -92,7 +93,9 @@ static bool caps_word_is_caps_includelist(const struct behavior_caps_word_config
|
||||||
continuation->id, continuation->implicit_modifiers);
|
continuation->id, continuation->implicit_modifiers);
|
||||||
|
|
||||||
if (continuation->page == usage_page && continuation->id == usage_id &&
|
if (continuation->page == usage_page && continuation->id == usage_id &&
|
||||||
continuation->implicit_modifiers == implicit_modifiers) {
|
(continuation->implicit_modifiers &
|
||||||
|
(implicit_modifiers | zmk_hid_get_explicit_mods())) ==
|
||||||
|
continuation->implicit_modifiers) {
|
||||||
LOG_DBG("Continuing capsword, found included usage: 0x%02X - 0x%02X", usage_page,
|
LOG_DBG("Continuing capsword, found included usage: 0x%02X - 0x%02X", usage_page,
|
||||||
usage_id);
|
usage_id);
|
||||||
return true;
|
return true;
|
||||||
|
@ -143,6 +146,7 @@ static int caps_word_keycode_state_changed_listener(const zmk_event_t *eh) {
|
||||||
caps_word_enhance_usage(config, ev);
|
caps_word_enhance_usage(config, ev);
|
||||||
|
|
||||||
if (!caps_word_is_alpha(ev->keycode) && !caps_word_is_numeric(ev->keycode) &&
|
if (!caps_word_is_alpha(ev->keycode) && !caps_word_is_numeric(ev->keycode) &&
|
||||||
|
!is_mod(ev->usage_page, ev->keycode) &&
|
||||||
!caps_word_is_caps_includelist(config, ev->usage_page, ev->keycode,
|
!caps_word_is_caps_includelist(config, ev->usage_page, ev->keycode,
|
||||||
ev->implicit_modifiers)) {
|
ev->implicit_modifiers)) {
|
||||||
LOG_DBG("Deactivating caps_word for 0x%02X - 0x%02X", ev->usage_page, ev->keycode);
|
LOG_DBG("Deactivating caps_word for 0x%02X - 0x%02X", ev->usage_page, ev->keycode);
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_implicit_modifiers_//p
|
||||||
|
s/.*caps_word_enhance_usage/enhance_usage/p
|
||||||
|
s/.*caps_word_is_caps_includelist/caps_includelist/p
|
|
@ -0,0 +1,20 @@
|
||||||
|
enhance_usage: Enhancing usage 0x04 with modifiers: 0x02
|
||||||
|
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00
|
||||||
|
press: Modifiers set to 0x02
|
||||||
|
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
release: Modifiers set to 0x00
|
||||||
|
pressed: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
press: Modifiers set to 0x02
|
||||||
|
caps_includelist: Comparing with 0x07 - 0x2D (with implicit mods: 0x02)
|
||||||
|
caps_includelist: Continuing capsword, found included usage: 0x07 - 0x2D
|
||||||
|
pressed: usage_page 0x07 keycode 0x2D implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
press: Modifiers set to 0x02
|
||||||
|
released: usage_page 0x07 keycode 0x2D implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
release: Modifiers set to 0x02
|
||||||
|
released: usage_page 0x07 keycode 0xE1 implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
release: Modifiers set to 0x00
|
||||||
|
enhance_usage: Enhancing usage 0x04 with modifiers: 0x02
|
||||||
|
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00
|
||||||
|
press: Modifiers set to 0x02
|
||||||
|
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
release: Modifiers set to 0x00
|
|
@ -0,0 +1,33 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan_mock.h>
|
||||||
|
#include "../behavior_keymap.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label = "Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&caps_word &kp A
|
||||||
|
&kp LSHFT &kp MINUS
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(0,0,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,0,10)
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
ZMK_MOCK_PRESS(1,0,10)
|
||||||
|
ZMK_MOCK_PRESS(1,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(1,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(1,0,10)
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
>;
|
||||||
|
};
|
Loading…
Reference in a new issue