main
  1#define EACUT  RA(E)      // é/É
  2#define EURO   RA(N5)     // €
  3#define AE     RA(Z)      // æ/Æ
  4#define OE     RA(K)       // œ/Œ
  5#define CDIL   RA(COMMA)  // ç/Ç
  6#define NTIL   RA(N)      // ñ/Ñ
  7
  8#define ACC_AC RC(SEMI)         // ´
  9#define ACC_AI RA(SLASH)        // ´
 10#define ACC_CI LBKT             // ^
 11#define ACC_GR RA(LBKT)         // `
 12#define ACC_TI RC(RBKT)         // ~
 13#define ACC_TR LS(LBKT)         // ¨
 14
 15// ` to input
 16ZMK_MACRO_ONE_PARAM(AGRA, bindings =
 17    <&kp GRAVE>,
 18    <&macro_param_1to1>,
 19    <&macro_tap &kp MACRO_PLACEHOLDER>;
 20)
 21
 22// ´ to input
 23ZMK_MACRO_ONE_PARAM(AIGU, bindings =
 24    <&kp SQT>,
 25    <&macro_param_1to1>,
 26    <&macro_tap &kp MACRO_PLACEHOLDER>;
 27)
 28
 29// ¨ to input
 30ZMK_MACRO_ONE_PARAM(TREM, bindings =
 31    <&kp DQT>,
 32    <&macro_param_1to1>,
 33    <&macro_tap &kp MACRO_PLACEHOLDER>;
 34)
 35
 36// ~ to input (TILDE = LS(GRAVE), so use shift + grave)
 37// Note: can't use "TILD" as name — it's a deprecated ZMK keycode #define
 38ZMK_MACRO_ONE_PARAM(TILDEMACRO, bindings =
 39    <&macro_press &kp LSHFT>,
 40    <&macro_tap &kp GRAVE>,
 41    <&macro_release &kp LSHFT>,
 42    <&macro_param_1to1>,
 43    <&macro_tap &kp MACRO_PLACEHOLDER>;
 44)
 45
 46// Standalone dead key macros (dead key + space) for use in combos
 47ZMK_MACRO(standalone_dquo, bindings = <&macro_tap &kp DQT &kp SPACE>;)                                       // "
 48ZMK_MACRO(standalone_tild, bindings = <&macro_press &kp LSHFT>, <&macro_tap &kp GRAVE>, <&macro_release &kp LSHFT>, <&macro_tap &kp SPACE>;) // ~
 49ZMK_MACRO(standalone_grav, bindings = <&macro_tap &kp GRAVE &kp SPACE>;)                                     // `
 50
 51// ^ to input
 52ZMK_MACRO_ONE_PARAM(CIRC, bindings =
 53    <&kp CARET>,
 54    <&macro_param_1to1>,
 55    <&macro_tap &kp MACRO_PLACEHOLDER>;
 56)
 57
 58// tap: minus | shift + tap: question mark
 59ZMK_MOD_MORPH(min_qma,
 60    bindings = <&kp MINUS>, <&kp QMARK>;
 61    mods = <(MOD_LSFT|MOD_RSFT)>;
 62)
 63
 64// tap: comma | shift + tab: semicolon
 65ZMK_MOD_MORPH(com_smc,
 66    bindings = <&kp COMMA>, <&kp SEMICOLON>;
 67    mods = <(MOD_LSFT|MOD_RSFT)>;
 68)
 69  
 70// tap: period | shift + tap: colon
 71ZMK_MOD_MORPH(dot_col,
 72    bindings = <&kp DOT>, <&kp COLON>;
 73    mods = <(MOD_LSFT|MOD_RSFT)>;
 74)
 75
 76// Bépo morphs
 77
 78// tap: quote (') | shift + tab: question mark
 79ZMK_MOD_MORPH(sqt_qma,
 80    bindings = <&AIGU SPACE>, <&kp QMARK>;
 81    mods = <(MOD_LSFT|MOD_RSFT)>;
 82)
 83
 84// tap: Caret (^) | shift + tap: EXCLAMATION (!)
 85ZMK_MOD_MORPH(car_excl,
 86    bindings = <&kp CARET>, <&kp EXCLAMATION>;
 87    mods = <(MOD_LSFT|MOD_RSFT)>;
 88)
 89
 90// tap: B | right_alt + tap : pipe (|)
 91ZMK_MOD_MORPH(b_pipe,
 92    bindings = <&kp B>, <&kp PIPE>;
 93    mods = <(MOD_RALT)>;
 94)
 95
 96// tap: P | right_alt + tap : ampersand (&)
 97ZMK_MOD_MORPH(p_amp,
 98    bindings = <&kp P>, <&kp AMPERSAND>;
 99    mods = <(MOD_RALT)>;
100)
101
102// hold: numbers layer | tap: SPACE | right_alt + tap : undercore (_)
103ZMK_MOD_MORPH(num_spc_und,
104    bindings = <&lt NUM SPACE>, <&kp UNDERSCORE>;
105    mods = <(MOD_RALT)>;
106)
107
108// hold: left control | tap: E | right_alt + tap: EURO (€)
109ZMK_MOD_MORPH(cl_e_euro,
110    bindings = <&hml CL E>, <&kp EURO>;
111    mods = <(MOD_RALT)>;
112)
113
114// hold: right_hype | tap: comma | shift + tab: semicolon
115ZMK_MOD_MORPH(hyp_com_smc,
116    bindings = <&hml HL COMMA>, <&kp SEMICOLON>;
117    mods = <(MOD_LSFT|MOD_RSFT)>;
118)
119
120/*
121Local Variables:
122mode: c
123End:
124*/