feature(modifiers): add explicit modifiers

this makes LS(LEFT_CONTROL) work as if shift and control were both
pressed explicitly. Previously, the left shift would have been released
as soon as another key was pressed. The implicit behavior is useful in
case of LS(NUMBER_1) when rolling over to other keys.

Also see #361.
This commit is contained in:
Okke Formsma
2021-01-22 17:00:19 +01:00
committed by Pete Johanson
parent 0c30b49063
commit 7b7701ae90
83 changed files with 425 additions and 336 deletions

View File

@@ -0,0 +1,4 @@
s/.*hid_listener_keycode_//p
s/.*hid_register_mod/reg/p
s/.*hid_unregister_mod/unreg/p
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p

View File

@@ -0,0 +1,28 @@
pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x0e
reg: Modifier 0 count 1
reg: Modifiers set to 0x01
reg: Modifier 1 count 1
reg: Modifiers set to 0x03
reg: Modifier 2 count 1
reg: Modifiers set to 0x07
reg: Modifier 3 count 1
reg: Modifiers set to 0x0f
mods: Modifiers set to 0x0f
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
mods: Modifiers set to 0x0f
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
mods: Modifiers set to 0x0f
released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x0e
unreg: Modifier 0 count: 0
unreg: Modifier 0 released
unreg: Modifiers set to 0x0e
unreg: Modifier 1 count: 0
unreg: Modifier 1 released
unreg: Modifiers set to 0x0c
unreg: Modifier 2 count: 0
unreg: Modifier 2 released
unreg: Modifiers set to 0x08
unreg: Modifier 3 count: 0
unreg: Modifier 3 released
unreg: Modifiers set to 0x00
mods: Modifiers set to 0x00

View File

@@ -0,0 +1,28 @@
#include <dt-bindings/zmk/keys.h>
#include <behaviors.dtsi>
#include <dt-bindings/zmk/kscan-mock.h>
&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)
>;
};
/ {
keymap {
compatible = "zmk,keymap";
label ="Default keymap";
default_layer {
bindings = <
&kp LS(LA(LG(LEFT_CONTROL))) &kp LEFT_CONTROL
&kp A &none
>;
};
};
};

View File

@@ -1,16 +1,16 @@
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 0 count 1
reg: Modifiers set to 0x01
mods: Modifiers set to 0x01
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 0 count 2
reg: Modifiers set to 0x01
mods: Modifiers set to 0x01
released: usage_page 0x07 keycode 0xe0 mods 0x00
released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 0 count: 1
unreg: Modifiers set to 0x01
mods: Modifiers set to 0x01
released: usage_page 0x07 keycode 0xe0 mods 0x00
released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 0 count: 0
unreg: Modifier 0 released
unreg: Modifiers set to 0x00

View File

@@ -1,8 +1,8 @@
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 0 count 1
reg: Modifiers set to 0x01
mods: Modifiers set to 0x01
released: usage_page 0x07 keycode 0xe0 mods 0x00
released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 0 count: 0
unreg: Modifier 0 released
unreg: Modifiers set to 0x00

View File

@@ -1,17 +1,17 @@
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 0 count 1
reg: Modifiers set to 0x01
mods: Modifiers set to 0x01
pressed: usage_page 0x07 keycode 0xe1 mods 0x00
pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 1 count 1
reg: Modifiers set to 0x03
mods: Modifiers set to 0x03
released: usage_page 0x07 keycode 0xe0 mods 0x00
released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 0 count: 0
unreg: Modifier 0 released
unreg: Modifiers set to 0x02
mods: Modifiers set to 0x02
released: usage_page 0x07 keycode 0xe1 mods 0x00
released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 1 count: 0
unreg: Modifier 1 released
unreg: Modifiers set to 0x00

View File

@@ -1,17 +1,17 @@
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 0 count 1
reg: Modifiers set to 0x01
mods: Modifiers set to 0x01
pressed: usage_page 0x07 keycode 0xe1 mods 0x00
pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 1 count 1
reg: Modifiers set to 0x03
mods: Modifiers set to 0x03
released: usage_page 0x07 keycode 0xe1 mods 0x00
released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 1 count: 0
unreg: Modifier 1 released
unreg: Modifiers set to 0x01
mods: Modifiers set to 0x01
released: usage_page 0x07 keycode 0xe0 mods 0x00
released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 0 count: 0
unreg: Modifier 0 released
unreg: Modifiers set to 0x00

View File

@@ -1,8 +1,8 @@
pressed: usage_page 0x07 keycode 0x05 mods 0x02
pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00
mods: Modifiers set to 0x02
pressed: usage_page 0x07 keycode 0x04 mods 0x01
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x01 explicit_mods 0x00
mods: Modifiers set to 0x01
released: usage_page 0x07 keycode 0x05 mods 0x02
released: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00
mods: Modifiers set to 0x01
released: usage_page 0x07 keycode 0x04 mods 0x01
released: usage_page 0x07 keycode 0x04 implicit_mods 0x01 explicit_mods 0x00
mods: Modifiers set to 0x00

View File

@@ -1,8 +1,8 @@
pressed: usage_page 0x07 keycode 0x04 mods 0x01
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x01 explicit_mods 0x00
mods: Modifiers set to 0x01
pressed: usage_page 0x07 keycode 0x05 mods 0x02
pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00
mods: Modifiers set to 0x02
released: usage_page 0x07 keycode 0x05 mods 0x02
released: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00
mods: Modifiers set to 0x00
released: usage_page 0x07 keycode 0x04 mods 0x01
released: usage_page 0x07 keycode 0x04 implicit_mods 0x01 explicit_mods 0x00
mods: Modifiers set to 0x00

View File

@@ -1,13 +1,13 @@
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 0 count 1
reg: Modifiers set to 0x01
mods: Modifiers set to 0x01
pressed: usage_page 0x07 keycode 0x05 mods 0x02
pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00
mods: Modifiers set to 0x03
released: usage_page 0x07 keycode 0xe0 mods 0x00
released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 0 count: 0
unreg: Modifier 0 released
unreg: Modifiers set to 0x00
mods: Modifiers set to 0x00
released: usage_page 0x07 keycode 0x05 mods 0x02
released: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00
mods: Modifiers set to 0x00

View File

@@ -1,12 +1,12 @@
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
pressed: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
reg: Modifier 0 count 1
reg: Modifiers set to 0x01
mods: Modifiers set to 0x01
pressed: usage_page 0x07 keycode 0x05 mods 0x02
pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00
mods: Modifiers set to 0x03
released: usage_page 0x07 keycode 0x05 mods 0x02
released: usage_page 0x07 keycode 0x05 implicit_mods 0x02 explicit_mods 0x00
mods: Modifiers set to 0x01
released: usage_page 0x07 keycode 0xe0 mods 0x00
released: usage_page 0x07 keycode 0xe0 implicit_mods 0x00 explicit_mods 0x00
unreg: Modifier 0 count: 0
unreg: Modifier 0 released
unreg: Modifiers set to 0x00