98 lines
2.5 KiB
Markdown
98 lines
2.5 KiB
Markdown
|
## Combo Layers
|
||
|
|
||
|
Combo Layers is when you hold down 2 or more KC.MO() or KC.LM() keys at a time, and it goes to a defined layer.
|
||
|
|
||
|
By default combo layers is not activated. You can activate combo layers by adding this to your `main.py` file.
|
||
|
The combolayers NEEDS to be above the `keyboard.modules.append(Layers(combolayers))`
|
||
|
|
||
|
```python
|
||
|
combo_layers = {
|
||
|
(1, 2): 3,
|
||
|
}
|
||
|
keyboard.modules.append(Layers(combo_layers))
|
||
|
```
|
||
|
|
||
|
In the above code, when layer 1 and 2 are held, layer 3 will activate. If you release 1 or 2 it will go to whatever key is still being held, if both are released it goes to the default (0) layer.
|
||
|
You should also notice that if you already have the layers Module activated, you can just add combolayers into `(Layers())`
|
||
|
|
||
|
You can add more, and even add more than 2 layers at a time.
|
||
|
|
||
|
```python
|
||
|
combo_layers = {
|
||
|
(1, 2): 3,
|
||
|
(1, 2, 3): 4,
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Limitations
|
||
|
|
||
|
There can only be one combo layer active at a time and for overlapping matches
|
||
|
the first matching combo in `combo_layers` takes precedence.
|
||
|
Example:
|
||
|
```python
|
||
|
layers = Layers()
|
||
|
layers.combo_layers = {
|
||
|
(1, 2, 3): 8,
|
||
|
(1, 2): 9,
|
||
|
}
|
||
|
keyboard.modules.append(Layers(combo_layers))
|
||
|
```
|
||
|
* If you activate layers 1 then 2, your active layer will be layer number 9.
|
||
|
* If you activate layers 1 then 2, then 3, your active layer will be layer
|
||
|
number 3 (because the layer combo `(1,2)` has been activated, but layer 3
|
||
|
stacks on top).
|
||
|
* deactivate 1: you're on layer 3
|
||
|
* deactivate 2: you're on layer 3
|
||
|
* deactivate 3: you're on layer 8
|
||
|
* If you activate layers 3 then 1, then 2, your active layer will be layer
|
||
|
number 8. Deativate layer
|
||
|
* deactivate any of 1/2/3: you're on layer 0
|
||
|
|
||
|
|
||
|
## Fully Working Example code
|
||
|
|
||
|
Below is an example of a fully working keypad that uses combo layers.
|
||
|
|
||
|
```python
|
||
|
print("Starting")
|
||
|
|
||
|
import board
|
||
|
|
||
|
from kmk.kmk_keyboard import KMKKeyboard
|
||
|
from kmk.keys import KC
|
||
|
|
||
|
combo_layers = {
|
||
|
(1, 2): 3,
|
||
|
keyboard.modules.append(Layers(combo_layers))
|
||
|
|
||
|
|
||
|
keyboard = KMKKeyboard()
|
||
|
|
||
|
|
||
|
keyboard.keymap = [
|
||
|
[ #Default
|
||
|
KC.A, KC.B KC.C KC.D,
|
||
|
KC.E, KC.F KC.G KC.H,
|
||
|
KC.MO(1), KC.J, KC.K, KC.MO(2),
|
||
|
],
|
||
|
[ #Layer 1
|
||
|
KC.N1, KC.N2, KC.N3, KC.N4,
|
||
|
KC.N5, KC.N6, KC.N7, KC.8,
|
||
|
KC.MO(1), KC.N9, KC.N0, KC.MO(2),
|
||
|
],
|
||
|
[ #Layer 2
|
||
|
KC.EXLM, KC.AT, KC.HASH, KC.DLR,
|
||
|
KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR,
|
||
|
KC.MO(1), KC.LPRN, KC.RPRN, KC.MO(2),
|
||
|
],
|
||
|
[ #Layer 3
|
||
|
KC.F1, KC.F2, KC.F3, KC.F4,
|
||
|
KC.F5, KC.F6, KC.F7, KC.F8,
|
||
|
KC.MO(1) KC.F9, KC.F10, KC.MO(2)
|
||
|
]
|
||
|
|
||
|
]
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
keyboard.go()
|
||
|
```
|