2.3 KiB
title | sidebar_label |
---|---|
Mod-Morph Behavior | Mod-Morph |
Summary
The Mod-Morph behavior sends a different keypress, depending on whether a specified modifier is being held during the keypress.
- If you tap the key by itself, the first keycode is sent.
- If you tap the key while holding the specified modifier, the second keycode is sent.
Mod-Morph
The Mod-Morph behavior acts as one of two keycodes, depending on if the required modifier is being held during the keypress.
Configuration
An example of how to implement the mod-morph "Grave Escape":
/ {
behaviors {
gresc: grave_escape {
compatible = "zmk,behavior-mod-morph";
label = "GRAVE_ESCAPE";
#binding-cells = <0>;
bindings = <&kp ESC>, <&kp GRAVE>;
mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>;
};
};
};
Note that this specific mod-morph exists in ZMK by default using code &gresc
.
Behavior Binding
- Reference:
&gresc
- Parameter: None
Example:
&gresc
Mods
This is how you determine what modifiers will activate the morphed version of the keycode.
Available Modifiers:
MOD_LSFT
MOD_RSFT
MOD_LCTL
MOD_RCTL
MOD_LALT
MOD_RALT
MOD_LGUI
MOD_RGUI
Example:
mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>;
Advanced configuration
masked_mods
When a modifier specified in mods
is being held, it won't be sent along with the morphed keycode if it is also part of masked_mods
. To sent all modifiers along with the morphed keycode, set masked_mods
to <0>
. By default, masked_mods
equals mods
.
For example, the following configuration morphs LEFT_SHIFT
+ BACKSPACE
into DELETE
, and morphs RIGHT_SHIFT
+ BACKSPACE
into RIGHT_SHIFT
+ DELETE
.
/ {
behaviors {
bspc_del: backspace_delete {
compatible = "zmk,behavior-mod-morph";
label = "BACKSPACE_DELETE";
#binding-cells = <0>;
bindings = <&kp BACKSPACE>, <&kp DELETE>;
mods = <(MOD_LSFT|MOD_RSFT)>;
masked_mods = <(MOD_LSFT)>;
};
};
};
Limitations
In some circumstance, when the morphed keycode is a hold-tap, the modifier gets sent along with the hold-tap regardless of the specification of masked_mods
.