summaryrefslogtreecommitdiffstats
path: root/quantum/process_keycode
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/process_keycode')
-rw-r--r--quantum/process_keycode/process_combo.c18
-rw-r--r--quantum/process_keycode/process_combo.h1
-rw-r--r--quantum/process_keycode/process_terminal.c6
-rw-r--r--quantum/process_keycode/process_unicode_common.c2
-rw-r--r--quantum/process_keycode/process_unicodemap.c33
-rw-r--r--quantum/process_keycode/process_unicodemap.h4
6 files changed, 35 insertions, 29 deletions
diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c
index 6e9c28e4f..13f8bbb33 100644
--- a/quantum/process_keycode/process_combo.c
+++ b/quantum/process_keycode/process_combo.c
@@ -18,9 +18,6 @@
#include "print.h"
-#define COMBO_TIMER_ELAPSED -1
-
-
__attribute__ ((weak))
combo_t key_combos[COMBO_COUNT] = {
@@ -65,7 +62,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
if (-1 == (int8_t)index) return false;
/* The combos timer is used to signal whether the combo is active */
- bool is_combo_active = COMBO_TIMER_ELAPSED == combo->timer ? false : true;
+ bool is_combo_active = combo->is_active;
if (record->event.pressed) {
KEY_STATE_DOWN(index);
@@ -73,9 +70,10 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
if (is_combo_active) {
if (ALL_COMBO_KEYS_ARE_DOWN) { /* Combo was pressed */
send_combo(combo->keycode, true);
- combo->timer = COMBO_TIMER_ELAPSED;
+ combo->is_active = false;
} else { /* Combo key was pressed */
combo->timer = timer_read();
+ combo->is_active = true;
#ifdef COMBO_ALLOW_ACTION_KEYS
combo->prev_record = *record;
#else
@@ -99,6 +97,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
send_keyboard_report();
unregister_code16(keycode);
#endif
+ combo->is_active = false;
combo->timer = 0;
}
@@ -106,6 +105,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
}
if (NO_COMBO_KEYS_ARE_DOWN) {
+ combo->is_active = true;
combo->timer = 0;
}
@@ -132,14 +132,14 @@ void matrix_scan_combo(void)
#pragma GCC diagnostic ignored "-Warray-bounds"
combo_t *combo = &key_combos[i];
#pragma GCC diagnostic pop
- if (combo->timer &&
- combo->timer != COMBO_TIMER_ELAPSED &&
+ if (combo->is_active &&
+ combo->timer &&
timer_elapsed(combo->timer) > COMBO_TERM) {
-
+
/* This disables the combo, meaning key events for this
* combo will be handled by the next processors in the chain
*/
- combo->timer = COMBO_TIMER_ELAPSED;
+ combo->is_active = false;
#ifdef COMBO_ALLOW_ACTION_KEYS
process_action(&combo->prev_record,
diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h
index a5dbd788a..a5787c9ed 100644
--- a/quantum/process_keycode/process_combo.h
+++ b/quantum/process_keycode/process_combo.h
@@ -33,6 +33,7 @@ typedef struct
uint8_t state;
#endif
uint16_t timer;
+ bool is_active;
#ifdef COMBO_ALLOW_ACTION_KEYS
keyrecord_t prev_record;
#else
diff --git a/quantum/process_keycode/process_terminal.c b/quantum/process_keycode/process_terminal.c
index 6998639f2..e791deffc 100644
--- a/quantum/process_keycode/process_terminal.c
+++ b/quantum/process_keycode/process_terminal.c
@@ -273,11 +273,17 @@ bool process_terminal(uint16_t keycode, keyrecord_t *record) {
disable_terminal();
return false;
}
+
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
+ keycode = keycode & 0xFF;
+ }
+
if (keycode < 256) {
uint8_t str_len;
char char_to_add;
switch (keycode) {
case KC_ENTER:
+ case KC_KP_ENTER:
push_to_cmd_buffer();
current_cmd_buffer_pos = 0;
process_terminal_command();
diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c
index 3286f45b5..b64feb700 100644
--- a/quantum/process_keycode/process_unicode_common.c
+++ b/quantum/process_keycode/process_unicode_common.c
@@ -216,7 +216,7 @@ bool process_unicode_common(uint16_t keycode, keyrecord_t *record) {
#if defined(UNICODE_ENABLE)
return process_unicode(keycode, record);
#elif defined(UNICODEMAP_ENABLE)
- return process_unicode_map(keycode, record);
+ return process_unicodemap(keycode, record);
#elif defined(UCIS_ENABLE)
return process_ucis(keycode, record);
#else
diff --git a/quantum/process_keycode/process_unicodemap.c b/quantum/process_keycode/process_unicodemap.c
index 75f35112b..cee9acb5f 100644
--- a/quantum/process_keycode/process_unicodemap.c
+++ b/quantum/process_keycode/process_unicodemap.c
@@ -18,8 +18,7 @@
#include "process_unicode_common.h"
__attribute__((weak))
-const uint32_t PROGMEM unicode_map[] = {
-};
+const uint32_t PROGMEM unicode_map[] = {};
void register_hex32(uint32_t hex) {
bool onzerostart = true;
@@ -42,26 +41,26 @@ void register_hex32(uint32_t hex) {
}
__attribute__((weak))
-void unicode_map_input_error() {}
+void unicodemap_input_error() {}
-bool process_unicode_map(uint16_t keycode, keyrecord_t *record) {
- uint8_t input_mode = get_unicode_input_mode();
- if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) {
- const uint32_t* map = unicode_map;
- uint16_t index = keycode - QK_UNICODE_MAP;
- uint32_t code = pgm_read_dword(&map[index]);
- if (code > 0xFFFF && code <= 0x10ffff && input_mode == UC_OSX) {
+bool process_unicodemap(uint16_t keycode, keyrecord_t *record) {
+ if ((keycode & QK_UNICODEMAP) == QK_UNICODEMAP && record->event.pressed) {
+ uint16_t index = keycode - QK_UNICODEMAP;
+ uint32_t code = pgm_read_dword(unicode_map + index);
+ uint8_t input_mode = get_unicode_input_mode();
+
+ if (code > 0xFFFF && code <= 0x10FFFF && input_mode == UC_OSX) {
// Convert to UTF-16 surrogate pair
code -= 0x10000;
- uint32_t lo = code & 0x3ff;
- uint32_t hi = (code & 0xffc00) >> 10;
+ uint32_t lo = code & 0x3FF, hi = (code & 0xFFC00) >> 10;
+
unicode_input_start();
- register_hex32(hi + 0xd800);
- register_hex32(lo + 0xdc00);
+ register_hex32(hi + 0xD800);
+ register_hex32(lo + 0xDC00);
unicode_input_finish();
- } else if ((code > 0x10ffff && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) {
- // when character is out of range supported by the OS
- unicode_map_input_error();
+ } else if ((code > 0x10FFFF && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) {
+ // Character is out of range supported by the OS
+ unicodemap_input_error();
} else {
unicode_input_start();
register_hex32(code);
diff --git a/quantum/process_keycode/process_unicodemap.h b/quantum/process_keycode/process_unicodemap.h
index f6d64bb86..5764697f8 100644
--- a/quantum/process_keycode/process_unicodemap.h
+++ b/quantum/process_keycode/process_unicodemap.h
@@ -19,5 +19,5 @@
#include "quantum.h"
#include "process_unicode_common.h"
-void unicode_map_input_error(void);
-bool process_unicode_map(uint16_t keycode, keyrecord_t *record);
+void unicodemap_input_error(void);
+bool process_unicodemap(uint16_t keycode, keyrecord_t *record);