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