diff --git a/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml b/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml index 8a092d51..20235d04 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-mod-morph.yaml @@ -14,6 +14,6 @@ properties: mods: type: int required: true - masked-mods: + keep-mods: type: int required: false diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index c7a388f1..effbe4ac 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -93,8 +93,8 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } .normal_binding = _TRANSFORM_ENTRY(0, n), \ .morph_binding = _TRANSFORM_ENTRY(1, n), \ .mods = DT_INST_PROP(n, mods), \ - .masked_mods = COND_CODE_0(DT_INST_NODE_HAS_PROP(n, masked_mods), (DT_INST_PROP(n, mods)), \ - (DT_INST_PROP(n, masked_mods))), \ + .masked_mods = COND_CODE_0(DT_INST_NODE_HAS_PROP(n, keep_mods), (DT_INST_PROP(n, mods)), \ + (DT_INST_PROP(n, mods) & ~DT_INST_PROP(n, keep_mods))), \ }; \ static struct behavior_mod_morph_data behavior_mod_morph_data_##n = {}; \ DEVICE_DT_INST_DEFINE(n, behavior_mod_morph_init, NULL, &behavior_mod_morph_data_##n, \ diff --git a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap index f2aa3150..7071e8cd 100644 --- a/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap +++ b/app/tests/mod-morph/2d-masked-morph-into-hold-tap-tap/native_posix_64.keymap @@ -20,7 +20,6 @@ #binding-cells = <0>; bindings = <&kp A>, << 1 B>; mods = <(MOD_LSFT|MOD_RSFT)>; - masked-mods = <(MOD_LSFT|MOD_RSFT)>; }; }; diff --git a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap index ce636c13..96c2f270 100644 --- a/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap +++ b/app/tests/mod-morph/2e-masked-morph-into-hold-tap-hold/native_posix_64.keymap @@ -22,7 +22,6 @@ #binding-cells = <0>; bindings = <&kp A>, << 1 B>; mods = <(MOD_LSFT|MOD_RSFT)>; - masked-mods = <(MOD_LSFT|MOD_RSFT)>; }; }; diff --git a/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap b/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap index 53e8e102..a82d3ea7 100644 --- a/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap +++ b/app/tests/mod-morph/3-unmasked-morph/native_posix_64.keymap @@ -10,7 +10,7 @@ #binding-cells = <0>; bindings = <&kp A>, <&kp B>; mods = <(MOD_LSFT|MOD_RSFT)>; - masked-mods = <0>; // no masking + keep-mods = <(MOD_LSFT|MOD_RSFT)>; // no masking }; }; diff --git a/docs/docs/behaviors/mod-morph.md b/docs/docs/behaviors/mod-morph.md index 80c557e0..c770ef1a 100644 --- a/docs/docs/behaviors/mod-morph.md +++ b/docs/docs/behaviors/mod-morph.md @@ -68,9 +68,9 @@ mods = <(MOD_LGUI|MOD_LSFT|MOD_RGUI|MOD_RSFT)>; ### Advanced configuration -`masked-mods` +`keep-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`. +When a modifier specified in `mods` is being held, it won't be sent along with the morphed keycode, unless it is also specified in `keep-mods`. By default, `keep-mods` equals `0`. For example, the following configuration morphs `LEFT_SHIFT` + `BACKSPACE` into `DELETE`, and morphs `RIGHT_SHIFT` + `BACKSPACE` into `RIGHT_SHIFT` + `DELETE`. @@ -83,7 +83,7 @@ For example, the following configuration morphs `LEFT_SHIFT` + `BACKSPACE` into #binding-cells = <0>; bindings = <&kp BACKSPACE>, <&kp DELETE>; mods = <(MOD_LSFT|MOD_RSFT)>; - masked-mods = <(MOD_LSFT)>; + keep-mods = <(MOD_RSFT)>; }; }; };