diff options
author | fauxpark <fauxpark@gmail.com> | 2023-02-10 20:19:08 +1100 |
---|---|---|
committer | fauxpark <fauxpark@gmail.com> | 2023-02-10 20:19:08 +1100 |
commit | 50cd320616aa4850ebcd876b3462f449ec55c51b (patch) | |
tree | 6ae55cc30b7931a5d792152b2f33ef5734f52607 /keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c | |
parent | 6df5d64bb9f2b6de149016b3c56d41dec54e8302 (diff) | |
parent | bccf2cba6aa4bcbed7041ee499ac312b42d0d563 (diff) |
Merge remote-tracking branch 'upstream/master' into develop
Diffstat (limited to 'keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c')
-rw-r--r-- | keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c new file mode 100644 index 0000000000..d6bd3818b4 --- /dev/null +++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c @@ -0,0 +1,199 @@ +// Copyright 2023 Florent Linguenheld (@FLinguenheld) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H +#include "keycodes.h" + +/* Only for basis letters + Exceptions like Tab or Enter */ +bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) { + + switch (keycode) { + + case KC_TAB: + case KC_ENT: + + // -- + case KC_A: + case KC_B: + case KC_C: + case KC_D: + case KC_E: + case KC_F: + case KC_G: + case KC_H: + case KC_I: + case KC_J: + case KC_K: + case KC_L: + case KC_M: + case KC_N: + case KC_O: + case KC_P: + case KC_Q: + case KC_R: + case KC_S: + case KC_T: + case KC_U: + case KC_V: + case KC_W: + case KC_X: + case KC_Y: + case KC_Z: + + return true; + } + + return get_custom_auto_shifted_key(keycode, record); +} + + +/* Custom auto shift + I use this instead of tap dance because double tap is horrible + Add here the letter or the custom enum, then add in press_user and press_release the actions */ +bool get_custom_auto_shifted_key(uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + + case KC_BSPC: + case KC_LABK: // Easy indent with vim + case KC_RABK: + + /* French */ + case CS_E_ACUTE: + + case CS_A_GRAVE: + case CS_E_GRAVE: + case CS_I_GRAVE: + case CS_O_GRAVE: + case CS_U_GRAVE: + + case CS_A_CIRCUMFLEX: + case CS_E_CIRCUMFLEX: + case CS_I_CIRCUMFLEX: + case CS_O_CIRCUMFLEX: + case CS_U_CIRCUMFLEX: + + case CS_A_DIAERESIS: + case CS_E_DIAERESIS: + case CS_I_DIAERESIS: + case CS_O_DIAERESIS: + case CS_U_DIAERESIS: + case CS_Y_DIAERESIS: + + case CS_C_CEDILLA: + case CS_AE: + case CS_OE: + + return true; + + default: + return false; + } +} + +void autoshift_press_user(uint16_t keycode, bool shifted, keyrecord_t *record) { + switch(keycode) { + + case KC_BSPC: + register_code16((!shifted) ? KC_BSPC : KC_DEL); + break; + + case KC_LABK: + if (shifted) { send_unicode_string("<<"); } + else { send_unicode_string("<"); } break; + + case KC_RABK: + if (shifted) { send_unicode_string(">>"); } + else { send_unicode_string(">"); } break; + + /* French + Release is not necessary with 'send_unicode_string()' */ + case CS_E_ACUTE: + if (shifted) { send_unicode_string("É"); } + else { send_unicode_string("é"); } break; + + case CS_A_GRAVE: + if (shifted) { send_unicode_string("À"); } + else { send_unicode_string("à"); } break; + case CS_E_GRAVE: + if (shifted) { send_unicode_string("È"); } + else { send_unicode_string("è"); } break; + case CS_I_GRAVE: + if (shifted) { send_unicode_string("Ì"); } + else { send_unicode_string("ì"); } break; + case CS_O_GRAVE: + if (shifted) { send_unicode_string("Ò"); } + else { send_unicode_string("ò"); } break; + case CS_U_GRAVE: + if (shifted) { send_unicode_string("Ù"); } + else { send_unicode_string("ù"); } break; + + case CS_A_CIRCUMFLEX: + if (shifted) { send_unicode_string("Â"); } + else { send_unicode_string("â"); } break; + case CS_E_CIRCUMFLEX: + if (shifted) { send_unicode_string("Ê"); } + else { send_unicode_string("ê"); } break; + case CS_I_CIRCUMFLEX: + if (shifted) { send_unicode_string("Î"); } + else { send_unicode_string("î"); } break; + case CS_O_CIRCUMFLEX: + if (shifted) { send_unicode_string("Ô"); } + else { send_unicode_string("ô"); } break; + case CS_U_CIRCUMFLEX: + if (shifted) { send_unicode_string("Û"); } + else { send_unicode_string("û"); } break; + + case CS_A_DIAERESIS: + if (shifted) { send_unicode_string("Ä"); } + else { send_unicode_string("ä"); } break; + case CS_E_DIAERESIS: + if (shifted) { send_unicode_string("Ë"); } + else { send_unicode_string("ë"); } break; + case CS_I_DIAERESIS: + if (shifted) { send_unicode_string("Ï"); } + else { send_unicode_string("ï"); } break; + case CS_O_DIAERESIS: + if (shifted) { send_unicode_string("Ö"); } + else { send_unicode_string("ö"); } break; + case CS_U_DIAERESIS: + if (shifted) { send_unicode_string("Ü"); } + else { send_unicode_string("ü"); } break; + case CS_Y_DIAERESIS: + if (shifted) { send_unicode_string("Ÿ"); } + else { send_unicode_string("ÿ"); } break; + + case CS_C_CEDILLA: + if (shifted) { send_unicode_string("Ç"); } + else { send_unicode_string("ç"); } break; + case CS_AE: + if (shifted) { send_unicode_string("Æ"); } + else { send_unicode_string("æ"); } break; + case CS_OE: + if (shifted) { send_unicode_string("Œ"); } + else { send_unicode_string("œ"); } break; + + + default: + if (shifted) { + add_weak_mods(MOD_BIT(KC_LSFT)); + } + /* & 0xFF gets the Tap key for Tap Holds, required when using Retro Shift */ + register_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode); + } +} + +void autoshift_release_user(uint16_t keycode, bool shifted, keyrecord_t *record) { + switch(keycode) { + + case KC_BSPC: + unregister_code16((!shifted) ? KC_BSPC : KC_DEL); + break; + + default: + /* & 0xFF gets the Tap key for Tap Holds, required when using Retro Shift + The IS_RETRO check isn't really necessary here, always using + keycode & 0xFF would be fine. */ + unregister_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode); + } +} |