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; |
