diff --git a/keyboards/handwired/2x5keypad/config.h b/keyboards/handwired/2x5keypad/config.h index 6d09b5ed0..35a0fda8d 100644 --- a/keyboards/handwired/2x5keypad/config.h +++ b/keyboards/handwired/2x5keypad/config.h @@ -37,6 +37,9 @@ /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE +/* Tap dancing params */ +#define TAPPING_TERM 250 + /* key combination for command */ /* DISABLED #define IS_COMMAND() ( \ @@ -44,9 +47,6 @@ ) */ -/* prevent stuck modifiers */ - - #ifdef RGB_DI_PIN #define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 0 diff --git a/keyboards/handwired/2x5keypad/keymaps/default/keymap.c b/keyboards/handwired/2x5keypad/keymaps/default/keymap.c index 808824f3a..91a0e28f6 100644 --- a/keyboards/handwired/2x5keypad/keymaps/default/keymap.c +++ b/keyboards/handwired/2x5keypad/keymaps/default/keymap.c @@ -7,27 +7,116 @@ enum layers { NORMAL_LAYER = 0, MEDIA_LAYER, TBD_LAYER2, - TBD_LAYER3 + 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), + [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), + [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), + [TBD_LAYER2] = LAYOUT(TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - [TBD_LAYER3]= - LAYOUT(TO(0), 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)) }; @@ -44,6 +133,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { */ +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(); @@ -61,7 +156,7 @@ layer_state_t layer_state_set_user(layer_state_t state) turn_on_led(BLUE_LED); break; - case TBD_LAYER3: + case FRENCH_LAYER: turn_on_led(GREEN_LED); break; } diff --git a/keyboards/handwired/2x5keypad/rules.mk b/keyboards/handwired/2x5keypad/rules.mk index b7027cd9e..e62a0f24a 100644 --- a/keyboards/handwired/2x5keypad/rules.mk +++ b/keyboards/handwired/2x5keypad/rules.mk @@ -11,13 +11,17 @@ MCU = atmega32u4 # ATmega328P USBasp BOOTLOADER = caterina -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE= no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -NKRO_ENABLE = yes # USB Nkey Rollover - -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality + AUDIO_ENABLE = no +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +COMMAND_ENABLE = no # Commands for debug and configuration +CONSOLE_ENABLE= no # Console for debug +EXTRAKEY_ENABLE = yes # Audio control and System control +MOUSEKEY_ENABLE = yes # Mouse keys +NKRO_ENABLE = yes # USB Nkey Rollover - + RGBLIGHT_ENABLE = no +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +UNICODE_ENABLE = yes +TAP_DANCE_ENABLE = yes