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 @@ |
|||||||
|
s/.*hid_listener_keycode/kp/p |
||||||
|
s/.*mo_keymap_binding/mo/p |
||||||
|
s/.*conditional_layer/cl/p |
@ -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 @@ |
|||||||
|
#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 @@ |
|||||||
|
s/.*hid_listener_keycode/kp/p |
||||||
|
s/.*mo_keymap_binding/mo/p |
||||||
|
s/.*conditional_layer/cl/p |
@ -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 @@ |
|||||||
|
#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 @@ |
|||||||
|
s/.*hid_listener_keycode/kp/p |
||||||
|
s/.*mo_keymap_binding/mo/p |
||||||
|
s/.*conditional_layer/cl/p |
@ -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 @@ |
|||||||
|
#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