#define COMBO(name, POS, LAYERS, BINDINGS) \ / { \ combos { \ compatible = "zmk,combos"; \ name { \ timeout-ms = <50>; \ key-positions = ; \ layers = ; \ bindings = ; \ }; \ }; \ }; /* ZMK_UNICODE */ #define UC_LEAD_MACWIN ¯o_press &kp LALT // macOS/Windows-Alt-Codes #define UC_LEAD_LINUX ¯o_tap &kp LS(LC(U)) // Linux #define UC_LEAD_WINDOWS ¯o_tap &kp RALT &kp U // Windows + WinCompose (default) #define UC_TRAIL_MACWIN ¯o_release &kp LALT // macOS/Windows-Alt-Codes #define UC_TRAIL_LINUX ¯o_tap &kp SPACE // Linux #define UC_TRAIL_WINDOWS ¯o_tap &kp RET // Windows + WinCompose (default) #define UC_MACRO_LINUX(name, unicode_bindings) \ / { \ macros { \ name: name { \ compatible = "zmk,behavior-macro"; \ label = ZMK_HELPER_STRINGIFY(UC_MACRO_ ## name); \ wait-ms = <0>; \ tap-ms = <0>; \ #binding-cells = <0>; \ bindings = , <¯o_tap unicode_bindings>, ; \ }; \ }; \ }; #define UC_MACRO_MACWIN(name, unicode_bindings) \ / { \ macros { \ name: name { \ compatible = "zmk,behavior-macro"; \ label = ZMK_HELPER_STRINGIFY(UC_MACRO_ ## name); \ wait-ms = <0>; \ tap-ms = <0>; \ #binding-cells = <0>; \ bindings = , <¯o_tap unicode_bindings>, ; \ }; \ }; \ }; #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 = , ; \ mods = <(MOD_LSFT|MOD_RSFT)>; \ }; \ }; \ }; #define ZMK_UNICODE_SINGLE(name, L0, L1, L2, L3) \ UC_MACRO(name ## _lower, &kp L0 &kp L1 &kp L2 &kp L3) \ UC_MODMORPH(name, &name ## _lower, &none) #define ZMK_UNICODE_PAIR_LINUX(name, L0, L1, L2, L3, U0, U1, U2, U3) \ UC_MACRO_LINUX(name ## _lower, &kp L0 &kp L1 &kp L2 &kp L3) \ UC_MACRO_LINUX(name ## _upper, &kp U0 &kp U1 &kp U2 &kp U3) \ UC_MODMORPH(name, &name ## _lower, &name ## _upper) #define ZMK_UNICODE_PAIR_MACWIN(name, L0, L1, L2, L3, U0, U1, U2, U3) \ UC_MACRO_MACWIN(name ## _lower, &kp L0 &kp L1 &kp L2 &kp L3) \ UC_MACRO_MACWIN(name ## _upper, &kp U0 &kp U1 &kp U2 &kp U3) \ UC_MODMORPH(name, &name ## _lower, &name ## _upper)