diff options
author | Marcus van Houdt <mjvh80@gmail.com> | 2021-09-22 00:23:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-21 15:23:49 -0700 |
commit | 8b6c16ea1f5fa982f32560eade897dcf856fbbbd (patch) | |
tree | 23d15f1eb228d21d0deb93bacb0dd07a6e3cb3b1 /quantum/process_keycode | |
parent | 3583943c690ecf75e3f51434708fae4b90a2f528 (diff) | |
download | qmk_firmware-8b6c16ea1f5fa982f32560eade897dcf856fbbbd.tar.gz qmk_firmware-8b6c16ea1f5fa982f32560eade897dcf856fbbbd.zip |
Add ability to use numpad digits for unicode mode UC_WIN (#14496)
Co-authored-by: Konstantin Đorđević <vomindoraan@gmail.com>
Diffstat (limited to 'quantum/process_keycode')
-rw-r--r-- | quantum/process_keycode/process_unicode_common.c | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c index 46fcaaa86..7853c22c5 100644 --- a/quantum/process_keycode/process_unicode_common.c +++ b/quantum/process_keycode/process_unicode_common.c | |||
@@ -22,6 +22,7 @@ | |||
22 | unicode_config_t unicode_config; | 22 | unicode_config_t unicode_config; |
23 | uint8_t unicode_saved_mods; | 23 | uint8_t unicode_saved_mods; |
24 | bool unicode_saved_caps_lock; | 24 | bool unicode_saved_caps_lock; |
25 | bool unicode_saved_num_lock; | ||
25 | 26 | ||
26 | #if UNICODE_SELECTED_MODES != -1 | 27 | #if UNICODE_SELECTED_MODES != -1 |
27 | static uint8_t selected[] = {UNICODE_SELECTED_MODES}; | 28 | static uint8_t selected[] = {UNICODE_SELECTED_MODES}; |
@@ -79,13 +80,14 @@ void persist_unicode_input_mode(void) { eeprom_update_byte(EECONFIG_UNICODEMODE, | |||
79 | 80 | ||
80 | __attribute__((weak)) void unicode_input_start(void) { | 81 | __attribute__((weak)) void unicode_input_start(void) { |
81 | unicode_saved_caps_lock = host_keyboard_led_state().caps_lock; | 82 | unicode_saved_caps_lock = host_keyboard_led_state().caps_lock; |
83 | unicode_saved_num_lock = host_keyboard_led_state().num_lock; | ||
82 | 84 | ||
83 | // Note the order matters here! | 85 | // Note the order matters here! |
84 | // Need to do this before we mess around with the mods, or else | 86 | // Need to do this before we mess around with the mods, or else |
85 | // UNICODE_KEY_LNX (which is usually Ctrl-Shift-U) might not work | 87 | // UNICODE_KEY_LNX (which is usually Ctrl-Shift-U) might not work |
86 | // correctly in the shifted case. | 88 | // correctly in the shifted case. |
87 | if (unicode_config.input_mode == UC_LNX && unicode_saved_caps_lock) { | 89 | if (unicode_config.input_mode == UC_LNX && unicode_saved_caps_lock) { |
88 | tap_code(KC_CAPS); | 90 | tap_code(KC_CAPSLOCK); |
89 | } | 91 | } |
90 | 92 | ||
91 | unicode_saved_mods = get_mods(); // Save current mods | 93 | unicode_saved_mods = get_mods(); // Save current mods |
@@ -99,8 +101,12 @@ __attribute__((weak)) void unicode_input_start(void) { | |||
99 | tap_code16(UNICODE_KEY_LNX); | 101 | tap_code16(UNICODE_KEY_LNX); |
100 | break; | 102 | break; |
101 | case UC_WIN: | 103 | case UC_WIN: |
104 | // For increased reliability, use numpad keys for inputting digits | ||
105 | if (!unicode_saved_num_lock) { | ||
106 | tap_code(KC_NUMLOCK); | ||
107 | } | ||
102 | register_code(KC_LALT); | 108 | register_code(KC_LALT); |
103 | tap_code(KC_PPLS); | 109 | tap_code(KC_KP_PLUS); |
104 | break; | 110 | break; |
105 | case UC_WINC: | 111 | case UC_WINC: |
106 | tap_code(UNICODE_KEY_WINC); | 112 | tap_code(UNICODE_KEY_WINC); |
@@ -117,13 +123,16 @@ __attribute__((weak)) void unicode_input_finish(void) { | |||
117 | unregister_code(UNICODE_KEY_MAC); | 123 | unregister_code(UNICODE_KEY_MAC); |
118 | break; | 124 | break; |
119 | case UC_LNX: | 125 | case UC_LNX: |
120 | tap_code(KC_SPC); | 126 | tap_code(KC_SPACE); |
121 | if (unicode_saved_caps_lock) { | 127 | if (unicode_saved_caps_lock) { |
122 | tap_code(KC_CAPS); | 128 | tap_code(KC_CAPSLOCK); |
123 | } | 129 | } |
124 | break; | 130 | break; |
125 | case UC_WIN: | 131 | case UC_WIN: |
126 | unregister_code(KC_LALT); | 132 | unregister_code(KC_LALT); |
133 | if (!unicode_saved_num_lock) { | ||
134 | tap_code(KC_NUMLOCK); | ||
135 | } | ||
127 | break; | 136 | break; |
128 | case UC_WINC: | 137 | case UC_WINC: |
129 | tap_code(KC_ENTER); | 138 | tap_code(KC_ENTER); |
@@ -139,26 +148,44 @@ __attribute__((weak)) void unicode_input_cancel(void) { | |||
139 | unregister_code(UNICODE_KEY_MAC); | 148 | unregister_code(UNICODE_KEY_MAC); |
140 | break; | 149 | break; |
141 | case UC_LNX: | 150 | case UC_LNX: |
142 | tap_code(KC_ESC); | 151 | tap_code(KC_ESCAPE); |
143 | if (unicode_saved_caps_lock) { | 152 | if (unicode_saved_caps_lock) { |
144 | tap_code(KC_CAPS); | 153 | tap_code(KC_CAPSLOCK); |
145 | } | 154 | } |
146 | break; | 155 | break; |
147 | case UC_WINC: | 156 | case UC_WINC: |
148 | tap_code(KC_ESC); | 157 | tap_code(KC_ESCAPE); |
149 | break; | 158 | break; |
150 | case UC_WIN: | 159 | case UC_WIN: |
151 | unregister_code(KC_LALT); | 160 | unregister_code(KC_LALT); |
161 | if (!unicode_saved_num_lock) { | ||
162 | tap_code(KC_NUMLOCK); | ||
163 | } | ||
152 | break; | 164 | break; |
153 | } | 165 | } |
154 | 166 | ||
155 | set_mods(unicode_saved_mods); // Reregister previously set mods | 167 | set_mods(unicode_saved_mods); // Reregister previously set mods |
156 | } | 168 | } |
157 | 169 | ||
170 | // clang-format off | ||
171 | |||
172 | static void send_nibble_wrapper(uint8_t digit) { | ||
173 | if (unicode_config.input_mode == UC_WIN) { | ||
174 | uint8_t kc = digit < 10 | ||
175 | ? KC_KP_1 + (10 + digit - 1) % 10 | ||
176 | : KC_A + (digit - 10); | ||
177 | tap_code(kc); | ||
178 | return; | ||
179 | } | ||
180 | send_nibble(digit); | ||
181 | } | ||
182 | |||
183 | // clang-format on | ||
184 | |||
158 | void register_hex(uint16_t hex) { | 185 | void register_hex(uint16_t hex) { |
159 | for (int i = 3; i >= 0; i--) { | 186 | for (int i = 3; i >= 0; i--) { |
160 | uint8_t digit = ((hex >> (i * 4)) & 0xF); | 187 | uint8_t digit = ((hex >> (i * 4)) & 0xF); |
161 | send_nibble(digit); | 188 | send_nibble_wrapper(digit); |
162 | } | 189 | } |
163 | } | 190 | } |
164 | 191 | ||
@@ -171,10 +198,10 @@ void register_hex32(uint32_t hex) { | |||
171 | uint8_t digit = ((hex >> (i * 4)) & 0xF); | 198 | uint8_t digit = ((hex >> (i * 4)) & 0xF); |
172 | if (digit == 0) { | 199 | if (digit == 0) { |
173 | if (!onzerostart) { | 200 | if (!onzerostart) { |
174 | send_nibble(digit); | 201 | send_nibble_wrapper(digit); |
175 | } | 202 | } |
176 | } else { | 203 | } else { |
177 | send_nibble(digit); | 204 | send_nibble_wrapper(digit); |
178 | onzerostart = false; | 205 | onzerostart = false; |
179 | } | 206 | } |
180 | } | 207 | } |