diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c index c270d5119ac..e8f5001380c 100644 --- a/quantum/process_keycode/process_unicode_common.c +++ b/quantum/process_keycode/process_unicode_common.c @@ -22,6 +22,7 @@ unicode_config_t unicode_config; static uint8_t saved_mods; + void set_unicode_input_mode(uint8_t os_target) { unicode_config.input_mode = os_target; eeprom_update_byte(EECONFIG_UNICODEMODE, os_target); @@ -36,7 +37,7 @@ void unicode_input_mode_init(void) { } __attribute__((weak)) -void unicode_input_start (void) { +void unicode_input_start(void) { saved_mods = get_mods(); // Save current mods clear_mods(); // Unregister mods to start from a clean state @@ -131,3 +132,35 @@ void send_unicode_hex_string(const char *str) { str += n; // Move to the first ' ' (or '\0') after the current token } } + +bool process_record_unicode_common(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch (keycode) { + case UNI_OSX: + set_unicode_input_mode(UC_OSX); + break; + case UNI_LINUX: + set_unicode_input_mode(UC_LNX); + break; + case UNI_WIN: + set_unicode_input_mode(UC_WIN); + break; + case UNI_WINC: + set_unicode_input_mode(UC_WINC); + break; + case UNI_OSX_RALT: + set_unicode_input_mode(UC_OSX_RALT); + break; + } + } + #ifdef UNICODE_ENABLE + return process_unicode(keycode, record); + #endif + #ifdef UCIS_ENABLE + return process_ucis(keycode, record); + #endif + #ifdef UNICODEMAP_ENABLE + return process_unicode_map(keycode, record); + #endif + return true; +} diff --git a/quantum/process_keycode/process_unicode_common.h b/quantum/process_keycode/process_unicode_common.h index 7f896461b6a..b1fc8c0ac83 100644 --- a/quantum/process_keycode/process_unicode_common.h +++ b/quantum/process_keycode/process_unicode_common.h @@ -38,6 +38,7 @@ void unicode_input_start(void); void unicode_input_finish(void); void register_hex(uint16_t hex); void send_unicode_hex_string(const char *str); +bool process_record_unicode_common(uint16_t keycode, keyrecord_t *record); #define UC_OSX 0 // Mac OS X #define UC_LNX 1 // Linux diff --git a/quantum/quantum.c b/quantum/quantum.c index 3770b0312b5..4267c1e0361 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -256,27 +256,21 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef TAP_DANCE_ENABLE process_tap_dance(keycode, record) && #endif + #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) + process_record_unicode_common(keycode, record) && + #endif #ifdef LEADER_ENABLE process_leader(keycode, record) && #endif #ifdef COMBO_ENABLE process_combo(keycode, record) && #endif - #ifdef UNICODE_ENABLE - process_unicode(keycode, record) && - #endif - #ifdef UCIS_ENABLE - process_ucis(keycode, record) && - #endif #ifdef PRINTING_ENABLE process_printer(keycode, record) && #endif #ifdef AUTO_SHIFT_ENABLE process_auto_shift(keycode, record) && #endif - #ifdef UNICODEMAP_ENABLE - process_unicode_map(keycode, record) && - #endif #ifdef TERMINAL_ENABLE process_terminal(keycode, record) && #endif diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index e983798f2ba..6a3a6461bdc 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -453,7 +453,11 @@ enum quantum_keycodes { TERM_ON, TERM_OFF, #endif - + UNI_OSX, + UNI_LINUX, + UNI_WIN, + UNI_WINC, + UNI_OSX_RALT, // always leave at the end SAFE_RANGE };