qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 }