diff options
Diffstat (limited to 'quantum/quantum.c')
| -rw-r--r-- | quantum/quantum.c | 125 | 
1 files changed, 80 insertions, 45 deletions
| diff --git a/quantum/quantum.c b/quantum/quantum.c index e3a20f43e0..b5e2d60b9d 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -1,5 +1,9 @@  #include "quantum.h" +#ifndef TAPPING_TERM +#define TAPPING_TERM 200 +#endif +  static void do_code16 (uint16_t code, void (*f) (uint8_t)) {    switch (code) {    case QK_MODS ... QK_MODS_MAX: @@ -75,6 +79,7 @@ void reset_keyboard(void) {  #endif  static bool shift_interrupted[2] = {0, 0}; +static uint16_t scs_timer = 0;  bool process_record_quantum(keyrecord_t *record) { @@ -129,6 +134,9 @@ bool process_record_quantum(keyrecord_t *record) {    #ifdef UCIS_ENABLE      process_ucis(keycode, record) &&    #endif +  #ifdef UNICODEMAP_ENABLE +    process_unicode_map(keycode, record) && +  #endif        true)) {      return false;    } @@ -199,7 +207,7 @@ bool process_record_quantum(keyrecord_t *record) {  	  return false;        break;  	#endif -    case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI: +    case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO:        if (record->event.pressed) {          // MAGIC actions (BOOTMAGIC without the boot)          if (!eeconfig_is_enabled()) { @@ -207,54 +215,80 @@ bool process_record_quantum(keyrecord_t *record) {          }          /* keymap config */          keymap_config.raw = eeconfig_read_keymap(); -        if (keycode == MAGIC_SWAP_CONTROL_CAPSLOCK) { -            keymap_config.swap_control_capslock = 1; -        } else if (keycode == MAGIC_CAPSLOCK_TO_CONTROL) { -            keymap_config.capslock_to_control = 1; -        } else if (keycode == MAGIC_SWAP_LALT_LGUI) { -            keymap_config.swap_lalt_lgui = 1; -        } else if (keycode == MAGIC_SWAP_RALT_RGUI) { -            keymap_config.swap_ralt_rgui = 1; -        } else if (keycode == MAGIC_NO_GUI) { -            keymap_config.no_gui = 1; -        } else if (keycode == MAGIC_SWAP_GRAVE_ESC) { -            keymap_config.swap_grave_esc = 1; -        } else if (keycode == MAGIC_SWAP_BACKSLASH_BACKSPACE) { -            keymap_config.swap_backslash_backspace = 1; -        } else if (keycode == MAGIC_HOST_NKRO) { -            keymap_config.nkro = 1; -        } else if (keycode == MAGIC_SWAP_ALT_GUI) { -            keymap_config.swap_lalt_lgui = 1; -            keymap_config.swap_ralt_rgui = 1; -        } -        /* UNs */ -        else if (keycode == MAGIC_UNSWAP_CONTROL_CAPSLOCK) { -            keymap_config.swap_control_capslock = 0; -        } else if (keycode == MAGIC_UNCAPSLOCK_TO_CONTROL) { -            keymap_config.capslock_to_control = 0; -        } else if (keycode == MAGIC_UNSWAP_LALT_LGUI) { -            keymap_config.swap_lalt_lgui = 0; -        } else if (keycode == MAGIC_UNSWAP_RALT_RGUI) { -            keymap_config.swap_ralt_rgui = 0; -        } else if (keycode == MAGIC_UNNO_GUI) { -            keymap_config.no_gui = 0; -        } else if (keycode == MAGIC_UNSWAP_GRAVE_ESC) { -            keymap_config.swap_grave_esc = 0; -        } else if (keycode == MAGIC_UNSWAP_BACKSLASH_BACKSPACE) { -            keymap_config.swap_backslash_backspace = 0; -        } else if (keycode == MAGIC_UNHOST_NKRO) { -            keymap_config.nkro = 0; -        } else if (keycode == MAGIC_UNSWAP_ALT_GUI) { -            keymap_config.swap_lalt_lgui = 0; -            keymap_config.swap_ralt_rgui = 0; +        switch (keycode) +        { +          case MAGIC_SWAP_CONTROL_CAPSLOCK: +            keymap_config.swap_control_capslock = true; +            break; +          case MAGIC_CAPSLOCK_TO_CONTROL: +            keymap_config.capslock_to_control = true; +            break; +          case MAGIC_SWAP_LALT_LGUI: +            keymap_config.swap_lalt_lgui = true; +            break; +          case MAGIC_SWAP_RALT_RGUI: +            keymap_config.swap_ralt_rgui = true; +            break; +          case MAGIC_NO_GUI: +            keymap_config.no_gui = true; +            break; +          case MAGIC_SWAP_GRAVE_ESC: +            keymap_config.swap_grave_esc = true; +            break; +          case MAGIC_SWAP_BACKSLASH_BACKSPACE: +            keymap_config.swap_backslash_backspace = true; +            break; +          case MAGIC_HOST_NKRO: +            keymap_config.nkro = true; +            break; +          case MAGIC_SWAP_ALT_GUI: +            keymap_config.swap_lalt_lgui = true; +            keymap_config.swap_ralt_rgui = true; +            break; +          case MAGIC_UNSWAP_CONTROL_CAPSLOCK: +            keymap_config.swap_control_capslock = false; +            break; +          case MAGIC_UNCAPSLOCK_TO_CONTROL: +            keymap_config.capslock_to_control = false; +            break; +          case MAGIC_UNSWAP_LALT_LGUI: +            keymap_config.swap_lalt_lgui = false; +            break; +          case MAGIC_UNSWAP_RALT_RGUI: +            keymap_config.swap_ralt_rgui = false; +            break; +          case MAGIC_UNNO_GUI: +            keymap_config.no_gui = false; +            break; +          case MAGIC_UNSWAP_GRAVE_ESC: +            keymap_config.swap_grave_esc = false; +            break; +          case MAGIC_UNSWAP_BACKSLASH_BACKSPACE: +            keymap_config.swap_backslash_backspace = false; +            break; +          case MAGIC_UNHOST_NKRO: +            keymap_config.nkro = false; +            break; +          case MAGIC_UNSWAP_ALT_GUI: +            keymap_config.swap_lalt_lgui = false; +            keymap_config.swap_ralt_rgui = false; +            break; +          case MAGIC_TOGGLE_NKRO: +            keymap_config.nkro = !keymap_config.nkro; +            break; +          default: +            break;          }          eeconfig_update_keymap(keymap_config.raw); +        clear_keyboard(); // clear to prevent stuck keys +          return false;        }        break;      case KC_LSPO: {        if (record->event.pressed) {          shift_interrupted[0] = false; +        scs_timer = timer_read ();          register_mods(MOD_BIT(KC_LSFT));        }        else { @@ -264,19 +298,20 @@ bool process_record_quantum(keyrecord_t *record) {              shift_interrupted[1] = true;            }          #endif -        if (!shift_interrupted[0]) { +        if (!shift_interrupted[0] && timer_elapsed(scs_timer) < TAPPING_TERM) {            register_code(LSPO_KEY);            unregister_code(LSPO_KEY);          }          unregister_mods(MOD_BIT(KC_LSFT));        }        return false; -      break; +      // break;      }      case KC_RSPC: {        if (record->event.pressed) {          shift_interrupted[1] = false; +        scs_timer = timer_read ();          register_mods(MOD_BIT(KC_RSFT));        }        else { @@ -286,14 +321,14 @@ bool process_record_quantum(keyrecord_t *record) {              shift_interrupted[1] = true;            }          #endif -        if (!shift_interrupted[1]) { +        if (!shift_interrupted[1] && timer_elapsed(scs_timer) < TAPPING_TERM) {            register_code(RSPC_KEY);            unregister_code(RSPC_KEY);          }          unregister_mods(MOD_BIT(KC_RSFT));        }        return false; -      break; +      // break;      }      default: {        shift_interrupted[0] = true; | 
