
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
122 lines
3.6 KiB
C
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)
|
|
|