zmk/zmk-nodefree-config/helper.h
urob 0b6979f97e Move combos/unicode to nodefree repo (squashed)
commit 5a54a139fb69b48c16f02d93f1fe5825b7e37580
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 17:10:12 2022 -0400

    Move keypos def to nodefree repo

commit 0913280899dc3723eb8878267555a51ad0b7fed5
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 17:08:04 2022 -0400

    Key position maps

commit cc5a2c7f2d840944d97e7c1b70d00675b20811e7
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 14:58:41 2022 -0400

    Move international chars to nodefree repo

commit 26d4b90cc24862ce8a8fcea866e34c6f1f942db8
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 14:58:11 2022 -0400

    Add international character codes

commit c21b0828da1036fb4e1e70663fef18b3297bfaeb
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 13:32:36 2022 -0400

    Move keypos def to separate file

commit 814682560eb59c2980cc37af84ba2d8cc0ddafe8
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 13:23:14 2022 -0400

    Rename helper.dtsi to helper.h in zmk-config

commit a71187ab35db86fa8f8be320ff1f0f1a8997f68e
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 13:21:59 2022 -0400

    Rename helper.dtsi to helper.h

commit 9226fcb12959fde87855cea78e9e396935c2d55c
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 12:54:32 2022 -0400

    Mirror left/right keypos def

commit 1a4e680a55ecca650649ec0586392eb0c89d643a
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 11:43:38 2022 -0400

    Add prefix to unicode macro

commit 0e4cb3093e114d9060cd41ad191ff65802999d21
Merge: 41ec2cd 04a7df6
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 11:38:07 2022 -0400

    Merge commit '04a7df637c524525f2964c0a35a3e187760dc79a' as 'zmk-nodefree-config'

commit 04a7df637c524525f2964c0a35a3e187760dc79a
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 11:38:07 2022 -0400

    Squashed 'zmk-nodefree-config/' content from commit 0841d09

    git-subtree-dir: zmk-nodefree-config
    git-subtree-split: 0841d0948ac7389a86d15dd42baf03e2832a1b00

commit 41ec2cdb032cd605b65024e8d8fa8ea7578ed85e
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 11:37:58 2022 -0400

    Remove old subtree

commit ac2a6c4000d480b78769e1c3f585322b724b0325
Merge: 7599487 188e189
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 11:32:33 2022 -0400

    Merge commit '188e1891582712e06130eb794aeee34b47e2241b' as 'zmk-nodefree-config'

commit 188e1891582712e06130eb794aeee34b47e2241b
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 11:32:33 2022 -0400

    Squashed 'zmk-nodefree-config/' content from commit bd714d8

    git-subtree-dir: zmk-nodefree-config
    git-subtree-split: bd714d81d177a5a4ac231b40a041c9f50c713cc5

commit 7599487fd27a382b7380ef9c37c5a6899d393fff
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 11:32:21 2022 -0400

    Remove old subtree

commit 97b0bf3d84910f68e01f9c671e690c9f25cc7e17
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 11:30:23 2022 -0400

    Move combo and unicode macros to helper.dtsi

commit 10703c087dbee780857182840749e5f1f0db25fb
Author: urob <978080+urob@users.noreply.github.com>
Date:   Thu Jul 14 10:28:24 2022 -0400

    Testing combo macros
2022-07-14 17:16:44 -04:00

122 lines
3.6 KiB
C

