diff options
| author | Stephen Wanhella <Stephen.wanhella@gmail.com> | 2019-08-21 17:07:08 -0700 |
|---|---|---|
| committer | Drashna Jaelre <drashna@live.com> | 2019-08-21 17:07:08 -0700 |
| commit | d534c72a544454132b3c6c05af85c821f6a93d65 (patch) | |
| tree | 906a66b899e4de1d7ffe567bbdb2c9082d948140 /quantum | |
| parent | 6a79b05cf02d5a6f07b17474344e272b44c77988 (diff) | |
| download | qmk_firmware-d534c72a544454132b3c6c05af85c821f6a93d65.tar.gz qmk_firmware-d534c72a544454132b3c6c05af85c821f6a93d65.zip | |
Added keycodes for swapping and unswapping the Control and OS keys (#6110)
* Add MAGIC_SWAP_CONTROL_LGUI and MAGIC_UNSWAP_CONTROL_LGUI keycodes
Key codes to swap and unswap the control and windows/cmd keys
* Fix issues with pull request #6110
Renamed swap/unswap lctl and lgui key codes, added key codes to swap/unswap rctl and rgui, and moved new bool inside keycode_config.h struct to the end
* Move new keycodes to the end of the enum (#6110)
* add cases for swapped control and OS keys to mod_config (#6110)
* Add new keycodes to feature_bootmagic.md (#6110)
* Add R+L swap codes to keep in parity with AG_* codes
* Extend Magic range check to include new magic codes
* Update audio docs
* Combine 2 byte ranges into 1 word for EECONFG
Fix names for Keymap config EEPROM
* Update docs/feature_bootmagic.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update docs/feature_bootmagic.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update docs/feature_bootmagic.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update docs/feature_bootmagic.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
Diffstat (limited to 'quantum')
| -rw-r--r-- | quantum/keycode_config.c | 38 | ||||
| -rw-r--r-- | quantum/keycode_config.h | 2 | ||||
| -rw-r--r-- | quantum/quantum.c | 48 | ||||
| -rw-r--r-- | quantum/quantum_keycodes.h | 13 |
4 files changed, 100 insertions, 1 deletions
diff --git a/quantum/keycode_config.c b/quantum/keycode_config.c index 0dc5105d2..73fe15861 100644 --- a/quantum/keycode_config.c +++ b/quantum/keycode_config.c | |||
| @@ -31,6 +31,12 @@ uint16_t keycode_config(uint16_t keycode) { | |||
| 31 | if (keymap_config.swap_control_capslock) { | 31 | if (keymap_config.swap_control_capslock) { |
| 32 | return KC_CAPSLOCK; | 32 | return KC_CAPSLOCK; |
| 33 | } | 33 | } |
| 34 | if (keymap_config.swap_lctl_lgui) { | ||
| 35 | if (keymap_config.no_gui) { | ||
| 36 | return KC_NO; | ||
| 37 | } | ||
| 38 | return KC_LGUI; | ||
| 39 | } | ||
| 34 | return KC_LCTL; | 40 | return KC_LCTL; |
| 35 | case KC_LALT: | 41 | case KC_LALT: |
| 36 | if (keymap_config.swap_lalt_lgui) { | 42 | if (keymap_config.swap_lalt_lgui) { |
| @@ -44,10 +50,21 @@ uint16_t keycode_config(uint16_t keycode) { | |||
| 44 | if (keymap_config.swap_lalt_lgui) { | 50 | if (keymap_config.swap_lalt_lgui) { |
| 45 | return KC_LALT; | 51 | return KC_LALT; |
| 46 | } | 52 | } |
| 53 | if (keymap_config.swap_lctl_lgui) { | ||
| 54 | return KC_LCTRL; | ||
| 55 | } | ||
| 47 | if (keymap_config.no_gui) { | 56 | if (keymap_config.no_gui) { |
| 48 | return KC_NO; | 57 | return KC_NO; |
| 49 | } | 58 | } |
| 50 | return KC_LGUI; | 59 | return KC_LGUI; |
| 60 | case KC_RCTL: | ||
| 61 | if (keymap_config.swap_rctl_rgui) { | ||
| 62 | if (keymap_config.no_gui) { | ||
| 63 | return KC_NO; | ||
| 64 | } | ||
| 65 | return KC_RGUI; | ||
| 66 | } | ||
| 67 | return KC_RCTL; | ||
| 51 | case KC_RALT: | 68 | case KC_RALT: |
| 52 | if (keymap_config.swap_ralt_rgui) { | 69 | if (keymap_config.swap_ralt_rgui) { |
| 53 | if (keymap_config.no_gui) { | 70 | if (keymap_config.no_gui) { |
| @@ -60,6 +77,9 @@ uint16_t keycode_config(uint16_t keycode) { | |||
| 60 | if (keymap_config.swap_ralt_rgui) { | 77 | if (keymap_config.swap_ralt_rgui) { |
| 61 | return KC_RALT; | 78 | return KC_RALT; |
| 62 | } | 79 | } |
| 80 | if (keymap_config.swap_rctl_rgui) { | ||
| 81 | return KC_RCTL; | ||
| 82 | } | ||
| 63 | if (keymap_config.no_gui) { | 83 | if (keymap_config.no_gui) { |
| 64 | return KC_NO; | 84 | return KC_NO; |
| 65 | } | 85 | } |
| @@ -108,6 +128,24 @@ uint8_t mod_config(uint8_t mod) { | |||
| 108 | mod |= MOD_RGUI; | 128 | mod |= MOD_RGUI; |
| 109 | } | 129 | } |
| 110 | } | 130 | } |
| 131 | if (keymap_config.swap_lctl_lgui) { | ||
| 132 | if ((mod & MOD_RGUI) == MOD_LGUI) { | ||
| 133 | mod &= ~MOD_LGUI; | ||
| 134 | mod |= MOD_LCTL; | ||
| 135 | } else if ((mod & MOD_RCTL) == MOD_LCTL) { | ||
| 136 | mod &= ~MOD_LCTL; | ||
| 137 | mod |= MOD_LGUI; | ||
| 138 | } | ||
| 139 | } | ||
| 140 | if (keymap_config.swap_rctl_rgui) { | ||
| 141 | if ((mod & MOD_RGUI) == MOD_RGUI) { | ||
| 142 | mod &= ~MOD_RGUI; | ||
| 143 | mod |= MOD_RCTL; | ||
| 144 | } else if ((mod & MOD_RCTL) == MOD_RCTL) { | ||
| 145 | mod &= ~MOD_RCTL; | ||
| 146 | mod |= MOD_RGUI; | ||
| 147 | } | ||
| 148 | } | ||
| 111 | if (keymap_config.no_gui) { | 149 | if (keymap_config.no_gui) { |
| 112 | mod &= ~MOD_LGUI; | 150 | mod &= ~MOD_LGUI; |
| 113 | mod &= ~MOD_RGUI; | 151 | mod &= ~MOD_RGUI; |
diff --git a/quantum/keycode_config.h b/quantum/keycode_config.h index 022f4bd19..7b01fcea4 100644 --- a/quantum/keycode_config.h +++ b/quantum/keycode_config.h | |||
| @@ -36,6 +36,8 @@ typedef union { | |||
| 36 | bool swap_grave_esc:1; | 36 | bool swap_grave_esc:1; |
| 37 | bool swap_backslash_backspace:1; | 37 | bool swap_backslash_backspace:1; |
| 38 | bool nkro:1; | 38 | bool nkro:1; |
| 39 | bool swap_lctl_lgui:1; | ||
| 40 | bool swap_rctl_rgui:1; | ||
| 39 | }; | 41 | }; |
| 40 | } keymap_config_t; | 42 | } keymap_config_t; |
| 41 | 43 | ||
diff --git a/quantum/quantum.c b/quantum/quantum.c index 77cbbb2e7..f489c9031 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
| @@ -65,9 +65,17 @@ extern backlight_config_t backlight_config; | |||
| 65 | #ifndef AG_SWAP_SONG | 65 | #ifndef AG_SWAP_SONG |
| 66 | #define AG_SWAP_SONG SONG(AG_SWAP_SOUND) | 66 | #define AG_SWAP_SONG SONG(AG_SWAP_SOUND) |
| 67 | #endif | 67 | #endif |
| 68 | #ifndef CG_NORM_SONG | ||
| 69 | #define CG_NORM_SONG SONG(AG_NORM_SOUND) | ||
| 70 | #endif | ||
| 71 | #ifndef CG_SWAP_SONG | ||
| 72 | #define CG_SWAP_SONG SONG(AG_SWAP_SOUND) | ||
| 73 | #endif | ||
| 68 | float goodbye_song[][2] = GOODBYE_SONG; | 74 | float goodbye_song[][2] = GOODBYE_SONG; |
| 69 | float ag_norm_song[][2] = AG_NORM_SONG; | 75 | float ag_norm_song[][2] = AG_NORM_SONG; |
| 70 | float ag_swap_song[][2] = AG_SWAP_SONG; | 76 | float ag_swap_song[][2] = AG_SWAP_SONG; |
| 77 | float cg_norm_song[][2] = CG_NORM_SONG; | ||
| 78 | float cg_swap_song[][2] = CG_SWAP_SONG; | ||
| 71 | #ifdef DEFAULT_LAYER_SONGS | 79 | #ifdef DEFAULT_LAYER_SONGS |
| 72 | float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS; | 80 | float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS; |
| 73 | #endif | 81 | #endif |
| @@ -563,7 +571,8 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 563 | return false; | 571 | return false; |
| 564 | #endif | 572 | #endif |
| 565 | #endif | 573 | #endif |
| 566 | case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO: | 574 | case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_ALT_GUI: |
| 575 | case MAGIC_SWAP_LCTL_LGUI ... MAGIC_TOGGLE_CTL_GUI: | ||
| 567 | if (record->event.pressed) { | 576 | if (record->event.pressed) { |
| 568 | // MAGIC actions (BOOTMAGIC without the boot) | 577 | // MAGIC actions (BOOTMAGIC without the boot) |
| 569 | if (!eeconfig_is_enabled()) { | 578 | if (!eeconfig_is_enabled()) { |
| @@ -585,6 +594,12 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 585 | case MAGIC_SWAP_RALT_RGUI: | 594 | case MAGIC_SWAP_RALT_RGUI: |
| 586 | keymap_config.swap_ralt_rgui = true; | 595 | keymap_config.swap_ralt_rgui = true; |
| 587 | break; | 596 | break; |
| 597 | case MAGIC_SWAP_LCTL_LGUI: | ||
| 598 | keymap_config.swap_lctl_lgui = true; | ||
| 599 | break; | ||
| 600 | case MAGIC_SWAP_RCTL_RGUI: | ||
| 601 | keymap_config.swap_rctl_rgui = true; | ||
| 602 | break; | ||
| 588 | case MAGIC_NO_GUI: | 603 | case MAGIC_NO_GUI: |
| 589 | keymap_config.no_gui = true; | 604 | keymap_config.no_gui = true; |
| 590 | break; | 605 | break; |
| @@ -604,6 +619,13 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 604 | PLAY_SONG(ag_swap_song); | 619 | PLAY_SONG(ag_swap_song); |
| 605 | #endif | 620 | #endif |
| 606 | break; | 621 | break; |
| 622 | case MAGIC_SWAP_CTL_GUI: | ||
| 623 | keymap_config.swap_lctl_lgui = true; | ||
| 624 | keymap_config.swap_rctl_rgui = true; | ||
| 625 | #ifdef AUDIO_ENABLE | ||
| 626 | PLAY_SONG(cg_swap_song); | ||
| 627 | #endif | ||
| 628 | break; | ||
| 607 | case MAGIC_UNSWAP_CONTROL_CAPSLOCK: | 629 | case MAGIC_UNSWAP_CONTROL_CAPSLOCK: |
| 608 | keymap_config.swap_control_capslock = false; | 630 | keymap_config.swap_control_capslock = false; |
| 609 | break; | 631 | break; |
| @@ -616,6 +638,12 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 616 | case MAGIC_UNSWAP_RALT_RGUI: | 638 | case MAGIC_UNSWAP_RALT_RGUI: |
| 617 | keymap_config.swap_ralt_rgui = false; | 639 | keymap_config.swap_ralt_rgui = false; |
| 618 | break; | 640 | break; |
| 641 | case MAGIC_UNSWAP_LCTL_LGUI: | ||
| 642 | keymap_config.swap_lctl_lgui = false; | ||
| 643 | break; | ||
| 644 | case MAGIC_UNSWAP_RCTL_RGUI: | ||
| 645 | keymap_config.swap_rctl_rgui = false; | ||
| 646 | break; | ||
| 619 | case MAGIC_UNNO_GUI: | 647 | case MAGIC_UNNO_GUI: |
| 620 | keymap_config.no_gui = false; | 648 | keymap_config.no_gui = false; |
| 621 | break; | 649 | break; |
| @@ -635,6 +663,13 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 635 | PLAY_SONG(ag_norm_song); | 663 | PLAY_SONG(ag_norm_song); |
| 636 | #endif | 664 | #endif |
| 637 | break; | 665 | break; |
| 666 | case MAGIC_UNSWAP_CTL_GUI: | ||
| 667 | keymap_config.swap_lctl_lgui = false; | ||
| 668 | keymap_config.swap_rctl_rgui = false; | ||
| 669 | #ifdef AUDIO_ENABLE | ||
| 670 | PLAY_SONG(cg_norm_song); | ||
| 671 | #endif | ||
| 672 | break; | ||
| 638 | case MAGIC_TOGGLE_ALT_GUI: | 673 | case MAGIC_TOGGLE_ALT_GUI: |
| 639 | keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui; | 674 | keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui; |
| 640 | keymap_config.swap_ralt_rgui = !keymap_config.swap_ralt_rgui; | 675 | keymap_config.swap_ralt_rgui = !keymap_config.swap_ralt_rgui; |
| @@ -646,6 +681,17 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 646 | } | 681 | } |
| 647 | #endif | 682 | #endif |
| 648 | break; | 683 | break; |
| 684 | case MAGIC_TOGGLE_CTL_GUI: | ||
| 685 | keymap_config.swap_lctl_lgui = !keymap_config.swap_lctl_lgui; | ||
| 686 | keymap_config.swap_rctl_rgui = !keymap_config.swap_rctl_rgui; | ||
| 687 | #ifdef AUDIO_ENABLE | ||
| 688 | if (keymap_config.swap_rctl_rgui) { | ||
| 689 | PLAY_SONG(cg_swap_song); | ||
| 690 | } else { | ||
| 691 | PLAY_SONG(cg_norm_song); | ||
| 692 | } | ||
| 693 | #endif | ||
| 694 | break; | ||
| 649 | case MAGIC_TOGGLE_NKRO: | 695 | case MAGIC_TOGGLE_NKRO: |
| 650 | keymap_config.nkro = !keymap_config.nkro; | 696 | keymap_config.nkro = !keymap_config.nkro; |
| 651 | break; | 697 | break; |
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index b5c6783e5..bb16da4d5 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h | |||
| @@ -492,6 +492,15 @@ enum quantum_keycodes { | |||
| 492 | CMB_ON, | 492 | CMB_ON, |
| 493 | CMB_OFF, | 493 | CMB_OFF, |
| 494 | CMB_TOG, | 494 | CMB_TOG, |
| 495 | |||
| 496 | MAGIC_SWAP_LCTL_LGUI, | ||
| 497 | MAGIC_SWAP_RCTL_RGUI, | ||
| 498 | MAGIC_UNSWAP_LCTL_LGUI, | ||
| 499 | MAGIC_UNSWAP_RCTL_RGUI, | ||
| 500 | MAGIC_SWAP_CTL_GUI, | ||
| 501 | MAGIC_UNSWAP_CTL_GUI, | ||
| 502 | MAGIC_TOGGLE_CTL_GUI, | ||
| 503 | |||
| 495 | // always leave at the end | 504 | // always leave at the end |
| 496 | SAFE_RANGE | 505 | SAFE_RANGE |
| 497 | }; | 506 | }; |
| @@ -639,6 +648,10 @@ enum quantum_keycodes { | |||
| 639 | #define AG_NORM MAGIC_UNSWAP_ALT_GUI | 648 | #define AG_NORM MAGIC_UNSWAP_ALT_GUI |
| 640 | #define AG_TOGG MAGIC_TOGGLE_ALT_GUI | 649 | #define AG_TOGG MAGIC_TOGGLE_ALT_GUI |
| 641 | 650 | ||
| 651 | #define CG_SWAP MAGIC_SWAP_CTL_GUI | ||
| 652 | #define CG_NORM MAGIC_UNSWAP_CTL_GUI | ||
| 653 | #define CG_TOGG MAGIC_TOGGLE_CTL_GUI | ||
| 654 | |||
| 642 | // GOTO layer - 16 layers max | 655 | // GOTO layer - 16 layers max |
| 643 | // when: | 656 | // when: |
| 644 | // ON_PRESS = 1 | 657 | // ON_PRESS = 1 |
