Browse Source
* Proporly handle multiple conditonal layers w/ the same target `then-layer` values. * Move handling to work callback, to avoid re-entrance for cascading layers enabling other layers.xmkb
Peter Johanson
3 years ago
committed by
Pete Johanson
10 changed files with 298 additions and 13 deletions
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
s/.*hid_listener_keycode/kp/p |
||||
s/.*mo_keymap_binding/mo/p |
||||
s/.*conditional_layer/cl/p |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
mo_pressed: position 2 layer 1 |
||||
mo_pressed: position 3 layer 2 |
||||
cl_activate: layer 4 |
||||
mo_pressed: position 1 layer 3 |
||||
kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 |
||||
kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 |
||||
mo_released: position 1 layer 3 |
||||
mo_released: position 3 layer 2 |
||||
cl_deactivate: layer 4 |
||||
mo_released: position 2 layer 1 |
||||
mo_pressed: position 1 layer 3 |
||||
mo_pressed: position 2 layer 1 |
||||
cl_activate: layer 4 |
||||
mo_pressed: position 3 layer 2 |
||||
kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 |
||||
kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 |
||||
mo_released: position 3 layer 2 |
||||
mo_released: position 2 layer 1 |
||||
cl_deactivate: layer 4 |
||||
mo_released: position 1 layer 3 |
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
#include <behaviors.dtsi> |
||||
#include <dt-bindings/zmk/keys.h> |
||||
#include <dt-bindings/zmk/kscan_mock.h> |
||||
|
||||
/ { |
||||
conditional_layers { |
||||
compatible = "zmk,conditional-layers"; |
||||
conditional_layer_1 { |
||||
if-layers = <1 2>; |
||||
then-layer = <4>; |
||||
}; |
||||
conditional_layer_2 { |
||||
if-layers = <1 3>; |
||||
then-layer = <4>; |
||||
}; |
||||
}; |
||||
|
||||
keymap { |
||||
compatible = "zmk,keymap"; |
||||
default_layer { |
||||
bindings = < |
||||
&kp A &mo 3 |
||||
&mo 1 &mo 2 |
||||
>; |
||||
}; |
||||
layer_1 { |
||||
bindings = < |
||||
&kp B &trans |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
layer_2 { |
||||
bindings = < |
||||
&kp C &trans |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
layer_3 { |
||||
bindings = < |
||||
&kp D &trans |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
layer_4 { |
||||
bindings = < |
||||
&kp E &trans |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&kscan { |
||||
events = < |
||||
ZMK_MOCK_PRESS(1,0,10) |
||||
ZMK_MOCK_PRESS(1,1,10) |
||||
ZMK_MOCK_PRESS(0,1,10) |
||||
ZMK_MOCK_PRESS(0,0,10) |
||||
ZMK_MOCK_RELEASE(0,0,10) |
||||
ZMK_MOCK_RELEASE(0,1,10) |
||||
ZMK_MOCK_RELEASE(1,1,10) |
||||
ZMK_MOCK_RELEASE(1,0,10) |
||||
|
||||
ZMK_MOCK_PRESS(0,1,10) |
||||
ZMK_MOCK_PRESS(1,0,10) |
||||
ZMK_MOCK_PRESS(1,1,10) |
||||
ZMK_MOCK_PRESS(0,0,10) |
||||
ZMK_MOCK_RELEASE(0,0,10) |
||||
ZMK_MOCK_RELEASE(1,1,10) |
||||
ZMK_MOCK_RELEASE(1,0,10) |
||||
ZMK_MOCK_RELEASE(0,1,10) |
||||
>; |
||||
}; |
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
s/.*hid_listener_keycode/kp/p |
||||
s/.*mo_keymap_binding/mo/p |
||||
s/.*conditional_layer/cl/p |
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
mo_pressed: position 2 layer 1 |
||||
mo_pressed: position 3 layer 2 |
||||
cl_activate: layer 4 |
||||
kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 |
||||
kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 |
||||
mo_released: position 3 layer 2 |
||||
cl_deactivate: layer 4 |
||||
mo_released: position 2 layer 1 |
||||
mo_pressed: position 1 layer 3 |
||||
mo_pressed: position 2 layer 1 |
||||
cl_activate: layer 4 |
||||
kp_pressed: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 |
||||
kp_released: usage_page 0x07 keycode 0x08 implicit_mods 0x00 explicit_mods 0x00 |
||||
mo_released: position 2 layer 1 |
||||
cl_deactivate: layer 4 |
||||
mo_released: position 1 layer 3 |
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
#include <behaviors.dtsi> |
||||
#include <dt-bindings/zmk/keys.h> |
||||
#include <dt-bindings/zmk/kscan_mock.h> |
||||
|
||||
/ { |
||||
conditional_layers { |
||||
compatible = "zmk,conditional-layers"; |
||||
conditional_layer_1 { |
||||
if-layers = <1 2>; |
||||
then-layer = <4>; |
||||
}; |
||||
conditional_layer_2 { |
||||
if-layers = <1 3>; |
||||
then-layer = <4>; |
||||
}; |
||||
}; |
||||
|
||||
keymap { |
||||
compatible = "zmk,keymap"; |
||||
default_layer { |
||||
bindings = < |
||||
&kp A &mo 3 |
||||
&mo 1 &mo 2 |
||||
>; |
||||
}; |
||||
layer_1 { |
||||
bindings = < |
||||
&kp B &trans |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
layer_2 { |
||||
bindings = < |
||||
&kp C &trans |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
layer_3 { |
||||
bindings = < |
||||
&kp D &trans |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
layer_4 { |
||||
bindings = < |
||||
&kp E &trans |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&kscan { |
||||
events = < |
||||
ZMK_MOCK_PRESS(1,0,10) |
||||
ZMK_MOCK_PRESS(1,1,10) |
||||
ZMK_MOCK_PRESS(0,0,10) |
||||
ZMK_MOCK_RELEASE(0,0,10) |
||||
ZMK_MOCK_RELEASE(1,1,10) |
||||
ZMK_MOCK_RELEASE(1,0,10) |
||||
|
||||
ZMK_MOCK_PRESS(0,1,10) |
||||
ZMK_MOCK_PRESS(1,0,10) |
||||
ZMK_MOCK_PRESS(0,0,10) |
||||
ZMK_MOCK_RELEASE(0,0,10) |
||||
ZMK_MOCK_RELEASE(1,0,10) |
||||
ZMK_MOCK_RELEASE(0,1,10) |
||||
>; |
||||
}; |
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
s/.*hid_listener_keycode/kp/p |
||||
s/.*mo_keymap_binding/mo/p |
||||
s/.*conditional_layer/cl/p |
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
mo_pressed: position 2 layer 1 |
||||
mo_pressed: position 3 layer 2 |
||||
cl_activate: layer 3 |
||||
kp_pressed: usage_page 0x07 keycode 0x0A implicit_mods 0x00 explicit_mods 0x00 |
||||
kp_released: usage_page 0x07 keycode 0x0A implicit_mods 0x00 explicit_mods 0x00 |
||||
mo_released: position 3 layer 2 |
||||
cl_deactivate: layer 3 |
||||
mo_released: position 2 layer 1 |
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
#include <behaviors.dtsi> |
||||
#include <dt-bindings/zmk/keys.h> |
||||
#include <dt-bindings/zmk/kscan_mock.h> |
||||
|
||||
< { |
||||
flavor = "balanced"; |
||||
}; |
||||
|
||||
/ { |
||||
conditional_layers { |
||||
compatible = "zmk,conditional-layers"; |
||||
tri_layer { |
||||
if-layers = <1 2>; |
||||
then-layer = <3>; |
||||
}; |
||||
}; |
||||
|
||||
keymap { |
||||
compatible = "zmk,keymap"; |
||||
default_layer { |
||||
bindings = < |
||||
&kp A &kp B |
||||
< 1 I < 2 J |
||||
>; |
||||
}; |
||||
layer_1 { |
||||
bindings = < |
||||
&kp C &kp D |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
layer_2 { |
||||
bindings = < |
||||
&kp E &kp F |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
layer_3 { |
||||
bindings = < |
||||
&kp G &kp H |
||||
&trans &trans |
||||
>; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&kscan { |
||||
events = < |
||||
ZMK_MOCK_PRESS(1,0,10) |
||||
ZMK_MOCK_PRESS(1,1,10) |
||||
ZMK_MOCK_PRESS(0,0,10) |
||||
ZMK_MOCK_RELEASE(0,0,10) |
||||
ZMK_MOCK_RELEASE(1,1,10) |
||||
ZMK_MOCK_RELEASE(1,0,10) |
||||
>; |
||||
}; |
Loading…
Reference in new issue