/*
* helper.h
*
* Convenience macros simplifying ZMK's keymap configuration.
* See https://github.com/urob/zmk-nodefree-config for documentation.
*/
#pragma once
#define ZMK_HELPER_STRINGIFY(x) #x
/* ZMK_BEHAVIOR */
#define ZMK_BEHAVIOR_CORE_caps_word compatible = "zmk,behavior-caps-word"; #binding-cells = <0>
#define ZMK_BEHAVIOR_CORE_hold_tap compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>
#define ZMK_BEHAVIOR_CORE_key_repeat compatible = "zmk,behavior-key-repeat"; #binding-cells = <0>
#define ZMK_BEHAVIOR_CORE_macro compatible = "zmk,behavior-macro"; #binding-cells = <0>
#define ZMK_BEHAVIOR_CORE_mod_morph compatible = "zmk,behavior-mod-morph"; #binding-cells = <0>
#define ZMK_BEHAVIOR_CORE_sticky_key compatible = "zmk,behavior-sticky-key"; #binding-cells = <1>
#define ZMK_BEHAVIOR_CORE_tap_dance compatible = "zmk,behavior-tap-dance"; #binding-cells = <0>
#define ZMK_BEHAVIOR(name, type, ...) \
/ { \
behaviors { \
name: name { \
label = ZMK_HELPER_STRINGIFY(ZB_ ## name); \
ZMK_BEHAVIOR_CORE_ ## type; \
__VA_ARGS__ \
}; \
}; \
};
/* ZMK_LAYER */
#define ZMK_LAYER(name, layout) \
/ { \
keymap { \
compatible = "zmk,keymap"; \
name { \
bindings = <layout>; \
}; \
}; \
};
/* ZMK_COMBOS */
#define ALL -1
#if !defined COMBO_TERM
#define COMBO_TERM 30
#endif
#define COMBO(name, combo_bindings, keypos, combo_layers) \
/ { \
combos { \
compatible = "zmk,combos"; \
combo_ ## name { \
timeout-ms = <COMBO_TERM>; \
bindings = <combo_bindings>; \
key-positions = <keypos>; \
layers = <combo_layers>; \
}; \
}; \
};
/* ZMK_UNICODE */
#if !defined OS_COMBO_LEAD
#if HOST_OS == 2
// OSx
#elif HOST_OS == 1
// Linux
#else
#define OS_COMBO_LEAD &kp RALT &kp U // Windows + WinCompose (default)
#endif
#endif
#if !defined OS_COMBO_TRAIL
#if HOST_OS == 2
// OSx
#elif HOST_OS == 1
// Linux
#else
#define OS_COMBO_TRAIL &kp RET // Windows + WinCompose (default)
#endif
#endif
#define UC_MACRO(name, unicode_bindings) \
/ { \
macros { \
name: name { \
compatible = "zmk,behavior-macro"; \
label = ZMK_HELPER_STRINGIFY(UC_MACRO_ ## name); \
wait-ms = <0>; \
tap-ms = <1>; \
#binding-cells = <0>; \
bindings = <OS_COMBO_LEAD>, <unicode_bindings>, <OS_COMBO_TRAIL>; \
}; \
}; \
};
#define UC_MODMORPH(name, uc_binding, shifted_uc_binding) \
/ { \
behaviors { \
name: name { \
compatible = "zmk,behavior-mod-morph"; \
label = ZMK_HELPER_STRINGIFY(UC_MORPH_ ## name); \
#binding-cells = <0>; \
bindings = <uc_binding>, <shifted_uc_binding>; \
mods = <(MOD_LSFT|MOD_RSFT)>; \
masked_mods = <(MOD_LSFT|MOD_RSFT)>; \
}; \
}; \
};
#define ZMK_UNICODE_SINGLE(name, L0, L1, L2, L3) \
UC_MACRO(uc_lower_ ## name, &kp L0 &kp L1 &kp L2 &kp L3) \
UC_MODMORPH(uc_ ## name, &uc_lower_ ## name, &none)
#define ZMK_UNICODE_PAIR(name, L0, L1, L2, L3, U0, U1, U2, U3) \
UC_MACRO(uc_lower_ ## name, &kp L0 &kp L1 &kp L2 &kp L3) \
UC_MACRO(uc_upper_ ## name, &kp U0 &kp U1 &kp U2 &kp U3) \
UC_MODMORPH(uc_ ## name, &uc_lower_ ## name, &uc_upper_ ## name)