1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#define COMBO(name, POS, LAYERS, BINDINGS) \
/ { \
combos { \
compatible = "zmk,combos"; \
name { \
timeout-ms = <50>; \
key-positions = <POS>; \
layers = <LAYERS>; \
bindings = <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 = <UC_LEAD_LINUX>, <¯o_tap unicode_bindings>, <UC_TRAIL_LINUX>; \
}; \
}; \
};
#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 = <UC_LEAD_MACWIN>, <¯o_tap unicode_bindings>, <UC_TRAIL_MACWIN>; \
}; \
}; \
};
#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)>; \
}; \
}; \
};
#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)
|