diff --git a/docs/_summary.md b/docs/_summary.md
index 4c4711064..071ce5631 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -13,27 +13,36 @@
* [Features](features.md)
* [Common Shortcuts](feature_common_shortcuts.md)
- * [Layer Switching](feature_common_shortcuts.md#switching-and-toggling-layers)
- * [Modifier Keys](feature_common_shortcuts.md#modifier-keys)
- * [Shifted Keycodes](feature_common_shortcuts.md#shifted-keycodes)
- * [One Shot Keys](feature_common_shortcuts.md#one-shot-keys)
- * [Mod Tap](feature_common_shortcuts.md#mod-tap)
+ * [Backlight](feature_backlight.md)
+ * [Bootmagic](feature_bootmagic.md)
+ * [Dynamic Macros](dynamic_macros.md)
+ * [Key Lock](key_lock.md)
* [Leader Key](leader_key.md)
* [Macros](macros.md)
- * [Dynamic Macros](dynamic_macros.md)
+ * [Mouse keys](mouse_keys.md)
* [Space Cadet](space_cadet_shift.md)
* [Tap Dance](tap_dance.md)
- * [Mouse keys](mouse_keys.md)
- * [Unicode](unicode.md)
+ * [Thermal Printer](feature_thermal_printer.md)
* [Stenography](stenography.md)
- * [Key Lock](key_lock.md)
+ * [Unicode](unicode.md)
* Reference
* [Glossary](glossary.md)
* [Keymap overview](keymap.md)
* [Keycodes](keycodes.md)
- * [Basic Keycodes](basic_keycodes.md)
- * [Quantum Keycodes](quantum_keycodes.md)
+ * [Basic](basic_keycodes.md)
+ * [Quantum](quantum_keycodes.md)
+ * [Backlight](feature_backlight.md#backlight-keycodes)
+ * [Bluetooth](feature_bluetooth.md#bluetooth-keycodes)
+ * [Bootmagic](feature_bootmagic.md#bootmagic-keycodes)
+ * [Layer Switching](feature_common_shortcuts.md#switching-and-toggling-layers)
+ * [Mod+Key](feature_common_shortcuts.md#modifier-keys)
+ * [Mod Tap](feature_common_shortcuts.md#mod-tap)
+ * [One Shot Keys](feature_common_shortcuts.md#one-shot-keys)
+ * [Shifted Keys](feature_common_shortcuts.md#shifted-keycodes)
+ * [RGB Light](feature_rgblight.md#rgblight-keycodes)
+ * [Thermal Printer](feature_thermal_printer.md#thermal-printer-keycodes)
+ * [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
* [The `config.h` File](config_options.md)
* [Customizing Functionality](custom_quantum_functions.md)
* [Documentation Best Practices](documentation_best_practices.md)
diff --git a/docs/basic_keycodes.md b/docs/basic_keycodes.md
index 4f84647a2..b1f69ab16 100644
--- a/docs/basic_keycodes.md
+++ b/docs/basic_keycodes.md
@@ -1,5 +1,11 @@
# Basic keycodes
+Basic keycodes are based on [HID Usage Keyboard/Keypad Page(0x07)](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) with following exceptions:
+
+* `KC_NO` = 0 for no action
+* `KC_TRNS` = 1 for layer transparency
+* internal special keycodes in the `0xA5-DF` range (tmk heritage).
+
## Letters and Numbers
|KC_1|KC_2|KC_3|KC_4|KC_5|KC_6|KC_7|KC_8|
diff --git a/docs/feature_audio.md b/docs/feature_audio.md
new file mode 100644
index 000000000..6b476880d
--- /dev/null
+++ b/docs/feature_audio.md
@@ -0,0 +1,118 @@
+# Audio
+
+
diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md
new file mode 100644
index 000000000..c419b7ccc
--- /dev/null
+++ b/docs/feature_backlight.md
@@ -0,0 +1,17 @@
+# Backlighting
+
+
+
+## Backlight Keycodes
+
+These keycodes control the backlight. Most keyboards use this for single color in-switch lighting.
+
+|Name|Description|
+|----|-----------|
+|`BL_x`|Set a specific backlight level between 0-9|
+|`BL_ON`|An alias for `BL_9`|
+|`BL_OFF`|An alias for `BL_0`|
+|`BL_DEC`|Turn the backlight level down by 1|
+|`BL_INC`|Turn the backlight level up by 1|
+|`BL_TOGG`|Toggle the backlight on or off|
+|`BL_STEP`|Step through backlight levels, wrapping around to 0 when you reach the top.|
diff --git a/docs/feature_bluetooth.md b/docs/feature_bluetooth.md
new file mode 100644
index 000000000..d58627857
--- /dev/null
+++ b/docs/feature_bluetooth.md
@@ -0,0 +1,13 @@
+# Bluetooth
+
+
+
+## Bluetooth Keycodes
+
+This is used when multiple keyboard outputs can be selected. Currently this only allows for switching between USB and Bluetooth on keyboards that support both.
+
+|Name|Description|
+|----|-----------|
+|`OUT_AUTO`|auto mode|
+|`OUT_USB`|usb only|
+|`OUT_BT`|bluetooth|
diff --git a/docs/feature_bootmagic.md b/docs/feature_bootmagic.md
new file mode 100644
index 000000000..3cf7d8d2a
--- /dev/null
+++ b/docs/feature_bootmagic.md
@@ -0,0 +1,29 @@
+# Bootmagic
+
+
+
+## Bootmagic Keycodes
+
+Shortcuts for bootmagic options. You can use these even when bootmagic is off.
+
+|Name|Description|
+|----|-----------|
+|`MAGIC_SWAP_CONTROL_CAPSLOCK`|Swap Capslock and Left Control|
+|`MAGIC_CAPSLOCK_TO_CONTROL`|Treat Capslock like a Control Key|
+|`MAGIC_SWAP_LALT_LGUI`|Swap the left Alt and GUI keys|
+|`MAGIC_SWAP_RALT_RGUI`|Swap the right Alt and GUI keys|
+|`MAGIC_NO_GUI`|Disable the GUI key|
+|`MAGIC_SWAP_GRAVE_ESC`|Swap the Grave and Esc key.|
+|`MAGIC_SWAP_BACKSLASH_BACKSPACE`|Swap backslack and backspace|
+|`MAGIC_HOST_NKRO`|Force NKRO on|
+|`MAGIC_SWAP_ALT_GUI`/`AG_SWAP`|Swap Alt and Gui on both sides|
+|`MAGIC_UNSWAP_CONTROL_CAPSLOCK`|Disable the Control/Capslock swap|
+|`MAGIC_UNCAPSLOCK_TO_CONTROL`|Disable treating Capslock like Control |
+|`MAGIC_UNSWAP_LALT_LGUI`|Disable Left Alt and GUI switching|
+|`MAGIC_UNSWAP_RALT_RGUI`|Disable Right Alt and GUI switching|
+|`MAGIC_UNNO_GUI`|Enable the GUI key |
+|`MAGIC_UNSWAP_GRAVE_ESC`|Disable the Grave/Esc swap |
+|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|Disable the backslash/backspace swap|
+|`MAGIC_UNHOST_NKRO`|Force NKRO off|
+|`MAGIC_UNSWAP_ALT_GUI`/`AG_NORM`|Disable the Alt/GUI switching|
+|`MAGIC_TOGGLE_NKRO`|Turn NKRO on or off|
diff --git a/docs/feature_common_shortcuts.md b/docs/feature_common_shortcuts.md
index 6a20ee64e..e91142026 100644
--- a/docs/feature_common_shortcuts.md
+++ b/docs/feature_common_shortcuts.md
@@ -25,7 +25,9 @@ These functions allow you to activate layers in various ways.
* `TO(layer)` - Goes to a layer. This code is special, because it lets you go either up or down the stack -- just goes directly to the layer you want. So while other codes only let you go _up_ the stack (from layer 0 to layer 3, for example), `TO(2)` is going to get you to layer 2, no matter where you activate it from -- even if you're currently on layer 5. This gets activated on keydown (as soon as the key is pressed).
* `TT(layer)` - Layer Tap-Toggle. If you hold the key down, the layer becomes active, and then deactivates when you let go. And if you tap it, the layer simply becomes active (toggles on). It needs 5 taps by default, but you can set it by defining `TAPPING_TOGGLE`, for example, `#define TAPPING_TOGGLE 2` for just two taps.
-Care must be taken when switching layers, it's possible to lock yourself in a layer with no way to deactivate that layer (without unplugging your keyboard.) We've created some guidelines to help users avoid the most common problems.
+## Working With Layers
+
+Care must be taken when switching layers, it's possible to lock yourself into a layer with no way to deactivate that layer (without unplugging your keyboard.) We've created some guidelines to help users avoid the most common problems.
### Beginners
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
new file mode 100644
index 000000000..8bbe06b97
--- /dev/null
+++ b/docs/feature_rgblight.md
@@ -0,0 +1,18 @@
+# RGB Lighting
+
+
+
+## RGB Lighting Keycodes
+
+This controls the RGB Lighting functionality. Most keyboards use WS2812 (and compatible) LEDs for underlight or case lighting.
+
+|Name|Description|
+|----|-----------|
+|`RGB_TOG`|toggle on/off|
+|`RGB_MOD`|cycle through modes|
+|`RGB_HUI`|hue increase|
+|`RGB_HUD`|hue decrease|
+|`RGB_SAI`|saturation increase|
+|`RGB_SAD`|saturation decrease|
+|`RGB_VAI`|value increase|
+|`RGB_VAD`|value decrease|
diff --git a/docs/feature_thermal_printer.md b/docs/feature_thermal_printer.md
new file mode 100644
index 000000000..0c5d15116
--- /dev/null
+++ b/docs/feature_thermal_printer.md
@@ -0,0 +1,10 @@
+# Thermal Printer
+
+
+
+## Thermal Printer Keycodes
+
+|Name|Description|
+|----|-----------|
+|`PRINT_ON`|Start printing everything the user types|
+|`PRINT_OFF`|Stop printing everything the user types|
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 7c5cae8b3..b9e1f42f7 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -1,17 +1,351 @@
# Overview
-When defining a [keymap](keymap.md) each key needs a valid key definition.
+When defining a [keymap](keymap.md) each key needs a valid key definition. This page documents the symbols that correspond to keycodes that are available to you in QMK. This is a reference only. Where possible keys link to the page documenting their functionality.
-This page documents the symbols that correspond to keycodes that are available to you in QMK.
+## Keycode Index
-## Basic keycodes (`0x00` - `0xFF`)
-
-[Basic keycodes](basic_keycodes.md) in QMK are based on [HID Usage Keyboard/Keypad Page(0x07)](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) with following exceptions:
-
-* `KC_NO` = 0 for no action
-* `KC_TRNS` = 1 for layer transparency
-* internal special keycodes in the `0xA5-DF` range (tmk heritage).
-
-## Quantum keycodes (`0x0100` - `0xFFFF`)
-
-[Quantum keycodes](quantum_keycodes.md) allow for easier customisation of your keymap than the basic ones provide, without having to define custom actions.
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|`KC_1`||||
+|`KC_2`||||
+|`KC_3`||||
+|`KC_4`||||
+|`KC_5`||||
+|`KC_6`||||
+|`KC_7`||||
+|`KC_8`||||
+|`KC_9`||||
+|`KC_0`||||
+|`KC_F1`||||
+|`KC_F2`||||
+|`KC_F3`||||
+|`KC_F4`||||
+|`KC_F5`||||
+|`KC_F6`||||
+|`KC_F7`||||
+|`KC_F8`||||
+|`KC_F9`||||
+|`KC_F10`||||
+|`KC_F11`||||
+|`KC_F12`||||
+|`KC_F13`||||
+|`KC_F14`||||
+|`KC_F15`||||
+|`KC_F16`||||
+|`KC_F17`||||
+|`KC_F18`||||
+|`KC_F19`||||
+|`KC_F20`||||
+|`KC_F21`||||
+|`KC_F22`||||
+|`KC_F23`||||
+|`KC_F24`||||
+|`KC_A`||||
+|`KC_B`||||
+|`KC_C`||||
+|`KC_D`||||
+|`KC_E`||||
+|`KC_F`||||
+|`KC_G`||||
+|`KC_H`||||
+|`KC_I`||||
+|`KC_J`||||
+|`KC_K`||||
+|`KC_L`||||
+|`KC_M`||||
+|`KC_N`||||
+|`KC_O`||||
+|`KC_P`||||
+|`KC_Q`||||
+|`KC_R`||||
+|`KC_S`||||
+|`KC_T`||||
+|`KC_U`||||
+|`KC_V`||||
+|`KC_W`||||
+|`KC_X`||||
+|`KC_Y`||||
+|`KC_Z`||||
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|`KC_ENTER`|`KC_ENT`|`Return (ENTER)`|
+|`KC_ESCAPE`|`KC_ESC`|`ESCAPE`|
+|`KC_BSPACE`|`KC_BSPC`|`DELETE (Backspace)`|
+|`KC_TAB`||`Tab`|
+|`KC_SPACE`|`KC_SPC`|Spacebar|
+|`KC_MINUS`|`KC_MINS`|`-` and `_`|
+|`KC_EQUAL`|`KC_EQL`|`=` and `+`|
+|`KC_LBRACKET`|`KC_LBRC`|`[` and `{`|
+|`KC_RBRACKET`|`KC_RBRC`|`]` and `}`|
+|`KC_BSLASH`|`KC_BSLS`|`\` and |
|
+|`KC_NONUS_HASH`|`KC_NUHS`|Non-US `#` and `~`|
+|`KC_NONUS_BSLASH`|`KC_NUBS`|Non-US `\` and |
|
+|`KC_INT1`|`KC_RO`|JIS `\` and |
|
+|`KC_INT2`|`KC_KANA`|International216|
+|`KC_INT3`|`KC_JYEN`|Yen Symbol (`¥`)|
+|`KC_SCOLON`|`KC_SCLN`|`;` and `:`|
+|`KC_QUOTE`|`KC_QUOT`|`‘` and `“`|
+|`KC_GRAVE`|`KC_GRV`|Grave Accent and Tilde|
+|`KC_COMMA`|`KC_COMM`|`,` and `<`|
+|`KC_DOT`||`.` and `>`|
+|`KC_SLASH`|`KC_SLSH`|`/` and `?`|
+|`KC_CAPSLOCK`|`KC_CAPS`|Caps Lock|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|`KC_LCTRL`|`KC_LCTL`|LeftControl|
+|`KC_LSHIFT`|`KC_LSFT`|LeftShift|
+|`KC_LALT`||LeftAlt|
+|`KC_LGUI`||Left GUI(Windows/Apple/Meta key)|
+|`KC_RCTRL`|`KC_RCTL`|RightControl|
+|`KC_RSHIFT`|`KC_RSFT`|RightShift|
+|`KC_RALT`||RightAlt|
+|`KC_RGUI`||Right GUI(Windows/Apple/Meta key)|
+|`KC_LOCKING_CAPS`|`KC_LCAP`|Locking Caps Lock|
+|`KC_LOCKING_NUM`|`KC_LNUM`|Locking Num Lock|
+|`KC_LOCKING_SCROLL`|`KC_LSCR`|Locking Scroll Lock|
+|`KC_INT4`|`KC_HENK`|JIS Henken|
+|`KC_INT5`|`KC_MHEN`|JIS Muhenken|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|`KC_PSCREEN`|`KC_PSCR`|PrintScreen|
+|`KC_SCROLLLOCK`|`KC_SLCK`|Scroll Lock|
+|`KC_PAUSE`|`KC_PAUS`|Pause|
+|`KC_INSERT`|`KC_INS`|Insert|
+|`KC_HOME`||Home|
+|`KC_PGUP`||PageUp|
+|`KC_DELETE`|`KC_DEL`|Delete Forward|
+|`KC_END`||End|
+|`KC_PGDOWN`|`KC_PGDN`|PageDown|
+|`KC_RIGHT`|`KC_RGHT`|RightArrow|
+|`KC_LEFT`||LeftArrow|
+|`KC_DOWN`||DownArrow|
+|`KC_UP`||UpArrow|
+|`KC_APPLICATION`|`KC_APP`|Application|
+|`KC_POWER`||Power|
+|`KC_EXECUTE`||Execute|
+|`KC_HELP`||Help|
+|`KC_MENU`||Menu|
+|`KC_SELECT`||Select|
+|`KC_AGAIN`||Again|
+|`KC_UNDO`||Undo|
+|`KC_CUT`||Cut|
+|`KC_COPY`||Copy|
+|`KC_PASTE`||Paste|
+|`KC_FIND`||Find|
+|`KC_ALT_ERASE`||Alternate Erase|
+|`KC_SYSREQ`||SysReq/Attention|
+|`KC_CANCEL`||Cancel|
+|`KC_CLEAR`||Clear|
+|`KC_PRIOR`||Prior|
+|`KC_RETURN`||Return|
+|`KC_SEPARATOR`||Separator|
+|`KC_OUT`||Out|
+|`KC_OPER`||Oper|
+|`KC_CLEAR_AGAIN`||Clear/Again|
+|`KC_CRSEL`||CrSel/Props|
+|`KC_EXSEL`||ExSel|
+|`KC_SYSTEM_POWER`|`KC_PWR`|System Power Down|
+|`KC_SYSTEM_SLEEP`|`KC_SLEP`|System Sleep|
+|`KC_SYSTEM_WAKE`|`KC_WAKE`|System Wake|
+|`KC_MAIL`|`KC_MAIL`||
+|`KC_CALCULATOR`|`KC_CALC`||
+|`KC_MY_COMPUTER`|`KC_MYCM`||
+|`KC_WWW_SEARCH`|`KC_WSCH`||
+|`KC_WWW_HOME`|`KC_WHOM`||
+|`KC_WWW_BACK`|`KC_WBAK`||
+|`KC_WWW_FORWARD`|`KC_WFWD`||
+|`KC_WWW_STOP`|`KC_WSTP`||
+|`KC_WWW_REFRESH`|`KC_WREF`||
+|`KC_WWW_FAVORITES`|`KC_WFAV`||
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|`KC_STOP`||Stop|
+|`KC__MUTE`||Mute|
+|`KC__VOLUP`||Volume Up|
+|`KC__VOLDOWN`||Volume Down|
+|`KC_AUDIO_MUTE`|`KC_MUTE`||
+|`KC_AUDIO_VOL_UP`|`KC_VOLU`||
+|`KC_AUDIO_VOL_DOWN`|`KC_VOLD`||
+|`KC_MEDIA_NEXT_TRACK`|`KC_MNXT`|Next Track (Windows)|
+|`KC_MEDIA_PREV_TRACK`|`KC_MPRV`|Previous Track (Windows)|
+|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD`|Next Track (macOS)|
+|`KC_MEDIA_REWIND`|`KC_MRWD`|Previous Track (macOS)|
+|`KC_MEDIA_STOP`|`KC_MSTP`||
+|`KC_MEDIA_PLAY_PAUSE`|`KC_MPLY`||
+|`KC_MEDIA_SELECT`|`KC_MSEL`||
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|`KC_NUMLOCK`|`KC_NLCK`|Keypad Num Lock and Clear|
+|`KC_KP_SLASH`|`KC_PSLS`|Keypad /|
+|`KC_KP_ASTERISK`|`KC_PAST`|Keypad *|
+|`KC_KP_MINUS`|`KC_PMNS`|Keypad -|
+|`KC_KP_PLUS`|`KC_PPLS`|Keypad +|
+|`KC_KP_ENTER`|`KC_PENT`|Keypad ENTER`|
+|`KC_KP_1`|`KC_P1`|Keypad 1 and End|
+|`KC_KP_2`|`KC_P2`|Keypad 2 and Down Arrow|
+|`KC_KP_3`|`KC_P3`|Keypad 3 and PageDn|
+|`KC_KP_4`|`KC_P4`|Keypad 4 and Left Arrow|
+|`KC_KP_5`|`KC_P5`|Keypad 5|
+|`KC_KP_6`|`KC_P6`|Keypad 6 and Right Arrow|
+|`KC_KP_7`|`KC_P7`|Keypad 7 and Home|
+|`KC_KP_8`|`KC_P8`|Keypad 8 and Up Arrow|
+|`KC_KP_9`|`KC_P9`|Keypad 9 and PageUp|
+|`KC_KP_0`|`KC_P0`|Keypad 0 and Insert|
+|`KC_KP_DOT`|`KC_PDOT`|Keypad . and Delete|
+|`KC_KP_EQUAL`|`KC_PEQL`|Keypad =|
+|`KC_KP_COMMA`|`KC_PCMM`|Keypad Comma|
+|`KC_KP_EQUAL_AS400`||Keypad Equal Sign|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|`KC_NO`||Ignore this key. (NOOP) |
+|`KC_TRNS`||Make this key transparent to find the key on a lower layer.|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`KC_MS_UP`](mouse_keys.md)|`KC_MS_U`|Mouse Cursor Up|
+|[`KC_MS_DOWN`](mouse_keys.md)|`KC_MS_D`|Mouse Cursor Down|
+|[`KC_MS_LEFT`](mouse_keys.md)|`KC_MS_L`|Mouse Cursor Left|
+|[`KC_MS_RIGHT`](mouse_keys.md)|`KC_MS_R`|Mouse Cursor Right|
+|[`KC_MS_BTN1`](mouse_keys.md)|`KC_BTN1`|Mouse Button 1|
+|[`KC_MS_BTN2`](mouse_keys.md)|`KC_BTN2`|Mouse Button 2|
+|[`KC_MS_BTN3`](mouse_keys.md)|`KC_BTN3`|Mouse Button 3|
+|[`KC_MS_BTN4`](mouse_keys.md)|`KC_BTN4`|Mouse Button 4|
+|[`KC_MS_BTN5`](mouse_keys.md)|`KC_BTN5`|Mouse Button 5|
+|[`KC_MS_WH_UP`](mouse_keys.md)|`KC_WH_U`|Mouse Wheel Up|
+|[`KC_MS_WH_DOWN`](mouse_keys.md)|`KC_WH_D`|Mouse Wheel Down|
+|[`KC_MS_WH_LEFT`](mouse_keys.md)|`KC_WH_L`|Mouse Wheel Left|
+|[`KC_MS_WH_RIGHT`](mouse_keys.md)|`KC_WH_R`|Mouse Wheel Right|
+|[`KC_MS_ACCEL0`](mouse_keys.md)|`KC_ACL0`|Mouse Acceleration 0|
+|[`KC_MS_ACCEL1`](mouse_keys.md)|`KC_ACL1`|Mouse Acceleration 1|
+|[`KC_MS_ACCEL2`](mouse_keys.md)|`KC_ACL2`|Mouse Acceleration 2|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`RESET`](quantum_keycodes.md#qmk-keycodes)||Put the keyboard into DFU mode for flashing|
+|[`DEBUG`](quantum_keycodes.md#qmk-keycodes)||Toggles debug mode|
+|[`KC_GESC`](quantum_keycodes.md#qmk-keycodes)|`GRAVE_ESC`|Acts as escape when pressed normally but when pressed with Shift or GUI will send a `~`|
+|[`KC_LSPO`](quantum_keycodes.md#qmk-keycodes)||Left shift when held, open paranthesis when tapped|
+|[`KC_RSPC`](quantum_keycodes.md#qmk-keycodes)||Right shift when held, close paranthesis when tapped|
+|[`KC_LEAD`](quantum_keycodes.md#qmk-keycodes)||The [leader key](leader_key.md)|
+|[`FUNC(n)`](quantum_keycodes.md#qmk-keycodes)|`F(n)`|Call `fn_action(n)`|
+|[`M(n)`](quantum_keycodes.md#qmk-keycodes)||to call macro n|
+|[`MACROTAP(n)`](quantum_keycodes.md#qmk-keycodes)||to macro-tap n idk FIXME`|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`MAGIC_SWAP_CONTROL_CAPSLOCK`](feature_bootmagic.md)||Swap Capslock and Left Control|
+|[`MAGIC_CAPSLOCK_TO_CONTROL`](feature_bootmagic.md)||Treat Capslock like a Control Key|
+|[`MAGIC_SWAP_LALT_LGUI`](feature_bootmagic.md)||Swap the left Alt and GUI keys|
+|[`MAGIC_SWAP_RALT_RGUI`](feature_bootmagic.md)||Swap the right Alt and GUI keys|
+|[`MAGIC_NO_GUI`](feature_bootmagic.md)||Disable the GUI key|
+|[`MAGIC_SWAP_GRAVE_ESC`](feature_bootmagic.md)||Swap the Grave and Esc key.|
+|[`MAGIC_SWAP_BACKSLASH_BACKSPACE`](feature_bootmagic.md)||Swap backslack and backspace|
+|[`MAGIC_HOST_NKRO`](feature_bootmagic.md)||Force NKRO on|
+|[`MAGIC_SWAP_ALT_GUI`/`AG_SWAP`](feature_bootmagic.md)||Swap Alt and Gui on both sides|
+|[`MAGIC_UNSWAP_CONTROL_CAPSLOCK`](feature_bootmagic.md)||Disable the Control/Capslock swap|
+|[`MAGIC_UNCAPSLOCK_TO_CONTROL`](feature_bootmagic.md)||Disable treating Capslock like Control |
+|[`MAGIC_UNSWAP_LALT_LGUI`](feature_bootmagic.md)||Disable Left Alt and GUI switching|
+|[`MAGIC_UNSWAP_RALT_RGUI`](feature_bootmagic.md)||Disable Right Alt and GUI switching|
+|[`MAGIC_UNNO_GUI`](feature_bootmagic.md)||Enable the GUI key |
+|[`MAGIC_UNSWAP_GRAVE_ESC`](feature_bootmagic.md)||Disable the Grave/Esc swap |
+|[`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`](feature_bootmagic.md)||Disable the backslash/backspace swap|
+|[`MAGIC_UNHOST_NKRO`](feature_bootmagic.md)||Force NKRO off|
+|[`MAGIC_UNSWAP_ALT_GUI`/`AG_NORM`](feature_bootmagic.md)||Disable the Alt/GUI switching|
+|[`MAGIC_TOGGLE_NKRO`](feature_bootmagic.md)||Turn NKRO on or off|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`BL_x`](feature_backlight.md)||Set a specific backlight level between 0-9|
+|[`BL_ON`](feature_backlight.md)||An alias for `BL_9`|
+|[`BL_OFF`](feature_backlight.md)||An alias for `BL_0`|
+|[`BL_DEC`](feature_backlight.md)||Turn the backlight level down by 1|
+|[`BL_INC`](feature_backlight.md)||Turn the backlight level up by 1|
+|[`BL_TOGG`](feature_backlight.md)||Toggle the backlight on or off|
+|[`BL_STEP`](feature_backlight.md)||Step through backlight levels, wrapping around to 0 when you reach the top.|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`RGB_TOG`](feature_rgblight.md)||toggle on/off|
+|[`RGB_MOD`](feature_rgblight.md)||cycle through modes|
+|[`RGB_HUI`](feature_rgblight.md)||hue increase|
+|[`RGB_HUD`](feature_rgblight.md)||hue decrease|
+|[`RGB_SAI`](feature_rgblight.md)||saturation increase|
+|[`RGB_SAD`](feature_rgblight.md)||saturation decrease|
+|[`RGB_VAI`](feature_rgblight.md)||value increase|
+|[`RGB_VAD`](feature_rgblight.md)||value decrease|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`PRINT_ON`](feature_thermal_printer.md)||Start printing everything the user types|
+|[`PRINT_OFF`](feature_thermal_printer.md)||Stop printing everything the user types|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`OUT_AUTO`](feature_bluetooth.md)||auto mode|
+|[`OUT_USB`](feature_bluetooth.md)||usb only|
+|[`OUT_BT`](feature_bluetooth.md)||bluetooth (when `BLUETOOTH_ENABLE`)|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`KC_HYPR`](quantum_keycodes.md#modifiers)||Hold down LCTL + LSFT + LALT + LGUI`|
+|[`KC_MEH`](quantum_keycodes.md#modifiers)||Hold down LCTL + LSFT + LALT`|
+|[`LCTL(kc)`](quantum_keycodes.md#modifiers)||`LCTL` + `kc`|
+|[`LSFT(kc)`](quantum_keycodes.md#modifiers)|[`S(kc)`](quantum_keycodes.md#modifiers)|`LSFT` + `kc`|
+|[`LALT(kc)`](quantum_keycodes.md#modifiers)||`LALT` + `kc`|
+|[`LGUI(kc)`](quantum_keycodes.md#modifiers)||`LGUI` + `kc`|
+|[`RCTL(kc)`](quantum_keycodes.md#modifiers)||`RCTL` + `kc`|
+|[`RSFT(kc)`](quantum_keycodes.md#modifiers)||`RSFT` + `kc`|
+|[`RALT(kc)`](quantum_keycodes.md#modifiers)||`RALT` + `kc`|
+|[`RGUI(kc)`](quantum_keycodes.md#modifiers)||`RGUI` + `kc`|
+|[`HYPR(kc)`](quantum_keycodes.md#modifiers)||`LCTL` + `LSFT` + `LALT` + `LGUI` + `kc`|
+|[`MEH(kc)`](quantum_keycodes.md#modifiers)||`LCTL` + `LSFT` + `LALT` + `kc`|
+|[`LCAG(kc)`](quantum_keycodes.md#modifiers)||`LCTL` + `LALT` + `LGUI` + `kc`|
+|[`ALTG(kc)`](quantum_keycodes.md#modifiers)||`RCTL` + `RALT` + `kc`|
+|[`SCMD(kc)`](quantum_keycodes.md#modifiers)|[`SWIN(kc)`](quantum_keycodes.md#modifiers)|`LGUI` + `LSFT` + `kc`|
+|[`LCA(kc)`](quantum_keycodes.md#modifiers)||`LCTL` + `LALT` + `kc`|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`CTL_T(kc)`](quantum_keycodes.md#mod-tap-keys)|[`LCTL_T(kc)`](quantum_keycodes.md#mod-tap-keys)|`LCTL` when held, `kc` when tapped|
+|[`RCTL_T(kc)`](quantum_keycodes.md#mod-tap-keys)||[`RCTL` when held, `kc` when tapped|
+|[`SFT_T(kc)`](quantum_keycodes.md#mod-tap-keys)|[`LSFT_T(kc)`](quantum_keycodes.md#mod-tap-keys)|`LSFT` when held, `kc` when tapped|
+|[`RSFT_T(kc)`](quantum_keycodes.md#mod-tap-keys)||[`RSFT` when held, `kc` when tapped|
+|[`ALT_T(kc)`](quantum_keycodes.md#mod-tap-keys)|[`LALT_T(kc)`](quantum_keycodes.md#mod-tap-keys)|`LALT` when held, `kc` when tapped|
+|[`RALT_T(kc)`](quantum_keycodes.md#mod-tap-keys)|[`ALGR_T(kc)`](quantum_keycodes.md#mod-tap-keys)|`RALT` when held, `kc` when tapped|
+|[`GUI_T(kc)`](quantum_keycodes.md#mod-tap-keys)|[`LGUI_T(kc)`](quantum_keycodes.md#mod-tap-keys)|`LGUI` when held, `kc` when tapped|
+|[`RGUI_T(kc)`](quantum_keycodes.md#mod-tap-keys)||`RGUI` when held, `kc` when tapped|
+|[`C_S_T(kc)`](quantum_keycodes.md#mod-tap-keys)||`LCTL` + `LSFT` when held, `kc` when tapped|
+|[`MEH_T(kc)`](quantum_keycodes.md#mod-tap-keys)||`LCTL` + `LSFT` + `LALT` when held, `kc` when tapped|
+|[`LCAG_T(kc)`](quantum_keycodes.md#mod-tap-keys)||`LCTL` + `LALT` + `LGUI` when held, `kc` when tapped|
+|[`RCAG_T(kc)`](quantum_keycodes.md#mod-tap-keys)||`RCTL` + `RALT` + `RGUI` when held, `kc` when tapped|
+|[`ALL_T(kc)`](quantum_keycodes.md#mod-tap-keys)||`LCTL` + `LSFT` + `LALT` + `LGUI` when held, `kc` when tapped [more info](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
+|[`SCMD_T(kc)`](quantum_keycodes.md#mod-tap-keys)|[`SWIN_T(kc)`](quantum_keycodes.md#mod-tap-keys)|`LGUI` + `LSFT` when held, `kc` when tapped|
+|[`LCA_T(kc)`](quantum_keycodes.md#mod-tap-keys)||`LCTL` + `LALT` when held, `kc` when tapped|
+|Short Name|Long Name|Description|
+|----------|---------|-----------|
+|[`KC_TILD`](keycodes_us_ansi_shifted.md)|`KC_TILDE`|tilde `~`|
+|[`KC_EXLM`](keycodes_us_ansi_shifted.md)|`KC_EXCLAIM`|exclamation mark `!`|
+|[`KC_AT`](keycodes_us_ansi_shifted.md)||at sign `@`|
+|[`KC_HASH`](keycodes_us_ansi_shifted.md)||hash sign `#`|
+|[`KC_DLR`](keycodes_us_ansi_shifted.md)|`KC_DOLLAR`|dollar sign `$`|
+|[`KC_PERC`](keycodes_us_ansi_shifted.md)|`KC_PERCENT`|percent sign `%`|
+|[`KC_CIRC`](keycodes_us_ansi_shifted.md)|`KC_CIRCUMFLEX`|circumflex `^`|
+|[`KC_AMPR`](keycodes_us_ansi_shifted.md)|`KC_AMPERSAND`|ampersand `&`|
+|[`KC_ASTR`](keycodes_us_ansi_shifted.md)|`KC_ASTERISK`|asterisk `*`|
+|[`KC_LPRN`](keycodes_us_ansi_shifted.md)|`KC_LEFT_PAREN`|left parenthesis `(`|
+|[`KC_RPRN`](keycodes_us_ansi_shifted.md)|`KC_RIGHT_PAREN`|right parenthesis `)`|
+|[`KC_UNDS`](keycodes_us_ansi_shifted.md)|`KC_UNDERSCORE`|underscore `_`|
+|[`KC_PLUS`](keycodes_us_ansi_shifted.md)||plus sign `+`|
+|[`KC_LCBR`](keycodes_us_ansi_shifted.md)|`KC_LEFT_CURLY_BRACE`|left curly brace `{`|
+|[`KC_RCBR`](keycodes_us_ansi_shifted.md)|`KC_RIGHT_CURLY_BRACE`|right curly brace `}`|
+|[`KC_LT`/`KC_LABK`](keycodes_us_ansi_shifted.md)|`KC_LEFT_ANGLE_BRACKET`|left angle bracket `<`|
+|[`KC_GT`/`KC_RABK`](keycodes_us_ansi_shifted.md)|`KC_RIGHT_ANGLE_BRACKET`|right angle bracket `>`|
+|[`KC_COLN`](keycodes_us_ansi_shifted.md)|`KC_COLON`|colon `:`|
+|[`KC_PIPE`](keycodes_us_ansi_shifted.md)||pipe `\|`|
+|[`KC_QUES`](keycodes_us_ansi_shifted.md)|`KC_QUESTION`|question mark `?`|
+|[`KC_DQT`/`KC_DQUO`](keycodes_us_ansi_shifted.md)|`KC_DOUBLE_QUOTE`|double quote `"`|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`LT(layer, kc)`](feature_common_shortcuts.md#switching-and-toggling-layers)||turn on layer (0-15) when held, kc ([basic keycodes](basic_keycodes.md)) when tapped|
+|[`TO(layer)`](feature_common_shortcuts.md#switching-and-toggling-layers)||turn on layer when depressed|
+|[`MO(layer)`](feature_common_shortcuts.md#switching-and-toggling-layers)||momentarily turn on layer when depressed (requires `KC_TRNS` on destination layer)|
+|[`DF(layer)`](feature_common_shortcuts.md#switching-and-toggling-layers)||sets the base (default) layer|
+|[`TG(layer)`](feature_common_shortcuts.md#switching-and-toggling-layers)||toggle layer on/off|
+|[`TT(layer)](feature_common_shortcuts.md#switching-and-toggling-layers)`||tap toggle? idk FIXME`|
+|[`OSM(mod)`](quantum_keycodes.md#one-shot-keys)||hold mod for one keypress|
+|[`OSL(layer)`](quantum_keycodes.md#one-shot-keys)||switch to layer for one keypress|
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|[`UNICODE(n)`](unicode.md)|[`UC(n)`](unicode.md)|if `UNICODE_ENABLE`, this will send characters up to `0x7FFF`|
+|[`X(n)`](unicode.md)||if `UNICODEMAP_ENABLE`, also sends unicode via a different method|
diff --git a/docs/keycodes_us_ansi_shifted.md b/docs/keycodes_us_ansi_shifted.md
new file mode 100644
index 000000000..6c7ef4caa
--- /dev/null
+++ b/docs/keycodes_us_ansi_shifted.md
@@ -0,0 +1,31 @@
+# US ANSI Shifted symbols
+
+These keycodes correspond to characters that are "shifted" on a standard US ANSI keyboards. They do not have dedicated keycodes but are instead typed by holding down shift and then sending a keycode.
+
+It's important to remember that all of these keycodes send a left shift - this may cause unintended actions if unaccounted for. The short code is preferred in most situations.
+
+## US ANSI Shifted Keycodes
+
+|Short Name|Long Name|Description|
+|----------|---------|-----------|
+|`KC_TILD`|`KC_TILDE`|tilde `~`|
+|`KC_EXLM`|`KC_EXCLAIM`|exclamation mark `!`|
+|`KC_AT`||at sign `@`|
+|`KC_HASH`||hash sign `#`|
+|`KC_DLR`|`KC_DOLLAR`|dollar sign `$`|
+|`KC_PERC`|`KC_PERCENT`|percent sign `%`|
+|`KC_CIRC`|`KC_CIRCUMFLEX`|circumflex `^`|
+|`KC_AMPR`|`KC_AMPERSAND`|ampersand `&`|
+|`KC_ASTR`|`KC_ASTERISK`|asterisk `*`|
+|`KC_LPRN`|`KC_LEFT_PAREN`|left parenthesis `(`|
+|`KC_RPRN`|`KC_RIGHT_PAREN`|right parenthesis `)`|
+|`KC_UNDS`|`KC_UNDERSCORE`|underscore `_`|
+|`KC_PLUS`||plus sign `+`|
+|`KC_LCBR`|`KC_LEFT_CURLY_BRACE`|left curly brace `{`|
+|`KC_RCBR`|`KC_RIGHT_CURLY_BRACE`|right curly brace `}`|
+|`KC_LT`/`KC_LABK`|`KC_LEFT_ANGLE_BRACKET`|left angle bracket `<`|
+|`KC_GT`/`KC_RABK`|`KC_RIGHT_ANGLE_BRACKET`|right angle bracket `>`|
+|`KC_COLN`|`KC_COLON`|colon `:`|
+|`KC_PIPE`||pipe `\|`|
+|`KC_QUES`|`KC_QUESTION`|question mark `?`|
+|`KC_DQT`/`KC_DQUO`|`KC_DOUBLE_QUOTE`|double quote `"`|
diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md
index 0f2b8e72f..2e17ae4b7 100644
--- a/docs/quantum_keycodes.md
+++ b/docs/quantum_keycodes.md
@@ -1,8 +1,10 @@
# Quantum Keycodes
+Quantum keycodes allow for easier customisation of your keymap than the basic ones provide, without having to define custom actions.
+
All keycodes within quantum are numbers between `0x0000` and `0xFFFF`. Within your `keymap.c` it may look like you have functions and other special cases, but ultimately the C preprocessor will translate those into a single 4 byte integer. QMK has reserved `0x0000` through `0x00FF` for standard keycodes. These are keycodes such as `KC_A`, `KC_1`, and `KC_LCTL`, which are basic keys defined in the USB HID specification.
-On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are used to implement advanced quantum features. If you define your own custom keycodes they will be put into this range as well. Keycodes above `0x00FF` may not be used with any of the mod/layer-tap keys listed
+On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are used to implement advanced quantum features. If you define your own custom keycodes they will be put into this range as well.
## QMK keycodes
@@ -14,341 +16,7 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
|`KC_LSPO`|Left shift when held, open paranthesis when tapped|
|`KC_RSPC`|Right shift when held, close paranthesis when tapped|
|`KC_LEAD`|The [leader key](leader_key.md)|
+|`KC_LOCK`|The [lock key](key_lock.md)|
|`FUNC(n)`/`F(n)`|Call `fn_action(n)`|
|`M(n)`|to call macro n|
|`MACROTAP(n)`|to macro-tap n idk FIXME|
-|`KC_LOCK`|The [lock key](key_lock.md)|
-
-## Bootmagic Keycodes
-
-Shortcuts for bootmagic options (these work even when bootmagic is off.)
-
-|Name|Description|
-|----|-----------|
-|`MAGIC_SWAP_CONTROL_CAPSLOCK`|Swap Capslock and Left Control|
-|`MAGIC_CAPSLOCK_TO_CONTROL`|Treat Capslock like a Control Key|
-|`MAGIC_SWAP_LALT_LGUI`|Swap the left Alt and GUI keys|
-|`MAGIC_SWAP_RALT_RGUI`|Swap the right Alt and GUI keys|
-|`MAGIC_NO_GUI`|Disable the GUI key|
-|`MAGIC_SWAP_GRAVE_ESC`|Swap the Grave and Esc key.|
-|`MAGIC_SWAP_BACKSLASH_BACKSPACE`|Swap backslack and backspace|
-|`MAGIC_HOST_NKRO`|Force NKRO on|
-|`MAGIC_SWAP_ALT_GUI`/`AG_SWAP`|Swap Alt and Gui on both sides|
-|`MAGIC_UNSWAP_CONTROL_CAPSLOCK`|Disable the Control/Capslock swap|
-|`MAGIC_UNCAPSLOCK_TO_CONTROL`|Disable treating Capslock like Control |
-|`MAGIC_UNSWAP_LALT_LGUI`|Disable Left Alt and GUI switching|
-|`MAGIC_UNSWAP_RALT_RGUI`|Disable Right Alt and GUI switching|
-|`MAGIC_UNNO_GUI`|Enable the GUI key |
-|`MAGIC_UNSWAP_GRAVE_ESC`|Disable the Grave/Esc swap |
-|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|Disable the backslash/backspace swap|
-|`MAGIC_UNHOST_NKRO`|Force NKRO off|
-|`MAGIC_UNSWAP_ALT_GUI`/`AG_NORM`|Disable the Alt/GUI switching|
-|`MAGIC_TOGGLE_NKRO`|Turn NKRO on or off|
-
-
-
-## Backlight
-
-These keycodes control the backlight. Most keyboards use this for single color in-switch lighting.
-
-|Name|Description|
-|----|-----------|
-|`BL_x`|Set a specific backlight level between 0-9|
-|`BL_ON`|An alias for `BL_9`|
-|`BL_OFF`|An alias for `BL_0`|
-|`BL_DEC`|Turn the backlight level down by 1|
-|`BL_INC`|Turn the backlight level up by 1|
-|`BL_TOGG`|Toggle the backlight on or off|
-|`BL_STEP`|Step through backlight levels, wrapping around to 0 when you reach the top.|
-
-## RGBLIGHT WS2818 LEDs
-
-This controls the `RGBLIGHT` functionality. Most keyboards use WS2812 (and compatible) LEDs for underlight or case lighting.
-
-|Name|Description|
-|----|-----------|
-|`RGB_TOG`|toggle on/off|
-|`RGB_MOD`|cycle through modes|
-|`RGB_HUI`|hue increase|
-|`RGB_HUD`|hue decrease|
-|`RGB_SAI`|saturation increase|
-|`RGB_SAD`|saturation decrease|
-|`RGB_VAI`|value increase|
-|`RGB_VAD`|value decrease|
-
-## Thermal Printer (experimental)
-
-|Name|Description|
-|----|-----------|
-|`PRINT_ON`|Start printing everything the user types|
-|`PRINT_OFF`|Stop printing everything the user types|
-
-## Keyboard output selection
-
-This is used when multiple keyboard outputs can be selected. Currently this only allows for switching between USB and Bluetooth on keyboards that support both.
-
-|Name|Description|
-|----|-----------|
-|`OUT_AUTO`|auto mode|
-|`OUT_USB`|usb only|
-|`OUT_BT`|bluetooth (when `BLUETOOTH_ENABLE`)|
-
-## Modifiers
-
-These are special keycodes that simulate pressing several modifiers at once.
-
-|Name|Description|
-|----|-----------|
-|`KC_HYPR`|Hold down LCTL + LSFT + LALT + LGUI|
-|`KC_MEH`|Hold down LCTL + LSFT + LALT|
-
-/* FIXME: Should we have these in QMK too?
- * |`KC_LCAG`|`LCTL` + `LALT` + `LGUI`|
- * |`KC_ALTG`|`RCTL` + `RALT`|
- * |`KC_SCMD`/`KC_SWIN`|`LGUI` + `LSFT`|
- * |`KC_LCA`|`LCTL` + `LALT`|
- */
-
-### Modifiers with keys
-
-|Name|Description|
-|----|-----------|
-|`LCTL(kc)`|`LCTL` + `kc`|
-|`LSFT(kc)`/`S(kc)`|`LSFT` + `kc`|
-|`LALT(kc)`|`LALT` + `kc`|
-|`LGUI(kc)`|`LGUI` + `kc`|
-|`RCTL(kc)`|`RCTL` + `kc`|
-|`RSFT(kc)`|`RSFT` + `kc`|
-|`RALT(kc)`|`RALT` + `kc`|
-|`RGUI(kc)`|`RGUI` + `kc`|
-|`HYPR(kc)`|`LCTL` + `LSFT` + `LALT` + `LGUI` + `kc`|
-|`MEH(kc)`|`LCTL` + `LSFT` + `LALT` + `kc`|
-|`LCAG(kc)`|`LCTL` + `LALT` + `LGUI` + `kc`|
-|`ALTG(kc)`|`RCTL` + `RALT` + `kc`|
-|`SCMD(kc)`/`SWIN(kc)`|`LGUI` + `LSFT` + `kc`|
-|`LCA(kc)`|`LCTL` + `LALT` + `kc`|
-
-### One Shot Keys
-
-Most modifiers work by being held down while you push another key. You can use `OSM()` to setup a "One Shot" modifier. When you tap a one shot mod it will remain is a pressed state until you press another key.
-
-To specify a your modifier you need to pass the `MOD` form of the key. For example, if you want to setup a One Shot Control you would use `OSM(MOD_LCTL)`.
-
-|Name|Description|
-|----|-----------|
-|`OSM(mod)`|use mod for one keypress|
-|`OSL(layer)`|switch to layer for one keypress|
-
-### Mod-tap keys
-
-These keycodes will press the mod(s) when held, and the key when tapped. They only work with [basic keycodes](basic_keycodes.md).
-
-|Name|Description|
-|----|-----------|
-|`CTL_T(kc)`/`LCTL_T(kc)`|`LCTL` when held, `kc` when tapped|
-|`RCTL_T(kc)`|`RCTL` when held, `kc` when tapped|
-|`SFT_T(kc)`/`LSFT_T(kc)`|`LSFT` when held, `kc` when tapped|
-|`RSFT_T(kc)`|`RSFT` when held, `kc` when tapped|
-|`ALT_T(kc)`/`LALT_T(kc)`|`LALT` when held, `kc` when tapped|
-|`RALT_T(kc)`/`ALGR_T(kc)`|`RALT` when held, `kc` when tapped|
-|`GUI_T(kc)`/`LGUI_T(kc)`|`LGUI` when held, `kc` when tapped|
-|`RGUI_T(kc)`|`RGUI` when held, `kc` when tapped|
-|`C_S_T(kc)`|`LCTL` + `LSFT` when held, `kc` when tapped|
-|`MEH_T(kc)`|`LCTL` + `LSFT` + `LALT` when held, `kc` when tapped|
-|`LCAG_T(kc)`|`LCTL` + `LALT` + `LGUI` when held, `kc` when tapped|
-|`RCAG_T(kc)`|`RCTL` + `RALT` + `RGUI` when held, `kc` when tapped|
-|`ALL_T(kc)`|`LCTL` + `LSFT` + `LALT` + `LGUI` when held, `kc` when tapped [more info](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
-|`SCMD_T(kc)`/`SWIN_T(kc)`|`LGUI` + `LSFT` when held, `kc` when tapped|
-|`LCA_T(kc)`|`LCTL` + `LALT` when held, `kc` when tapped|
-
-## US ANSI Shifted symbols
-
-These keycodes correspond to characters that are "shifted" on a standard US ANSI keyboards. They do not have dedicated keycodes but are instead typed by holding down shift and then sending a keycode.
-
-It's important to remember that all of these keycodes send a left shift - this may cause unintended actions if unaccounted for. The short code is preferred in most situations.
-
-|Short Name|Long Name|Description|
-|----------|---------|-----------|
-|`KC_TILD`|`KC_TILDE`|tilde `~`|
-|`KC_EXLM`|`KC_EXCLAIM`|exclamation mark `!`|
-|`KC_AT`||at sign `@`|
-|`KC_HASH`||hash sign `#`|
-|`KC_DLR`|`KC_DOLLAR`|dollar sign `$`|
-|`KC_PERC`|`KC_PERCENT`|percent sign `%`|
-|`KC_CIRC`|`KC_CIRCUMFLEX`|circumflex `^`|
-|`KC_AMPR`|`KC_AMPERSAND`|ampersand `&`|
-|`KC_ASTR`|`KC_ASTERISK`|asterisk `*`|
-|`KC_LPRN`|`KC_LEFT_PAREN`|left parenthesis `(`|
-|`KC_RPRN`|`KC_RIGHT_PAREN`|right parenthesis `)`|
-|`KC_UNDS`|`KC_UNDERSCORE`|underscore `_`|
-|`KC_PLUS`||plus sign `+`|
-|`KC_LCBR`|`KC_LEFT_CURLY_BRACE`|left curly brace `{`|
-|`KC_RCBR`|`KC_RIGHT_CURLY_BRACE`|right curly brace `}`|
-|`KC_LT`/`KC_LABK`|`KC_LEFT_ANGLE_BRACKET`|left angle bracket `<`|
-|`KC_GT`/`KC_RABK`|`KC_RIGHT_ANGLE_BRACKET`|right angle bracket `>`|
-|`KC_COLN`|`KC_COLON`|colon `:`|
-|`KC_PIPE`||pipe `\|`|
-|`KC_QUES`|`KC_QUESTION`|question mark `?`|
-|`KC_DQT`/`KC_DQUO`|`KC_DOUBLE_QUOTE`|double quote `"`|
-
-## Layer Changes
-
-These are keycodes that can be used to change the current layer.
-
-|Name|Description|
-|----|-----------|
-|`LT(layer, kc)`|turn on layer (0-15) when held, kc ([basic keycodes](basic_keycodes.md)) when tapped|
-|`TO(layer)`|turn on layer when depressed|
-|`MO(layer)`|momentarily turn on layer when depressed (requires `KC_TRNS` on destination layer)|
-|`DF(layer)`|sets the base (default) layer|
-|`TG(layer)`|toggle layer on/off|
-|`TT(layer)`|tap toggle? idk FIXME|
-|`OSL(layer)`|switch to layer for one keycode|
-
-## Unicode
-
-These keycodes can be used in conjuction with the [Unicode](unicode_and_additional_language_support.md) support.
-
-|`UNICODE(n)`/`UC(n)`|if `UNICODE_ENABLE`, this will send characters up to `0x7FFF`|
-|`X(n)`|if `UNICODEMAP_ENABLE`, also sends unicode via a different method|
-
-# `SAFE_RANGE`, or safely defining custom keycodes
-
-Sometimes you want to define your own custom keycodes to make your keymap easier to read. QMK provides `SAFE_RANGE` to help you do that. `SAFE_RANGE` is the first available keycode in the `0x0000`-`0xFFFF` range and you can use it when creating your own custom keycode enum:
-
-```
-enum my_keycodes {
- FOO = SAFE_RANGE,
- BAR
-};
-```
-
-You can then use `process_record_user()` to do something with your keycode:
-
-```
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case FOO:
- // Do something here
- break;
- case BAR:
- // Do something here
- break;
- }
-}
-```