diff options
author | Jack Humbert <jack.humb@gmail.com> | 2016-05-18 23:47:16 -0400 |
---|---|---|
committer | Jack Humbert <jack.humb@gmail.com> | 2016-05-18 23:47:16 -0400 |
commit | b732b79b49b098dba8e14493c745075f336747d8 (patch) | |
tree | 069f529df73ba8bfbcf7003f5ddd3987ecaadc57 /quantum/keymap_common.c | |
parent | bf545061f2a71b054ccdca6f6261bb7c2ffa4957 (diff) | |
download | qmk_firmware-b732b79b49b098dba8e14493c745075f336747d8.tar.gz qmk_firmware-b732b79b49b098dba8e14493c745075f336747d8.zip |
adapts unicode to quantum.c (#333)
* Unicode
to have unicode input you need to:
- set your OS input method to UNICODE if needed
- enable unicode in your makefile
- copy the action_function from
keyboard/planck/keymaps/unicode/unicode.c to your keymap.c
set the target OS method in your keymap.c: void matrix_init_user() {
set_unicode_mode(UC_OSX); } you can then switch when you want with:
set_unicode_mode(UC_OSX); set_unicode_mode(UC_LNX);
set_unicode_mode(UC_WIN);
put some unicode codes in your keymap like so: UC(0x0061)
I did change the bit mask in quantum/keymap_common.c and .h
I’m afraid we will need uint32 to get a total support for all unicode
tables or relocate the handler as @mbarkhau did.
* rearranges keycode values, hooks-up unicode
* removes extra lalt ref
* adds unicode shortcuts and example
Diffstat (limited to 'quantum/keymap_common.c')
-rw-r--r-- | quantum/keymap_common.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 2aae13e67..1d9ab2e05 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c | |||
@@ -31,7 +31,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
31 | #include "keymap_midi.h" | 31 | #include "keymap_midi.h" |
32 | #endif | 32 | #endif |
33 | 33 | ||
34 | |||
35 | extern keymap_config_t keymap_config; | 34 | extern keymap_config_t keymap_config; |
36 | 35 | ||
37 | #include <stdio.h> | 36 | #include <stdio.h> |
@@ -154,20 +153,22 @@ static action_t keycode_to_action(uint16_t keycode) | |||
154 | case KC_TRNS: | 153 | case KC_TRNS: |
155 | action.code = ACTION_TRANSPARENT; | 154 | action.code = ACTION_TRANSPARENT; |
156 | break; | 155 | break; |
157 | case 0x0100 ... 0x1FFF: ; | 156 | case LCTL(0) ... 0x1FFF: ; |
158 | // Has a modifier | 157 | // Has a modifier |
159 | // Split it up | 158 | // Split it up |
160 | action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key | 159 | action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key |
161 | break; | 160 | break; |
162 | case 0x2000 ... 0x2FFF: | 161 | case FUNC(0) ... FUNC(0xFFF): ; |
163 | // Is a shortcut for function layer, pull last 12bits | 162 | // Is a shortcut for function layer, pull last 12bits |
164 | // This means we have 4,096 FN macros at our disposal | 163 | // This means we have 4,096 FN macros at our disposal |
165 | return keymap_func_to_action(keycode & 0xFFF); | 164 | return keymap_func_to_action(keycode & 0xFFF); |
166 | break; | 165 | break; |
167 | case 0x3000 ... 0x3FFF: ; | 166 | case M(0) ... M(0xFF): |
168 | // When the code starts with 3, it's an action macro. | ||
169 | action.code = ACTION_MACRO(keycode & 0xFF); | 167 | action.code = ACTION_MACRO(keycode & 0xFF); |
170 | break; | 168 | break; |
169 | case LT(0, 0) ... LT(0xFF, 0xF): | ||
170 | action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); | ||
171 | break; | ||
171 | #ifdef BACKLIGHT_ENABLE | 172 | #ifdef BACKLIGHT_ENABLE |
172 | case BL_0 ... BL_15: | 173 | case BL_0 ... BL_15: |
173 | action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F); | 174 | action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F); |
@@ -201,7 +202,7 @@ static action_t keycode_to_action(uint16_t keycode) | |||
201 | print("\nDEBUG: enabled.\n"); | 202 | print("\nDEBUG: enabled.\n"); |
202 | debug_enable = true; | 203 | debug_enable = true; |
203 | break; | 204 | break; |
204 | case 0x5002 ... 0x50FF: | 205 | case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI: |
205 | // MAGIC actions (BOOTMAGIC without the boot) | 206 | // MAGIC actions (BOOTMAGIC without the boot) |
206 | if (!eeconfig_is_enabled()) { | 207 | if (!eeconfig_is_enabled()) { |
207 | eeconfig_init(); | 208 | eeconfig_init(); |
@@ -251,7 +252,7 @@ static action_t keycode_to_action(uint16_t keycode) | |||
251 | } | 252 | } |
252 | eeconfig_update_keymap(keymap_config.raw); | 253 | eeconfig_update_keymap(keymap_config.raw); |
253 | break; | 254 | break; |
254 | case 0x5100 ... 0x56FF: ; | 255 | case TO(0, 1) ... OSM(0xFF): ; |
255 | // Layer movement shortcuts | 256 | // Layer movement shortcuts |
256 | // See .h to see constraints/usage | 257 | // See .h to see constraints/usage |
257 | int type = (keycode >> 0x8) & 0xF; | 258 | int type = (keycode >> 0x8) & 0xF; |
@@ -282,18 +283,9 @@ static action_t keycode_to_action(uint16_t keycode) | |||
282 | action.code = ACTION_MODS_ONESHOT(mod); | 283 | action.code = ACTION_MODS_ONESHOT(mod); |
283 | } | 284 | } |
284 | break; | 285 | break; |
285 | case 0x7000 ... 0x7FFF: | 286 | case MT(0, 0) ... MT(0xF, 0xFF): |
286 | action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); | 287 | action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); |
287 | break; | 288 | break; |
288 | case 0x8000 ... 0x8FFF: | ||
289 | action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); | ||
290 | break; | ||
291 | #ifdef UNICODE_ENABLE | ||
292 | case 0x8000000 ... 0x8FFFFFF: | ||
293 | uint16_t unicode = keycode & ~(0x8000); | ||
294 | action.code = ACTION_FUNCTION_OPT(unicode & 0xFF, (unicode & 0xFF00) >> 8); | ||
295 | break; | ||
296 | #endif | ||
297 | default: | 289 | default: |
298 | action.code = ACTION_NO; | 290 | action.code = ACTION_NO; |
299 | break; | 291 | break; |