* Update default keymaps to use `layer_state_t` * Convert binon32 as get_highest_layer in default keymaps
		
			
				
	
	
		
			165 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include QMK_KEYBOARD_H
 | 
						|
 | 
						|
#define WIN_TAB LGUI(KC_TAB)
 | 
						|
#define WIN_LOCK LGUI(KC_L)
 | 
						|
 | 
						|
enum layers {
 | 
						|
  NORMAL_LAYER = 0,
 | 
						|
  MEDIA_LAYER,
 | 
						|
  TBD_LAYER2,
 | 
						|
  FRENCH_LAYER
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/* Enum for the tap dancing keys */
 | 
						|
enum tap_codes {
 | 
						|
    A_Q, E_Q, E_U, E_E,
 | 
						|
    A_Y, I_I, O_C, U_U
 | 
						|
};
 | 
						|
 | 
						|
#define FR_A_GRAVE  "00E0"
 | 
						|
#define FR_A_HAT    "00E2"
 | 
						|
 | 
						|
#define FR_C_CIRCUM "00E7"
 | 
						|
 | 
						|
#define FR_E_AIGU   "00E9"
 | 
						|
#define FR_E_GRAVE  "00E8"
 | 
						|
#define FR_E_HAT    "00EA"
 | 
						|
#define FR_E_UMLAUT "00EB"
 | 
						|
 | 
						|
#define FR_I_HAT    "00EE"
 | 
						|
#define FR_I_UMLAUT "00EF"
 | 
						|
 | 
						|
#define FR_O_HAT    "00F4"
 | 
						|
 | 
						|
#define FR_U_GRAVE  "00F9"
 | 
						|
#define FR_U_HAT    "00FB"
 | 
						|
#define FR_U_UMLAUT "00FC"
 | 
						|
 | 
						|
#define FR_Y_UMLAUT "00FF"
 | 
						|
 | 
						|
#define FR_L_QUOTE  "00AB"
 | 
						|
#define FR_R_QUOTE  "00BB"
 | 
						|
 | 
						|
void send_french_unicode_char(uint8_t count, char *once, char *twice)
 | 
						|
{
 | 
						|
    if (count <= 1)
 | 
						|
	send_unicode_hex_string(once);
 | 
						|
    else
 | 
						|
	send_unicode_hex_string(twice); 
 | 
						|
}
 | 
						|
 | 
						|
void dance_a_q(qk_tap_dance_state_t *state, void *user_data)
 | 
						|
{
 | 
						|
    send_french_unicode_char(state->count, FR_A_GRAVE, FR_L_QUOTE);
 | 
						|
}
 | 
						|
 | 
						|
void dance_e_q(qk_tap_dance_state_t *state, void *user_data)
 | 
						|
{
 | 
						|
    send_french_unicode_char(state->count, FR_E_AIGU, FR_R_QUOTE);
 | 
						|
}
 | 
						|
 | 
						|
void dance_e_u(qk_tap_dance_state_t *state, void *user_data)
 | 
						|
{
 | 
						|
    send_french_unicode_char(state->count, FR_E_GRAVE, FR_U_GRAVE);
 | 
						|
}
 | 
						|
 | 
						|
void dance_e_e(qk_tap_dance_state_t *state, void *user_data)
 | 
						|
{
 | 
						|
    send_french_unicode_char(state->count, FR_E_HAT, FR_E_UMLAUT);
 | 
						|
}
 | 
						|
 | 
						|
void dance_a_y(qk_tap_dance_state_t *state, void *user_data)
 | 
						|
{
 | 
						|
    send_french_unicode_char(state->count, FR_A_HAT, FR_Y_UMLAUT);
 | 
						|
}
 | 
						|
 | 
						|
void dance_i_i(qk_tap_dance_state_t *state, void *user_data)
 | 
						|
{
 | 
						|
    send_french_unicode_char(state->count, FR_I_HAT, FR_I_UMLAUT);
 | 
						|
}
 | 
						|
 | 
						|
void dance_o_c(qk_tap_dance_state_t *state, void *user_data)
 | 
						|
{
 | 
						|
    send_french_unicode_char(state->count, FR_O_HAT, FR_C_CIRCUM);
 | 
						|
}
 | 
						|
 | 
						|
void dance_u_u(qk_tap_dance_state_t *state, void *user_data)
 | 
						|
{
 | 
						|
    send_french_unicode_char(state->count, FR_U_HAT, FR_U_UMLAUT);
 | 
						|
}
 | 
						|
 | 
						|
/* Define the tap dance actions for the french characters */
 | 
						|
qk_tap_dance_action_t tap_dance_actions[] = {
 | 
						|
    [A_Q] = ACTION_TAP_DANCE_FN(dance_a_q),
 | 
						|
    [E_Q] = ACTION_TAP_DANCE_FN(dance_e_q),
 | 
						|
    [E_U] = ACTION_TAP_DANCE_FN(dance_e_u),
 | 
						|
    [E_E] = ACTION_TAP_DANCE_FN(dance_e_e),
 | 
						|
 | 
						|
    [A_Y] = ACTION_TAP_DANCE_FN(dance_a_y),
 | 
						|
    [I_I] = ACTION_TAP_DANCE_FN(dance_i_i),
 | 
						|
    [O_C] = ACTION_TAP_DANCE_FN(dance_o_c),
 | 
						|
    [U_U] = ACTION_TAP_DANCE_FN(dance_u_u)
 | 
						|
};
 | 
						|
    
 | 
						|
 | 
						|
 | 
						|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
						|
 | 
						|
    [NORMAL_LAYER] = LAYOUT(TO(1),    WIN_TAB, KC_HOME, KC_UP,   KC_END, 
 | 
						|
			    WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT),
 | 
						|
 | 
						|
    [MEDIA_LAYER]  = LAYOUT(TO(2),    KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU, 
 | 
						|
			    KC_TRNS,  KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD),
 | 
						|
 | 
						|
    [TBD_LAYER2]   = LAYOUT(TO(3),    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
 | 
						|
			    KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
 | 
						|
 | 
						|
    [FRENCH_LAYER] = LAYOUT(TO(0),    TD(A_Q), TD(E_Q), TD(E_U), TD(E_E), 
 | 
						|
			    KC_TRNS,  TD(A_Y), TD(I_I), TD(O_C), TD(U_U))
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/* DISABLED
 | 
						|
void matrix_init_user(void) {
 | 
						|
}
 | 
						|
 | 
						|
void matrix_scan_user(void) {
 | 
						|
}
 | 
						|
 | 
						|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
						|
	return true;
 | 
						|
}
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
void matrix_init_user(void)
 | 
						|
{
 | 
						|
    set_unicode_input_mode(UC_WINC);  /* See https://jayliu50.github.io/qmk-cheatsheet/ */
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
layer_state_t layer_state_set_user(layer_state_t state)
 | 
						|
{
 | 
						|
    turn_off_leds();
 | 
						|
 | 
						|
    switch (get_highest_layer(state))
 | 
						|
    {
 | 
						|
    case NORMAL_LAYER:
 | 
						|
	break;
 | 
						|
 | 
						|
    case MEDIA_LAYER:
 | 
						|
	turn_on_led(RED_LED);
 | 
						|
	break;
 | 
						|
 | 
						|
    case TBD_LAYER2:
 | 
						|
	turn_on_led(BLUE_LED);
 | 
						|
	break;
 | 
						|
 | 
						|
    case FRENCH_LAYER:
 | 
						|
	turn_on_led(GREEN_LED);
 | 
						|
	break;
 | 
						|
	}
 | 
						|
    return state;
 | 
						|
}
 |