diff options
author | Priyadi Iman Nurcahyo <priyadi@priyadi.net> | 2017-02-10 06:06:59 +0700 |
---|---|---|
committer | Priyadi Iman Nurcahyo <priyadi@priyadi.net> | 2017-02-10 06:06:59 +0700 |
commit | 97816df7e7aa8710c8a0837b2abe008e0c765f2a (patch) | |
tree | f88ee582281953ce87cfe5a69ca8b8e4c98e90c2 | |
parent | 0a9fda968da521e373564895d6ea6774cd1480d9 (diff) | |
download | qmk_firmware-97816df7e7aa8710c8a0837b2abe008e0c765f2a.tar.gz qmk_firmware-97816df7e7aa8710c8a0837b2abe008e0c765f2a.zip |
Implement tap mod dual role for right side mods.
-rw-r--r-- | quantum/keymap_common.c | 2 | ||||
-rw-r--r-- | quantum/process_keycode/process_unicode.c | 2 | ||||
-rw-r--r-- | quantum/quantum_keycodes.h | 28 |
3 files changed, 23 insertions, 9 deletions
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 5190f24e8..54b872d49 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c | |||
@@ -120,7 +120,7 @@ action_t action_for_key(uint8_t layer, keypos_t key) | |||
120 | action.code = ACTION_MODS_ONESHOT(mod); | 120 | action.code = ACTION_MODS_ONESHOT(mod); |
121 | break; | 121 | break; |
122 | case QK_MOD_TAP ... QK_MOD_TAP_MAX: | 122 | case QK_MOD_TAP ... QK_MOD_TAP_MAX: |
123 | action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); | 123 | action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0x1F, keycode & 0xFF); |
124 | break; | 124 | break; |
125 | #ifdef BACKLIGHT_ENABLE | 125 | #ifdef BACKLIGHT_ENABLE |
126 | case BL_0 ... BL_15: | 126 | case BL_0 ... BL_15: |
diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index 9995ba9bd..9d01a592d 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c | |||
@@ -139,7 +139,7 @@ void unicode_map_input_error() {} | |||
139 | bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { | 139 | bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { |
140 | if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { | 140 | if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { |
141 | const uint32_t* map = unicode_map; | 141 | const uint32_t* map = unicode_map; |
142 | uint16_t index = keycode & 0x7FF; | 142 | uint16_t index = keycode - QK_UNICODE_MAP; |
143 | uint32_t code = pgm_read_dword_far(&map[index]); | 143 | uint32_t code = pgm_read_dword_far(&map[index]); |
144 | if (code > 0xFFFF && code <= 0x10ffff && input_mode == UC_OSX) { | 144 | if (code > 0xFFFF && code <= 0x10ffff && input_mode == UC_OSX) { |
145 | // Convert to UTF-16 surrogate pair | 145 | // Convert to UTF-16 surrogate pair |
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 8a78a58c9..e562c9a18 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h | |||
@@ -39,14 +39,14 @@ enum quantum_keycodes { | |||
39 | QK_CHORDING = 0x5600, | 39 | QK_CHORDING = 0x5600, |
40 | QK_CHORDING_MAX = 0x56FF, | 40 | QK_CHORDING_MAX = 0x56FF, |
41 | #endif | 41 | #endif |
42 | QK_MOD_TAP = 0x6000, | 42 | QK_TAP_DANCE = 0x5700, |
43 | QK_MOD_TAP_MAX = 0x6FFF, | 43 | QK_TAP_DANCE_MAX = 0x57FF, |
44 | QK_TAP_DANCE = 0x7100, | ||
45 | QK_TAP_DANCE_MAX = 0x71FF, | ||
46 | #ifdef UNICODEMAP_ENABLE | 44 | #ifdef UNICODEMAP_ENABLE |
47 | QK_UNICODE_MAP = 0x7800, | 45 | QK_UNICODE_MAP = 0x5800, |
48 | QK_UNICODE_MAP_MAX = 0x7FFF, | 46 | QK_UNICODE_MAP_MAX = 0x5FFF, |
49 | #endif | 47 | #endif |
48 | QK_MOD_TAP = 0x6000, | ||
49 | QK_MOD_TAP_MAX = 0x7FFF, | ||
50 | #ifdef UNICODE_ENABLE | 50 | #ifdef UNICODE_ENABLE |
51 | QK_UNICODE = 0x8000, | 51 | QK_UNICODE = 0x8000, |
52 | QK_UNICODE_MAX = 0xFFFF, | 52 | QK_UNICODE_MAX = 0xFFFF, |
@@ -298,15 +298,29 @@ enum quantum_keycodes { | |||
298 | #define OSM(mod) (mod | QK_ONE_SHOT_MOD) | 298 | #define OSM(mod) (mod | QK_ONE_SHOT_MOD) |
299 | 299 | ||
300 | // M-od, T-ap - 256 keycode max | 300 | // M-od, T-ap - 256 keycode max |
301 | #define MT(mod, kc) (kc | QK_MOD_TAP | ((mod & 0xF) << 8)) | 301 | #define MT(mod, kc) (kc | QK_MOD_TAP | ((mod & 0x1F) << 8)) |
302 | |||
302 | #define CTL_T(kc) MT(MOD_LCTL, kc) | 303 | #define CTL_T(kc) MT(MOD_LCTL, kc) |
304 | #define LCTL_T(kc) MT(MOD_LCTL, kc) | ||
305 | #define RCTL_T(kc) MT(MOD_RCTL, kc) | ||
306 | |||
303 | #define SFT_T(kc) MT(MOD_LSFT, kc) | 307 | #define SFT_T(kc) MT(MOD_LSFT, kc) |
308 | #define LSFT_T(kc) MT(MOD_LSFT, kc) | ||
309 | #define RSFT_T(kc) MT(MOD_RSFT, kc) | ||
310 | |||
304 | #define ALT_T(kc) MT(MOD_LALT, kc) | 311 | #define ALT_T(kc) MT(MOD_LALT, kc) |
312 | #define LALT_T(kc) MT(MOD_LALT, kc) | ||
313 | #define RALT_T(kc) MT(MOD_RALT, kc) | ||
305 | #define ALGR_T(kc) MT(MOD_RALT, kc) // dual-function AltGR | 314 | #define ALGR_T(kc) MT(MOD_RALT, kc) // dual-function AltGR |
315 | |||
306 | #define GUI_T(kc) MT(MOD_LGUI, kc) | 316 | #define GUI_T(kc) MT(MOD_LGUI, kc) |
317 | #define LGUI_T(kc) MT(MOD_LGUI, kc) | ||
318 | #define RGUI_T(kc) MT(MOD_RGUI, kc) | ||
319 | |||
307 | #define C_S_T(kc) MT((MOD_LCTL | MOD_LSFT), kc) // Control + Shift e.g. for gnome-terminal | 320 | #define C_S_T(kc) MT((MOD_LCTL | MOD_LSFT), kc) // Control + Shift e.g. for gnome-terminal |
308 | #define MEH_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT), kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl | 321 | #define MEH_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT), kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl |
309 | #define LCAG_T(kc) MT((MOD_LCTL | MOD_LALT | MOD_LGUI), kc) // Left control alt and gui | 322 | #define LCAG_T(kc) MT((MOD_LCTL | MOD_LALT | MOD_LGUI), kc) // Left control alt and gui |
323 | #define RCAG_T(kc) MT((MOD_RCTL | MOD_RALT | MOD_RGUI), kc) // Right control alt and gui | ||
310 | #define ALL_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI), kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ | 324 | #define ALL_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI), kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ |
311 | #define SCMD_T(kc) MT((MOD_LGUI | MOD_LSFT), kc) | 325 | #define SCMD_T(kc) MT((MOD_LGUI | MOD_LSFT), kc) |
312 | #define SWIN_T(kc) SCMD_T(kc) | 326 | #define SWIN_T(kc) SCMD_T(kc) |