aboutsummaryrefslogtreecommitdiffstats
path: root/quantum/quantum.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c125
1 files changed, 80 insertions, 45 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index e3a20f43e..b5e2d60b9 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;