keymap.c (3544B)
1 #include QMK_KEYBOARD_H 2 3 #define WIN_TAB LGUI(KC_TAB) 4 #define WIN_LOCK LGUI(KC_L) 5 6 enum layers { 7 NORMAL_LAYER = 0, 8 MEDIA_LAYER, 9 TBD_LAYER2, 10 FRENCH_LAYER 11 }; 12 13 14 /* Enum for the tap dancing keys */ 15 enum tap_codes { 16 A_Q, E_Q, E_U, E_E, 17 A_Y, I_I, O_C, U_U 18 }; 19 20 #define FR_A_GRAVE 0x00E0 // à 21 #define FR_A_HAT 0x00E2 // â 22 23 #define FR_C_CIRCUM 0x00E7 // ç 24 25 #define FR_E_AIGU 0x00E9 // é 26 #define FR_E_GRAVE 0x00E8 // è 27 #define FR_E_HAT 0x00EA // ê 28 #define FR_E_UMLAUT 0x00EB // ë 29 30 #define FR_I_HAT 0x00EE // î 31 #define FR_I_UMLAUT 0x00EF // ï 32 33 #define FR_O_HAT 0x00F4 // ô 34 35 #define FR_U_GRAVE 0x00F9 // ù 36 #define FR_U_HAT 0x00FB // û 37 #define FR_U_UMLAUT 0x00FC // ü 38 39 #define FR_Y_UMLAUT 0x00FF // ÿ 40 41 #define FR_L_QUOTE 0x00AB // « 42 #define FR_R_QUOTE 0x00BB // » 43 44 void send_french_unicode_char(uint8_t count, uint32_t once, uint32_t twice) 45 { 46 if (count <= 1) 47 register_unicode(once); 48 else 49 register_unicode(twice); 50 } 51 52 void dance_a_q(tap_dance_state_t *state, void *user_data) 53 { 54 send_french_unicode_char(state->count, FR_A_GRAVE, FR_L_QUOTE); 55 } 56 57 void dance_e_q(tap_dance_state_t *state, void *user_data) 58 { 59 send_french_unicode_char(state->count, FR_E_AIGU, FR_R_QUOTE); 60 } 61 62 void dance_e_u(tap_dance_state_t *state, void *user_data) 63 { 64 send_french_unicode_char(state->count, FR_E_GRAVE, FR_U_GRAVE); 65 } 66 67 void dance_e_e(tap_dance_state_t *state, void *user_data) 68 { 69 send_french_unicode_char(state->count, FR_E_HAT, FR_E_UMLAUT); 70 } 71 72 void dance_a_y(tap_dance_state_t *state, void *user_data) 73 { 74 send_french_unicode_char(state->count, FR_A_HAT, FR_Y_UMLAUT); 75 } 76 77 void dance_i_i(tap_dance_state_t *state, void *user_data) 78 { 79 send_french_unicode_char(state->count, FR_I_HAT, FR_I_UMLAUT); 80 } 81 82 void dance_o_c(tap_dance_state_t *state, void *user_data) 83 { 84 send_french_unicode_char(state->count, FR_O_HAT, FR_C_CIRCUM); 85 } 86 87 void dance_u_u(tap_dance_state_t *state, void *user_data) 88 { 89 send_french_unicode_char(state->count, FR_U_HAT, FR_U_UMLAUT); 90 } 91 92 /* Define the tap dance actions for the french characters */ 93 tap_dance_action_t tap_dance_actions[] = { 94 [A_Q] = ACTION_TAP_DANCE_FN(dance_a_q), 95 [E_Q] = ACTION_TAP_DANCE_FN(dance_e_q), 96 [E_U] = ACTION_TAP_DANCE_FN(dance_e_u), 97 [E_E] = ACTION_TAP_DANCE_FN(dance_e_e), 98 99 [A_Y] = ACTION_TAP_DANCE_FN(dance_a_y), 100 [I_I] = ACTION_TAP_DANCE_FN(dance_i_i), 101 [O_C] = ACTION_TAP_DANCE_FN(dance_o_c), 102 [U_U] = ACTION_TAP_DANCE_FN(dance_u_u) 103 }; 104 105 106 107 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 108 109 [NORMAL_LAYER] = LAYOUT(TO(1), WIN_TAB, KC_HOME, KC_UP, KC_END, 110 WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT), 111 112 [MEDIA_LAYER] = LAYOUT(TO(2), KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU, 113 KC_TRNS, KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD), 114 115 [TBD_LAYER2] = LAYOUT(TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 116 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 117 118 [FRENCH_LAYER] = LAYOUT(TO(0), TD(A_Q), TD(E_Q), TD(E_U), TD(E_E), 119 KC_TRNS, TD(A_Y), TD(I_I), TD(O_C), TD(U_U)) 120 }; 121 122 void matrix_init_user(void) 123 { 124 set_unicode_input_mode(UNICODE_MODE_WINCOMPOSE); /* See https://jayliu50.github.io/qmk-cheatsheet/ */ 125 } 126 127 128 layer_state_t layer_state_set_user(layer_state_t state) 129 { 130 turn_off_leds(); 131 132 switch (get_highest_layer(state)) 133 { 134 case NORMAL_LAYER: 135 break; 136 137 case MEDIA_LAYER: 138 turn_on_led(RED_LED); 139 break; 140 141 case TBD_LAYER2: 142 turn_on_led(BLUE_LED); 143 break; 144 145 case FRENCH_LAYER: 146 turn_on_led(GREEN_LED); 147 break; 148 } 149 return state; 150 }