aboutsummaryrefslogtreecommitdiff
path: root/docs/quantum_keycodes.md
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2017-06-29 00:15:07 -0400
committerJack Humbert <jack.humb@gmail.com>2017-06-29 00:15:07 -0400
commitd5244c6cf4939301b18ecf07650df6a6f9800e07 (patch)
treea9ad4ea0031d3e744c1e98b5e7c918f0417dedb8 /docs/quantum_keycodes.md
parent40d82906cb2556ead29e2288788c7a26caf1f026 (diff)
downloadqmk_firmware-d5244c6cf4939301b18ecf07650df6a6f9800e07.tar.gz
qmk_firmware-d5244c6cf4939301b18ecf07650df6a6f9800e07.zip
restructure keycode docs
Diffstat (limited to 'docs/quantum_keycodes.md')
-rw-r--r--docs/quantum_keycodes.md274
1 files changed, 274 insertions, 0 deletions
diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md
new file mode 100644
index 000000000..81eb64701
--- /dev/null
+++ b/docs/quantum_keycodes.md
@@ -0,0 +1,274 @@
1# Quantum Keycodes
2
3Something important to realise with keycodes is that they are all numbers between `0x0` and `0xFFFF` - even though they may look like functions, words, or phrases, they are all shortcuts to some number. This allows us to define all of what they do in different places, and store keymaps in a relatively small place (arrays). If you try to "call" a keycode by placing it somewhere besides a keymap, it may compile, but it won't do anything useful.
4
5All keycodes on this page have a value above `0xFF` (values less are considered the [basic keycodes](basic_keycodes.md)) and won't work with any of the mod/layer-tap keys listed at the bottom.
6
7* `SAFE_RANGE` is always the last keycode in the quantum list, and where custom lists can begin
8* `RESET` puts the keyboard into DFU mode for flashing
9* `DEBUG` toggles debug mode
10* Shortcuts for bootmagic options (work when bootmagic is off)
11 * `MAGIC_SWAP_CONTROL_CAPSLOCK`
12 * `MAGIC_CAPSLOCK_TO_CONTROL`
13 * `MAGIC_SWAP_LALT_LGUI`
14 * `MAGIC_SWAP_RALT_RGUI`
15 * `MAGIC_NO_GUI`
16 * `MAGIC_SWAP_GRAVE_ESC`
17 * `MAGIC_SWAP_BACKSLASH_BACKSPACE`
18 * `MAGIC_HOST_NKRO`
19 * `MAGIC_SWAP_ALT_GUI`/`AG_SWAP`
20 * `MAGIC_UNSWAP_CONTROL_CAPSLOCK`
21 * `MAGIC_UNCAPSLOCK_TO_CONTROL`
22 * `MAGIC_UNSWAP_LALT_LGUI`
23 * `MAGIC_UNSWAP_RALT_RGUI`
24 * `MAGIC_UNNO_GUI`
25 * `MAGIC_UNSWAP_GRAVE_ESC`
26 * `MAGIC_UNSWAP_BACKSLASH_BACKSPACE`
27 * `MAGIC_UNHOST_NKRO`
28 * `MAGIC_UNSWAP_ALT_GUI`/`AG_NORM`
29 * `MAGIC_TOGGLE_NKRO`
30* `KC_GESC`/`GRAVE_ESC` acts as escape when pressed normally but when pressed with a mod will send a `~`
31* `KC_LSPO` left shift when held, open paranthesis when tapped
32* `KC_RSPC` right shift when held, close paranthesis when tapped
33* `KC_LEAD` the leader key
34
35* `FUNC(n)`/`F(n)` to call `fn_action` n
36* `M(n)` to call macro n
37* `MACROTAP(n)` to macro-tap n idk FIXME
38
39## Audio
40
41```c
42#ifdef AUDIO_ENABLE
43 AU_ON,
44 AU_OFF,
45 AU_TOG,
46
47 #ifdef FAUXCLICKY_ENABLE
48 FC_ON,
49 FC_OFF,
50 FC_TOG,
51 #endif
52
53 // Music mode on/off/toggle
54 MU_ON,
55 MU_OFF,
56 MU_TOG,
57
58 // Music voice iterate
59 MUV_IN,
60 MUV_DE,
61#endif
62```
63
64## Midi
65
66#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
67 MI_ON, // send midi notes when music mode is enabled
68 MI_OFF, // don't send midi notes when music mode is enabled
69#endif
70
71MIDI_TONE_MIN,
72MIDI_TONE_MAX
73
74MI_C = MIDI_TONE_MIN,
75MI_Cs,
76MI_Db = MI_Cs,
77MI_D,
78MI_Ds,
79MI_Eb = MI_Ds,
80MI_E,
81MI_F,
82MI_Fs,
83MI_Gb = MI_Fs,
84MI_G,
85MI_Gs,
86MI_Ab = MI_Gs,
87MI_A,
88MI_As,
89MI_Bb = MI_As,
90MI_B,
91
92MIDI_TONE_KEYCODE_OCTAVES > 1
93
94where x = 1-5:
95MI_C_x,
96MI_Cs_x,
97MI_Db_x = MI_Cs_x,
98MI_D_x,
99MI_Ds_x,
100MI_Eb_x = MI_Ds_x,
101MI_E_x,
102MI_F_x,
103MI_Fs_x,
104MI_Gb_x = MI_Fs_x,
105MI_G_x,
106MI_Gs_x,
107MI_Ab_x = MI_Gs_x,
108MI_A_x,
109MI_As_x,
110MI_Bb_x = MI_As_x,
111MI_B_x,
112
113MI_OCT_Nx 1-2
114MI_OCT_x 0-7
115MIDI_OCTAVE_MIN = MI_OCT_N2,
116MIDI_OCTAVE_MAX = MI_OCT_7,
117MI_OCTD, // octave down
118MI_OCTU, // octave up
119
120MI_TRNS_Nx 1-6
121MI_TRNS_x 0-6
122MIDI_TRANSPOSE_MIN = MI_TRNS_N6,
123MIDI_TRANSPOSE_MAX = MI_TRNS_6,
124MI_TRNSD, // transpose down
125MI_TRNSU, // transpose up
126
127MI_VEL_x 1-10
128MIDI_VELOCITY_MIN = MI_VEL_1,
129MIDI_VELOCITY_MAX = MI_VEL_10,
130MI_VELD, // velocity down
131MI_VELU, // velocity up
132
133MI_CHx 1-16
134MIDI_CHANNEL_MIN = MI_CH1
135MIDI_CHANNEL_MAX = MI_CH16,
136MI_CHD, // previous channel
137MI_CHU, // next channel
138
139MI_ALLOFF, // all notes off
140
141MI_SUS, // sustain
142MI_PORT, // portamento
143MI_SOST, // sostenuto
144MI_SOFT, // soft pedal
145MI_LEG, // legato
146
147MI_MOD, // modulation
148MI_MODSD, // decrease modulation speed
149MI_MODSU, // increase modulation speed
150#endif // MIDI_ADVANCED
151
152## Backlight
153
154* `BL_x` where x = 0-15
155* `BL_ON = BL_9`
156* `BL_OFF = BL_0`
157* `BL_DEC`
158* `BL_INC`
159* `BL_TOGG`
160* `BL_STEP`
161
162## RGB WS2818 LEDs
163
164* `RGB_TOG` toggle on/off
165* `RGB_MOD` cycle between modes
166* `RGB_HUI` hue increase
167* `RGB_HUD` hue decrease
168* `RGB_SAI` saturation increase
169* `RGB_SAD` saturation decrease
170* `RGB_VAI` value increase
171* `RGB_VAD` value decrease
172
173## Thermal Printer (experimental)
174
175* `PRINT_ON`
176* `PRINT_OFF`
177
178## Keyboard output selection
179
180* `OUT_AUTO` auto mode
181* `OUT_USB` usb only
182* `OUT_BT` bluetooth (when `BLUETOOTH_ENABLE`)
183
184## Modifiers
185
186* `KC_HYPR` LCTL + LSFT + LALT + LGUI - `MOD_HYPR` is the bit version
187* `KC_MEH` LCTL + LSFT + LALT - `MOD_MEH` is the bit version
188
189### Modifiers with keys
190
191* `LCTL(kc)` LCTL + kc
192* `LSFT(kc)`/`S(kc)` LSFT + kc
193* `LALT(kc)` LALT + kc
194* `LGUI(kc)` LGUI + kc
195* `RCTL(kc)` RCTL + kc
196* `RSFT(kc)` RSFT + kc
197* `RALT(kc)` RALT + kc
198* `RGUI(kc)` RGUI + kc
199
200* `HYPR(kc)` LCTL + LSFT + LALT + LGUI + kc
201* `MEH(kc)` LCTL + LSFT + LALT + kc
202* `LCAG(kc)` LCTL + LALT + LGUI + kc
203* `ALTG(kc)` RCTL + RALT + kc
204* `SCMD(kc)`/`SWIN(kc)` LGUI + LSFT + kc
205* `LCA(kc)` LCTL + LALT + kc
206
207* `OSM(mod)` use mod for one keypress - use mod bits with this
208
209> Mod bits are the 4-letter part of the keycode prefixed with `MOD_`, e.g. `MOD_LCTL`
210
211### Mod-tap keys
212
213These keycodes will press the mod(s) when held, and the key when tapped. They only work with [basic keycodes](basic_keycodes.md).
214
215* `CTL_T(kc)`/`LCTL_T(kc)` LCTL when held, kc when tapped
216* `RCTL_T(kc)` RCTL when held, kc when tapped
217
218* `SFT_T(kc)`/`LSFT_T(kc)` LSFT when held, kc when tapped
219* `RSFT_T(kc)` RSFT when held, kc when tapped
220
221* `ALT_T(kc)`/`LALT_T(kc)` LALT when held, kc when tapped
222* `RALT_T(kc)`/`ALGR_T(kc)` RALT when held, kc when tapped
223
224* `GUI_T(kc)`/`LGUI_T(kc)` LGUI when held, kc when tapped
225* `RGUI_T(kc)` RGUI when held, kc when tapped
226
227* `C_S_T(kc)` LCTL + LSFT when held, kc when tapped
228* `MEH_T(kc)` LCTL + LSFT + LALT when held, kc when tapped
229* `LCAG_T(kc)` LCTL + LALT + LGUI when held, kc when tapped
230* `RCAG_T(kc)` RCTL + RALT + RGUI when held, kc when tapped
231* `ALL_T(kc)` LCTL + LSFT + LALT + LGUI when held, kc tapped [more info](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
232* `SCMD_T(kc)`/`SWIN_T(kc)` LGUI + LSFT when held, kc when tapped
233* `LCA_T(kc)` LCTL + LALT when held, kc when tapped
234
235## Shifted symbols
236
237It's important to remember that all of the keycodes also send a left shift - this may cause unintended actions if unaccounted for. The 4-letter code is preferred in most situations.
238
239* `KC_TILD`/`KC_TILDE` tilde `~`
240* `KC_EXLM`/`KC_EXCLAIM` exclamation mark `!`
241* `KC_AT` at sign `@`
242* `KC_HASH` hash sign `#`
243* `KC_DLR`/`KC_DOLLAR` dollar sign `$`
244* `KC_PERC`/`KC_PERCENT` percent sign `%`
245* `KC_CIRC`/`KC_CIRCUMFLEX` circumflex `^`
246* `KC_AMPR`/`KC_AMPERSAND` ampersand `&`
247* `KC_ASTR`/`KC_ASTERISK` asterisk `*`
248* `KC_LPRN`/`KC_LEFT_PAREN` left parenthesis `(`
249* `KC_RPRN`/`KC_RIGHT_PAREN` right parenthesis `)`
250* `KC_UNDS`/`KC_UNDERSCORE` underscore `_`
251* `KC_PLUS` plus sign `+`
252* `KC_LCBR`/`KC_LEFT_CURLY_BRACE` left curly brace `{`
253* `KC_RCBR`/`KC_RIGHT_CURLY_BRACE` right curly brace `}`
254* `KC_LT`/`KC_LABK`/`KC_LEFT_ANGLE_BRACKET` left angle bracket `<`
255* `KC_GT`/`KC_RABK`/`KC_RIGHT_ANGLE_BRACKET` right angle bracket `>`
256* `KC_COLN`/`KC_COLON` colon `:`
257* `KC_PIPE` pipe `|`
258* `KC_QUES`/`KC_QUESTION` question mark `?`
259* `KC_DQT`/`KC_DOUBLE_QUOTE`/`KC_DQUO` double quote `"`
260
261## Layer adjustments
262
263* `LT(layer, kc)` turn on layer (0-15) when held, kc ([basic keycodes](basic_keycodes.md)) when tapped
264* `TO(layer)` turn on layer when depressed
265* `MO(layer)` momentarily turn on layer when depressed (requires `KC_TRNS` on destination layer)
266* `DF(layer)` sets the base (default) layer
267* `TG(layer)` toggle layer on/off
268* `OSL(layer)` switch to layer for one keycode
269* `TT(layer)` tap toggle? idk FIXME
270
271## Unicode
272
273* `UNICODE(n)`/`UC(n)` if `UNICODE_ENABLE`, this will send characters up to `0x7FFF`
274* `X(n)` if `UNICODEMAP_ENABLE`, also sends unicode via a different method \ No newline at end of file