summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/feature_advanced_keycodes.md57
-rw-r--r--docs/keycodes.md110
-rw-r--r--docs/mod_tap.md55
-rw-r--r--quantum/quantum_keycodes.h122
-rw-r--r--quantum/quantum_keycodes_legacy.h2
5 files changed, 206 insertions, 140 deletions
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index 18740044f4..b21accd367 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -2,29 +2,40 @@
2 2
3These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent. 3These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent.
4 4
5|Key |Aliases |Description | 5|Key |Aliases |Description |
6|----------|----------------------------------|------------------------------------------------------| 6|----------|----------------------------------|-------------------------------------------------------------------------------|
7|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` | 7|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
8|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` | 8|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
9|`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` | 9|`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` |
10|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` | 10|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` |
11|`RCTL(kc)`| |Hold Right Control and press `kc` | 11|`LCS(kc)` | |Hold Left Control and Left Shift and press `kc` |
12|`RSFT(kc)`| |Hold Right Shift and press `kc` | 12|`LCA(kc)` | |Hold Left Control and Left Alt and press `kc` |
13|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` | 13|`LCG(kc)` | |Hold Left Control and Left GUI and press `kc` |
14|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` | 14|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` |
15|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` | 15|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and Left GUI and press `kc` |
16|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` | 16|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` |
17|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` | 17|`LCSG(kc)`| |Hold Left Control, Left Shift and Left GUI and press `kc` |
18|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` | 18|`LCAG(kc)`| |Hold Left Control, Left Alt and Left GUI and press `kc` |
19|`LCA(kc)` | |Hold Left Control and Alt and press `kc` | 19|`LSAG(kc)`| |Hold Left Shift, Left Alt and Left GUI and press `kc` |
20|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` | 20|`RCTL(kc)`| |Hold Right Control and press `kc` |
21|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt (AltGr) and press `kc` | 21|`RSFT(kc)`| |Hold Right Shift and press `kc` |
22|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` | 22|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` |
23|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` | 23|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` |
24|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` | 24|`RCA(kc)` | |Hold Right Control and Right Alt and press `kc` |
25|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc` | 25|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` |
26 26|`RCG(kc)` | |Hold Right Control and Right GUI and press `kc` |
27You can also chain them, for example `LCTL(LALT(KC_DEL))` or `C(A(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress. 27|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt and press `kc` |
28|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` |
29|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` |
30|`RCSG(kc)`| |Hold Right Control, Right Shift and Right GUI and press `kc` |
31|`RCAG(kc)`| |Hold Right Control, Right Alt and Right GUI and press `kc` |
32|`RSAG(kc)`| |Hold Right Shift, Right Alt and Right GUI and press `kc` |
33|`MEH(kc)` | |Hold Left Control, Left Shift and Left Alt and press `kc` |
34|`HYPR(kc)`| |Hold Left Control, Left Shift, Left Alt and Left GUI and press `kc`<sup>1</sup>|
35
36<sup>1. More information on the Hyper key can be found on [this blog post by Brett Terpstra](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/).</sup>
37
38You can also chain them, for example `LCTL(LALT(KC_DEL))`, `C(A(KC_DEL))`, or `LCA(KC_DEL)` all make a key that sends Control+Alt+Delete with a single keypress.
28 39
29# Checking Modifier State {#checking-modifier-state} 40# Checking Modifier State {#checking-modifier-state}
30 41
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 891a4f6f17..5d983e347e 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -658,58 +658,74 @@ See also: [Mouse Keys](features/mouse_keys)
658 658
659See also: [Modifier Keys](feature_advanced_keycodes#modifier-keys) 659See also: [Modifier Keys](feature_advanced_keycodes#modifier-keys)
660 660
661|Key |Aliases |Description | 661|Key |Aliases |Description |
662|----------|----------------------------------|------------------------------------------------------| 662|----------|----------------------------------|-------------------------------------------------------------------|
663|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` | 663|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
664|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` | 664|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
665|`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` | 665|`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` |
666|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` | 666|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` |
667|`RCTL(kc)`| |Hold Right Control and press `kc` | 667|`LCS(kc)` | |Hold Left Control and Left Shift and press `kc` |
668|`RSFT(kc)`| |Hold Right Shift and press `kc` | 668|`LCA(kc)` | |Hold Left Control and Left Alt and press `kc` |
669|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt (AltGr) and press `kc` | 669|`LCG(kc)` | |Hold Left Control and Left GUI and press `kc` |
670|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` | 670|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` |
671|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and Left GUI and press `kc` | 671|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and Left GUI and press `kc` |
672|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` | 672|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` |
673|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` | 673|`LCSG(kc)`| |Hold Left Control, Left Shift and Left GUI and press `kc` |
674|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` | 674|`LCAG(kc)`| |Hold Left Control, Left Alt and Left GUI and press `kc` |
675|`LCA(kc)` | |Hold Left Control and Alt and press `kc` | 675|`LSAG(kc)`| |Hold Left Shift, Left Alt and Left GUI and press `kc` |
676|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` | 676|`RCTL(kc)`| |Hold Right Control and press `kc` |
677|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt (AltGr) and press `kc` | 677|`RSFT(kc)`| |Hold Right Shift and press `kc` |
678|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` | 678|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` |
679|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` | 679|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` |
680|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` | 680|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` |
681|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc` | 681|`RCA(kc)` | |Hold Right Control and Right Alt and press `kc` |
682|`KC_MEH` | |Left Control, Shift and Alt | 682|`RCG(kc)` | |Hold Right Control and Right GUI and press `kc` |
683|`KC_HYPR` | |Left Control, Shift, Alt and GUI | 683|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt and press `kc` |
684|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` |
685|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` |
686|`RCSG(kc)`| |Hold Right Control, Right Shift and Right GUI and press `kc` |
687|`RCAG(kc)`| |Hold Right Control, Right Alt and Right GUI and press `kc` |
688|`RSAG(kc)`| |Hold Right Shift, Right Alt and Right GUI and press `kc` |
689|`MEH(kc)` | |Hold Left Control, Left Shift and Left Alt and press `kc` |
690|`HYPR(kc)`| |Hold Left Control, Left Shift, Left Alt and Left GUI and press `kc`|
691|`KC_MEH` | |Left Control, Left Shift and Left Alt |
692|`KC_HYPR` | |Left Control, Left Shift, Left Alt and Left GUI |
684 693
685## Mod-Tap Keys {#mod-tap-keys} 694## Mod-Tap Keys {#mod-tap-keys}
686 695
687See also: [Mod-Tap](mod_tap) 696See also: [Mod-Tap](mod_tap)
688 697
689|Key |Aliases |Description | 698|Key |Aliases |Description |
690|-------------|-----------------------------------------------------------------|--------------------------------------------------------------| 699|-------------|-----------------------------------------------------------------|---------------------------------------------------------------------------|
691|`MT(mod, kc)`| |`mod` when held, `kc` when tapped | 700|`MT(mod, kc)`| |`mod` when held, `kc` when tapped |
692|`LCTL_T(kc)` |`CTL_T(kc)` |Left Control when held, `kc` when tapped | 701|`LCTL_T(kc)` |`CTL_T(kc)` |Left Control when held, `kc` when tapped |
693|`LSFT_T(kc)` |`SFT_T(kc)` |Left Shift when held, `kc` when tapped | 702|`LSFT_T(kc)` |`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
694|`LALT_T(kc)` |`LOPT_T(kc)`, `ALT_T(kc)`, `OPT_T(kc)` |Left Alt when held, `kc` when tapped | 703|`LALT_T(kc)` |`ALT_T(kc)`, `LOPT_T(kc)`, `OPT_T(kc)` |Left Alt when held, `kc` when tapped |
695|`LGUI_T(kc)` |`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped | 704|`LGUI_T(kc)` |`GUI_T(kc)`, `LCMD_T(kc)`, `LWIN_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
696|`RCTL_T(kc)` | |Right Control when held, `kc` when tapped | 705|`LCS_T(kc)` | |Left Control and Left Shift when held, `kc` when tapped |
697|`RSFT_T(kc)` | |Right Shift when held, `kc` when tapped | 706|`LCA_T(kc)` | |Left Control and Left Alt when held, `kc` when tapped |
698|`RALT_T(kc)` |`ROPT_T(kc)`, `ALGR_T(kc)` |Right Alt (AltGr) when held, `kc` when tapped | 707|`LCG_T(kc)` | |Left Control and Left GUI when held, `kc` when tapped |
699|`RGUI_T(kc)` |`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped | 708|`LSA_T(kc)` | |Left Shift and Left Alt when held, `kc` when tapped |
700|`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped | 709|`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and Left GUI when held, `kc` when tapped |
701|`LAG_T(kc)` | |Left Alt and GUI when held, `kc` when tapped | 710|`LAG_T(kc)` | |Left Alt and Left GUI when held, `kc` when tapped |
702|`RSG_T(kc)` | |Right Shift and GUI when held, `kc` when tapped | 711|`LCSG_T(kc)` | |Left Control, Left Shift and Left GUI when held, `kc` when tapped |
703|`RAG_T(kc)` | |Right Alt and GUI when held, `kc` when tapped | 712|`LCAG_T(kc)` | |Left Control, Left Alt and Left GUI when held, `kc` when tapped |
704|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped | 713|`LSAG_T(kc)` | |Left Shift, Left Alt and Left GUI when held, `kc` when tapped |
705|`LSA_T(kc)` | |Left Shift and Left Alt when held, `kc` when tapped | 714|`RCTL_T(kc)` | |Right Control when held, `kc` when tapped |
706|`RSA_T(kc)` |`SAGR_T(kc)` |Right Shift and Right Alt (AltGr) when held, `kc` when tapped | 715|`RSFT_T(kc)` | |Right Shift when held, `kc` when tapped |
707|`RCS_T(kc)` | |Right Control and Right Shift when held, `kc` when tapped | 716|`RALT_T(kc)` |`ROPT_T(kc)`, `ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
708|`LCAG_T(kc)` | |Left Control, Alt and GUI when held, `kc` when tapped | 717|`RGUI_T(kc)` |`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
709|`RCAG_T(kc)` | |Right Control, Alt and GUI when held, `kc` when tapped | 718|`RCS_T(kc)` | |Right Control and Right Shift when held, `kc` when tapped |
710|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped | 719|`RCA_T(kc)` | |Right Control and Right Alt when held, `kc` when tapped |
711|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped | 720|`RCG_T(kc)` | |Right Control and Right GUI when held, `kc` when tapped |
712|`HYPR_T(kc)` |`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)| 721|`RSA_T(kc)` |`SAGR_T(kc)` |Right Shift and Right Alt when held, `kc` when tapped |
722|`RSG_T(kc)` | |Right Shift and Right GUI when held, `kc` when tapped |
723|`RAG_T(kc)` | |Right Alt and Right GUI when held, `kc` when tapped |
724|`RCSG_T(kc)` | |Right Control, Right Shift and Right GUI when held, `kc` when tapped |
725|`RCAG_T(kc)` | |Right Control, Right Alt and Right GUI when held, `kc` when tapped |
726|`RSAG_T(kc)` | |Right Shift, Right Alt and Right GUI when held, `kc` when tapped |
727|`MEH_T(kc)` | |Left Control, Left Shift and Left Alt when held, `kc` when tapped |
728|`HYPR_T(kc)` |`ALL_T(kc)` |Left Control, Left Shift, Left Alt and Left GUI when held, `kc` when tapped|
713 729
714## Tapping Term Keys {#tapping-term-keys} 730## Tapping Term Keys {#tapping-term-keys}
715 731
diff --git a/docs/mod_tap.md b/docs/mod_tap.md
index 8b420d30b6..ebf79adb7f 100644
--- a/docs/mod_tap.md
+++ b/docs/mod_tap.md
@@ -27,29 +27,38 @@ This key would activate Left Control and Left Shift when held, and send Escape w
27 27
28For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap: 28For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap:
29 29
30|Key |Aliases |Description | 30|Key |Aliases |Description |
31|------------|-----------------------------------------------------------------|--------------------------------------------------------------| 31|------------|-----------------------------------------------------------------|---------------------------------------------------------------------------------------|
32|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped | 32|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
33|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped | 33|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
34|`LALT_T(kc)`|`LOPT_T(kc)`, `ALT_T(kc)`, `OPT_T(kc)` |Left Alt when held, `kc` when tapped | 34|`LALT_T(kc)`|`ALT_T(kc)`, `LOPT_T(kc)`, `OPT_T(kc)` |Left Alt when held, `kc` when tapped |
35|`LGUI_T(kc)`|`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped | 35|`LGUI_T(kc)`|`GUI_T(kc)`, `LCMD_T(kc)`, `LWIN_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
36|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped | 36|`LCS_T(kc)` | |Left Control and Left Shift when held, `kc` when tapped |
37|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped | 37|`LCA_T(kc)` | |Left Control and Left Alt when held, `kc` when tapped |
38|`RALT_T(kc)`|`ROPT_T(kc)`, `ALGR_T(kc)` |Right Alt when held, `kc` when tapped | 38|`LCG_T(kc)` | |Left Control and Left GUI when held, `kc` when tapped |
39|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped | 39|`LSA_T(kc)` | |Left Shift and Left Alt when held, `kc` when tapped |
40|`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped | 40|`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and Left GUI when held, `kc` when tapped |
41|`LAG_T(kc)` | |Left Alt and GUI when held, `kc` when tapped | 41|`LAG_T(kc)` | |Left Alt and Left GUI when held, `kc` when tapped |
42|`RSG_T(kc)` | |Right Shift and GUI when held, `kc` when tapped | 42|`LCSG_T(kc)`| |Left Control, Left Shift and Left GUI when held, `kc` when tapped |
43|`RAG_T(kc)` | |Right Alt and GUI when held, `kc` when tapped | 43|`LCAG_T(kc)`| |Left Control, Left Alt and Left GUI when held, `kc` when tapped |
44|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped | 44|`LSAG_T(kc)`| |Left Shift, Left Alt and Left GUI when held, `kc` when tapped |
45|`LSA_T(kc)` | |Left Shift and Alt when held, `kc` when tapped | 45|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
46|`RSA_T(kc)` |`SAGR_T(kc)` |Right Shift and Right Alt (AltGr) when held, `kc` when tapped | 46|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
47|`RCS_T(kc)` | |Right Control and Right Shift when held, `kc` when tapped | 47|`RALT_T(kc)`|`ROPT_T(kc)`, `ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
48|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped | 48|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
49|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped | 49|`RCS_T(kc)` | |Right Control and Right Shift when held, `kc` when tapped |
50|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped | 50|`RCA_T(kc)` | |Right Control and Right Alt when held, `kc` when tapped |
51|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped | 51|`RCG_T(kc)` | |Right Control and Right GUI when held, `kc` when tapped |
52|`HYPR_T(kc)`|`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)| 52|`RSA_T(kc)` |`SAGR_T(kc)` |Right Shift and Right Alt when held, `kc` when tapped |
53|`RSG_T(kc)` | |Right Shift and Right GUI when held, `kc` when tapped |
54|`RAG_T(kc)` | |Right Alt and Right GUI when held, `kc` when tapped |
55|`RCSG_T(kc)`| |Right Control, Right Shift and Right GUI when held, `kc` when tapped |
56|`RCAG_T(kc)`| |Right Control, Right Alt and Right GUI when held, `kc` when tapped |
57|`RSAG_T(kc)`| |Right Shift, Right Alt and Right GUI when held, `kc` when tapped |
58|`MEH_T(kc)` | |Left Control, Left Shift and Left Alt when held, `kc` when tapped |
59|`HYPR_T(kc)`|`ALL_T(kc)` |Left Control, Left Shift, Left Alt and Left GUI when held, `kc` when tapped<sup>1</sup>|
60
61<sup>1. More information on the Hyper key can be found on [this blog post by Brett Terpstra](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/).</sup>
53 62
54## Caveats 63## Caveats
55 64
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index bcaf94af8b..a2a86e175c 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -41,44 +41,59 @@
41#define QK_MODS_GET_MODS(kc) (((kc) >> 8) & 0x1F) 41#define QK_MODS_GET_MODS(kc) (((kc) >> 8) & 0x1F)
42#define QK_MODS_GET_BASIC_KEYCODE(kc) ((kc)&0xFF) 42#define QK_MODS_GET_BASIC_KEYCODE(kc) ((kc)&0xFF)
43 43
44// Keycode modifiers & aliases 44// Modified keycodes
45#define LCTL(kc) (QK_LCTL | (kc)) 45#define LCTL(kc) (QK_LCTL | (kc))
46#define LSFT(kc) (QK_LSFT | (kc)) 46#define LSFT(kc) (QK_LSFT | (kc))
47#define LALT(kc) (QK_LALT | (kc)) 47#define LALT(kc) (QK_LALT | (kc))
48#define LGUI(kc) (QK_LGUI | (kc)) 48#define LGUI(kc) (QK_LGUI | (kc))
49
49#define LOPT(kc) LALT(kc) 50#define LOPT(kc) LALT(kc)
50#define LCMD(kc) LGUI(kc) 51#define LCMD(kc) LGUI(kc)
51#define LWIN(kc) LGUI(kc) 52#define LWIN(kc) LGUI(kc)
53
54#define C(kc) LCTL(kc)
55#define S(kc) LSFT(kc)
56#define A(kc) LALT(kc)
57#define G(kc) LGUI(kc)
58
59#define LCS(kc) (QK_LCTL | QK_LSFT | (kc))
60#define LCA(kc) (QK_LCTL | QK_LALT | (kc))
61#define LCG(kc) (QK_LCTL | QK_LGUI | (kc))
62#define LSA(kc) (QK_LSFT | QK_LALT | (kc))
63#define LSG(kc) (QK_LSFT | QK_LGUI | (kc))
64#define LAG(kc) (QK_LALT | QK_LGUI | (kc))
65#define LCSG(kc) (QK_LCTL | QK_LSFT | QK_LGUI | (kc))
66#define LCAG(kc) (QK_LCTL | QK_LALT | QK_LGUI | (kc))
67#define LSAG(kc) (QK_LSFT | QK_LALT | QK_LGUI | (kc))
68
69#define SGUI(kc) LSG(kc)
70#define SCMD(kc) LSG(kc)
71#define SWIN(kc) LSG(kc)
72
52#define RCTL(kc) (QK_RCTL | (kc)) 73#define RCTL(kc) (QK_RCTL | (kc))
53#define RSFT(kc) (QK_RSFT | (kc)) 74#define RSFT(kc) (QK_RSFT | (kc))
54#define RALT(kc) (QK_RALT | (kc)) 75#define RALT(kc) (QK_RALT | (kc))
55#define RGUI(kc) (QK_RGUI | (kc)) 76#define RGUI(kc) (QK_RGUI | (kc))
77
56#define ALGR(kc) RALT(kc) 78#define ALGR(kc) RALT(kc)
57#define ROPT(kc) RALT(kc) 79#define ROPT(kc) RALT(kc)
58#define RCMD(kc) RGUI(kc) 80#define RCMD(kc) RGUI(kc)
59#define RWIN(kc) RGUI(kc) 81#define RWIN(kc) RGUI(kc)
60 82
61#define HYPR(kc) (QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI | (kc)) 83#define RCA(kc) (QK_RCTL | QK_RALT | (kc))
62#define MEH(kc) (QK_LCTL | QK_LSFT | QK_LALT | (kc)) 84#define RCS(kc) (QK_RCTL | QK_RSFT | (kc))
63#define LCAG(kc) (QK_LCTL | QK_LALT | QK_LGUI | (kc)) 85#define RCG(kc) (QK_RCTL | QK_RGUI | (kc))
64#define LSG(kc) (QK_LSFT | QK_LGUI | (kc)) 86#define RSA(kc) (QK_RSFT | QK_RALT | (kc))
65#define SGUI(kc) LSG(kc)
66#define SCMD(kc) LSG(kc)
67#define SWIN(kc) LSG(kc)
68#define LAG(kc) (QK_LALT | QK_LGUI | (kc))
69#define RSG(kc) (QK_RSFT | QK_RGUI | (kc)) 87#define RSG(kc) (QK_RSFT | QK_RGUI | (kc))
70#define RAG(kc) (QK_RALT | QK_RGUI | (kc)) 88#define RAG(kc) (QK_RALT | QK_RGUI | (kc))
71#define LCA(kc) (QK_LCTL | QK_LALT | (kc)) 89#define RCSG(kc) (QK_RCTL | QK_RSFT | QK_RGUI | (kc))
72#define LSA(kc) (QK_LSFT | QK_LALT | (kc)) 90#define RCAG(kc) (QK_RCTL | QK_RALT | QK_RGUI | (kc))
73#define RSA(kc) (QK_RSFT | QK_RALT | (kc)) 91#define RSAG(kc) (QK_RSFT | QK_RALT | QK_RGUI | (kc))
74#define RCS(kc) (QK_RCTL | QK_RSFT | (kc)) 92
75#define SAGR(kc) RSA(kc) 93#define SAGR(kc) RSA(kc)
76 94
77// Modified keycode aliases 95#define HYPR(kc) (QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI | (kc))
78#define C(kc) LCTL(kc) 96#define MEH(kc) (QK_LCTL | QK_LSFT | QK_LALT | (kc))
79#define S(kc) LSFT(kc)
80#define A(kc) LALT(kc)
81#define G(kc) LGUI(kc)
82 97
83// GOTO layer - 32 layer max 98// GOTO layer - 32 layer max
84#define TO(layer) (QK_TO | ((layer)&0x1F)) 99#define TO(layer) (QK_TO | ((layer)&0x1F))
@@ -127,50 +142,63 @@
127#define QK_MOD_TAP_GET_MODS(kc) (((kc) >> 8) & 0x1F) 142#define QK_MOD_TAP_GET_MODS(kc) (((kc) >> 8) & 0x1F)
128#define QK_MOD_TAP_GET_TAP_KEYCODE(kc) ((kc)&0xFF) 143#define QK_MOD_TAP_GET_TAP_KEYCODE(kc) ((kc)&0xFF)
129 144
145// Mod-Tap shortcuts
130#define LCTL_T(kc) MT(MOD_LCTL, kc) 146#define LCTL_T(kc) MT(MOD_LCTL, kc)
131#define RCTL_T(kc) MT(MOD_RCTL, kc)
132#define CTL_T(kc) LCTL_T(kc)
133
134#define LSFT_T(kc) MT(MOD_LSFT, kc) 147#define LSFT_T(kc) MT(MOD_LSFT, kc)
135#define RSFT_T(kc) MT(MOD_RSFT, kc)
136#define SFT_T(kc) LSFT_T(kc)
137
138#define LALT_T(kc) MT(MOD_LALT, kc) 148#define LALT_T(kc) MT(MOD_LALT, kc)
139#define RALT_T(kc) MT(MOD_RALT, kc) 149#define LGUI_T(kc) MT(MOD_LGUI, kc)
140#define LOPT_T(kc) LALT_T(kc) 150
141#define ROPT_T(kc) RALT_T(kc) 151#define CTL_T(kc) LCTL_T(kc)
142#define ALGR_T(kc) RALT_T(kc) 152#define SFT_T(kc) LSFT_T(kc)
143#define ALT_T(kc) LALT_T(kc) 153#define ALT_T(kc) LALT_T(kc)
144#define OPT_T(kc) LOPT_T(kc) 154#define GUI_T(kc) LGUI_T(kc)
145 155
146#define LGUI_T(kc) MT(MOD_LGUI, kc) 156#define LOPT_T(kc) LALT_T(kc)
147#define RGUI_T(kc) MT(MOD_RGUI, kc)
148#define LCMD_T(kc) LGUI_T(kc) 157#define LCMD_T(kc) LGUI_T(kc)
149#define LWIN_T(kc) LGUI_T(kc) 158#define LWIN_T(kc) LGUI_T(kc)
150#define RCMD_T(kc) RGUI_T(kc) 159
151#define RWIN_T(kc) RGUI_T(kc) 160#define OPT_T(kc) LOPT_T(kc)
152#define GUI_T(kc) LGUI_T(kc)
153#define CMD_T(kc) LCMD_T(kc) 161#define CMD_T(kc) LCMD_T(kc)
154#define WIN_T(kc) LWIN_T(kc) 162#define WIN_T(kc) LWIN_T(kc)
155 163
156#define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Left Control + Shift e.g. for gnome-terminal 164#define LCS_T(kc) MT(MOD_LCTL | MOD_LSFT, kc)
157#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 GUI, so just Left Control + Shift + Alt 165#define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc)
158#define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left Control + Alt + GUI 166#define LCG_T(kc) MT(MOD_LCTL | MOD_LGUI, kc)
159#define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right Control + Alt + GUI 167#define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc)
160#define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ 168#define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc)
161#define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc) // Left Shift + GUI 169#define LAG_T(kc) MT(MOD_LALT | MOD_LGUI, kc)
170#define LCSG_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LGUI, kc)
171#define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc)
172#define LSAG_T(kc) MT(MOD_LSFT | MOD_LALT | MOD_LGUI, kc)
173
162#define SGUI_T(kc) LSG_T(kc) 174#define SGUI_T(kc) LSG_T(kc)
163#define SCMD_T(kc) LSG_T(kc) 175#define SCMD_T(kc) LSG_T(kc)
164#define SWIN_T(kc) LSG_T(kc) 176#define SWIN_T(kc) LSG_T(kc)
165#define LAG_T(kc) MT(MOD_LALT | MOD_LGUI, kc) // Left Alt + GUI 177
166#define RSG_T(kc) MT(MOD_RSFT | MOD_RGUI, kc) // Right Shift + GUI 178#define RCTL_T(kc) MT(MOD_RCTL, kc)
167#define RAG_T(kc) MT(MOD_RALT | MOD_RGUI, kc) // Right Alt + GUI 179#define RSFT_T(kc) MT(MOD_RSFT, kc)
168#define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc) // Left Control + Alt 180#define RALT_T(kc) MT(MOD_RALT, kc)
169#define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc) // Left Shift + Alt 181#define RGUI_T(kc) MT(MOD_RGUI, kc)
170#define RSA_T(kc) MT(MOD_RSFT | MOD_RALT, kc) // Right Shift + Alt 182
171#define RCS_T(kc) MT(MOD_RCTL | MOD_RSFT, kc) // Right Control + Shift 183#define ROPT_T(kc) RALT_T(kc)
184#define ALGR_T(kc) RALT_T(kc)
185#define RCMD_T(kc) RGUI_T(kc)
186#define RWIN_T(kc) RGUI_T(kc)
187
188#define RCS_T(kc) MT(MOD_RCTL | MOD_RSFT, kc)
189#define RCA_T(kc) MT(MOD_RCTL | MOD_RALT, kc)
190#define RCG_T(kc) MT(MOD_RCTL | MOD_RGUI, kc)
191#define RSA_T(kc) MT(MOD_RSFT | MOD_RALT, kc)
192#define RSG_T(kc) MT(MOD_RSFT | MOD_RGUI, kc)
193#define RAG_T(kc) MT(MOD_RALT | MOD_RGUI, kc)
194#define RCSG_T(kc) MT(MOD_RCTL | MOD_RSFT | MOD_RGUI, kc)
195#define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc)
196#define RSAG_T(kc) MT(MOD_RSFT | MOD_RALT | MOD_RGUI, kc)
197
172#define SAGR_T(kc) RSA_T(kc) 198#define SAGR_T(kc) RSA_T(kc)
173 199
200#define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc)
201#define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc)
174#define ALL_T(kc) HYPR_T(kc) 202#define ALL_T(kc) HYPR_T(kc)
175 203
176// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap 204// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
diff --git a/quantum/quantum_keycodes_legacy.h b/quantum/quantum_keycodes_legacy.h
index 21aec90675..55b0fc3596 100644
--- a/quantum/quantum_keycodes_legacy.h
+++ b/quantum/quantum_keycodes_legacy.h
@@ -57,3 +57,5 @@
57#define KC_ACL2 QK_MOUSE_ACCELERATION_2 57#define KC_ACL2 QK_MOUSE_ACCELERATION_2
58 58
59#define QK_OUTPUT_AUTO OU_AUTO 59#define QK_OUTPUT_AUTO OU_AUTO
60
61#define C_S_T(kc) LCS_T(kc)