fix whitespace
[jackhill/qmk/firmware.git] / quantum / quantum_keycodes.h
CommitLineData
d8a608f3
W
1
2#ifndef QUANTUM_KEYCODES_H
3#define QUANTUM_KEYCODES_H
4
5enum quantum_keycodes {
6 // Ranges used in shortucuts - not to be used directly
7 QK_TMK = 0x0000,
8 QK_TMK_MAX = 0x00FF,
9 QK_MODS = 0x0100,
10 QK_LCTL = 0x0100,
11 QK_LSFT = 0x0200,
12 QK_LALT = 0x0400,
13 QK_LGUI = 0x0800,
14 QK_RMODS_MIN = 0x1000,
15 QK_RCTL = 0x1100,
16 QK_RSFT = 0x1200,
17 QK_RALT = 0x1400,
18 QK_RGUI = 0x1800,
19 QK_MODS_MAX = 0x1FFF,
20 QK_FUNCTION = 0x2000,
21 QK_FUNCTION_MAX = 0x2FFF,
22 QK_MACRO = 0x3000,
23 QK_MACRO_MAX = 0x3FFF,
24 QK_LAYER_TAP = 0x4000,
25 QK_LAYER_TAP_MAX = 0x4FFF,
26 QK_TO = 0x5000,
27 QK_TO_MAX = 0x50FF,
28 QK_MOMENTARY = 0x5100,
29 QK_MOMENTARY_MAX = 0x51FF,
30 QK_DEF_LAYER = 0x5200,
31 QK_DEF_LAYER_MAX = 0x52FF,
32 QK_TOGGLE_LAYER = 0x5300,
33 QK_TOGGLE_LAYER_MAX = 0x53FF,
34 QK_ONE_SHOT_LAYER = 0x5400,
35 QK_ONE_SHOT_LAYER_MAX = 0x54FF,
36 QK_ONE_SHOT_MOD = 0x5500,
37 QK_ONE_SHOT_MOD_MAX = 0x55FF,
38#ifndef DISABLE_CHORDING
39 QK_CHORDING = 0x5600,
40 QK_CHORDING_MAX = 0x56FF,
41#endif
97816df7
PIN
42 QK_TAP_DANCE = 0x5700,
43 QK_TAP_DANCE_MAX = 0x57FF,
69ea10f9
JH
44 QK_LAYER_TAP_TOGGLE = 0x5800,
45 QK_LAYER_TAP_TOGGLE_MAX = 0x58FF,
97816df7
PIN
46 QK_MOD_TAP = 0x6000,
47 QK_MOD_TAP_MAX = 0x7FFF,
6788cbd7
JH
48#if defined(UNICODEMAP_ENABLE) && defined(UNICODE_ENABLE)
49 #error "Cannot enable both UNICODEMAP && UNICODE"
50#endif
d8a608f3
W
51#ifdef UNICODE_ENABLE
52 QK_UNICODE = 0x8000,
53 QK_UNICODE_MAX = 0xFFFF,
54#endif
69ea10f9
JH
55#ifdef UNICODEMAP_ENABLE
56 QK_UNICODE_MAP = 0x8000,
57 QK_UNICODE_MAP_MAX = 0x83FF,
58#endif
d8a608f3
W
59
60 // Loose keycodes - to be used directly
61
b92515f1 62 RESET = 0x5C00,
d8a608f3
W
63 DEBUG,
64 MAGIC_SWAP_CONTROL_CAPSLOCK,
65 MAGIC_CAPSLOCK_TO_CONTROL,
66 MAGIC_SWAP_LALT_LGUI,
67 MAGIC_SWAP_RALT_RGUI,
68 MAGIC_NO_GUI,
69 MAGIC_SWAP_GRAVE_ESC,
70 MAGIC_SWAP_BACKSLASH_BACKSPACE,
71 MAGIC_HOST_NKRO,
72 MAGIC_SWAP_ALT_GUI,
73 MAGIC_UNSWAP_CONTROL_CAPSLOCK,
74 MAGIC_UNCAPSLOCK_TO_CONTROL,
75 MAGIC_UNSWAP_LALT_LGUI,
76 MAGIC_UNSWAP_RALT_RGUI,
77 MAGIC_UNNO_GUI,
78 MAGIC_UNSWAP_GRAVE_ESC,
79 MAGIC_UNSWAP_BACKSLASH_BACKSPACE,
80 MAGIC_UNHOST_NKRO,
81 MAGIC_UNSWAP_ALT_GUI,
82 MAGIC_TOGGLE_NKRO,
83
84 // Leader key
85#ifndef DISABLE_LEADER
86 KC_LEAD,
87#endif
88
89 // Audio on/off/toggle
90 AU_ON,
91 AU_OFF,
92 AU_TOG,
93
8c93c5d9
PIN
94#ifdef FAUXCLICKY_ENABLE
95 // Faux clicky
96 FC_ON,
97 FC_OFF,
98 FC_TOG,
99#endif
100
d8a608f3
W
101 // Music mode on/off/toggle
102 MU_ON,
103 MU_OFF,
104 MU_TOG,
105
106 // Music voice iterate
107 MUV_IN,
108 MUV_DE,
109
110 // Midi mode on/off
111 MIDI_ON,
112 MIDI_OFF,
113
114 // Backlight functionality
115 BL_0,
116 BL_1,
117 BL_2,
118 BL_3,
119 BL_4,
120 BL_5,
121 BL_6,
122 BL_7,
123 BL_8,
124 BL_9,
125 BL_10,
126 BL_11,
127 BL_12,
128 BL_13,
129 BL_14,
130 BL_15,
131 BL_DEC,
132 BL_INC,
133 BL_TOGG,
134 BL_STEP,
135
136 // RGB functionality
137 RGB_TOG,
138 RGB_MOD,
139 RGB_HUI,
140 RGB_HUD,
141 RGB_SAI,
142 RGB_SAD,
143 RGB_VAI,
144 RGB_VAD,
145
146 // Left shift, open paren
147 KC_LSPO,
148
149 // Right shift, close paren
150 KC_RSPC,
151
152 // Printing
153 PRINT_ON,
154 PRINT_OFF,
155
c17070ec
PIN
156 // output selection
157 OUT_AUTO,
158 OUT_USB,
159#ifdef BLUETOOTH_ENABLE
160 OUT_BT,
161#endif
162#ifdef ADAFRUIT_BLE_ENABLE
163 OUT_BLE,
164#endif
165
d8a608f3
W
166 // always leave at the end
167 SAFE_RANGE
168};
169
170// Ability to use mods in layouts
171#define LCTL(kc) (kc | QK_LCTL)
172#define LSFT(kc) (kc | QK_LSFT)
173#define LALT(kc) (kc | QK_LALT)
174#define LGUI(kc) (kc | QK_LGUI)
175#define RCTL(kc) (kc | QK_RCTL)
176#define RSFT(kc) (kc | QK_RSFT)
177#define RALT(kc) (kc | QK_RALT)
178#define RGUI(kc) (kc | QK_RGUI)
179
180#define HYPR(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI)
181#define MEH(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT)
182#define LCAG(kc) (kc | QK_LCTL | QK_LALT | QK_LGUI)
183#define ALTG(kc) (kc | QK_RCTL | QK_RALT)
8459bb97 184#define SCMD(kc) (kc | QK_LGUI | QK_LSFT)
7288e5ab 185#define SWIN(kc) SCMD(kc)
2aa079d9 186#define LCA(kc) (kc | QK_LCTL | QK_LALT)
d8a608f3
W
187
188#define MOD_HYPR 0xf
189#define MOD_MEH 0x7
190
191
192// Aliases for shifted symbols
193// Each key has a 4-letter code, and some have longer aliases too.
194// While the long aliases are descriptive, the 4-letter codes
195// make for nicer grid layouts (everything lines up), and are
196// the preferred style for Quantum.
197#define KC_TILD LSFT(KC_GRV) // ~
198#define KC_TILDE KC_TILD
199
200#define KC_EXLM LSFT(KC_1) // !
201#define KC_EXCLAIM KC_EXLM
202
203#define KC_AT LSFT(KC_2) // @
204
205#define KC_HASH LSFT(KC_3) // #
206
207#define KC_DLR LSFT(KC_4) // $
208#define KC_DOLLAR KC_DLR
209
210#define KC_PERC LSFT(KC_5) // %
211#define KC_PERCENT KC_PERC
212
213#define KC_CIRC LSFT(KC_6) // ^
214#define KC_CIRCUMFLEX KC_CIRC
215
216#define KC_AMPR LSFT(KC_7) // &
217#define KC_AMPERSAND KC_AMPR
218
219#define KC_ASTR LSFT(KC_8) // *
220#define KC_ASTERISK KC_ASTR
221
222#define KC_LPRN LSFT(KC_9) // (
223#define KC_LEFT_PAREN KC_LPRN
224
225#define KC_RPRN LSFT(KC_0) // )
226#define KC_RIGHT_PAREN KC_RPRN
227
228#define KC_UNDS LSFT(KC_MINS) // _
229#define KC_UNDERSCORE KC_UNDS
230
231#define KC_PLUS LSFT(KC_EQL) // +
232
233#define KC_LCBR LSFT(KC_LBRC) // {
234#define KC_LEFT_CURLY_BRACE KC_LCBR
235
236#define KC_RCBR LSFT(KC_RBRC) // }
237#define KC_RIGHT_CURLY_BRACE KC_RCBR
238
239#define KC_LABK LSFT(KC_COMM) // <
240#define KC_LEFT_ANGLE_BRACKET KC_LABK
241
242#define KC_RABK LSFT(KC_DOT) // >
243#define KC_RIGHT_ANGLE_BRACKET KC_RABK
244
245#define KC_COLN LSFT(KC_SCLN) // :
246#define KC_COLON KC_COLN
247
248#define KC_PIPE LSFT(KC_BSLS) // |
249
250#define KC_LT LSFT(KC_COMM) // <
251
252#define KC_GT LSFT(KC_DOT) // >
253
254#define KC_QUES LSFT(KC_SLSH) // ?
255#define KC_QUESTION KC_QUES
256
257#define KC_DQT LSFT(KC_QUOT) // "
258#define KC_DOUBLE_QUOTE KC_DQT
259#define KC_DQUO KC_DQT
260
261#define KC_DELT KC_DELETE // Del key (four letter code)
262
263// Alias for function layers than expand past FN31
264#define FUNC(kc) (kc | QK_FUNCTION)
265
266// Aliases
267#define S(kc) LSFT(kc)
268#define F(kc) FUNC(kc)
269
270#define M(kc) (kc | QK_MACRO)
271
cfc41497 272#define MACROTAP(kc) (kc | QK_MACRO | FUNC_TAP<<8)
d8a608f3
W
273#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
274
a3357d07 275
d8a608f3
W
276// L-ayer, T-ap - 256 keycode max, 16 layer max
277#define LT(layer, kc) (kc | QK_LAYER_TAP | ((layer & 0xF) << 8))
278
279#define AG_SWAP MAGIC_SWAP_ALT_GUI
280#define AG_NORM MAGIC_UNSWAP_ALT_GUI
281
282#define BL_ON BL_9
283#define BL_OFF BL_0
284
285#define MI_ON MIDI_ON
286#define MI_OFF MIDI_OFF
287
288// GOTO layer - 16 layers max
289// when:
290// ON_PRESS = 1
291// ON_RELEASE = 2
292// Unless you have a good reason not to do so, prefer ON_PRESS (1) as your default.
293// In fact, we changed it to assume ON_PRESS for sanity/simplicity. If needed, you can add your own
294// keycode modeled after the old version, kept below for this.
295/* #define TO(layer, when) (layer | QK_TO | (when << 0x4)) */
296#define TO(layer) (layer | QK_TO | (ON_PRESS << 0x4))
297
298// Momentary switch layer - 256 layer max
299#define MO(layer) (layer | QK_MOMENTARY)
300
301// Set default layer - 256 layer max
302#define DF(layer) (layer | QK_DEF_LAYER)
303
304// Toggle to layer - 256 layer max
305#define TG(layer) (layer | QK_TOGGLE_LAYER)
306
307// One-shot layer - 256 layer max
308#define OSL(layer) (layer | QK_ONE_SHOT_LAYER)
309
310// One-shot mod
311#define OSM(mod) (mod | QK_ONE_SHOT_MOD)
312
69ea10f9
JH
313// Layer tap-toggle
314#define TT(layer) (layer | QK_LAYER_TAP_TOGGLE)
315
d8a608f3 316// M-od, T-ap - 256 keycode max
97816df7
PIN
317#define MT(mod, kc) (kc | QK_MOD_TAP | ((mod & 0x1F) << 8))
318
d8a608f3 319#define CTL_T(kc) MT(MOD_LCTL, kc)
97816df7
PIN
320#define LCTL_T(kc) MT(MOD_LCTL, kc)
321#define RCTL_T(kc) MT(MOD_RCTL, kc)
322
d8a608f3 323#define SFT_T(kc) MT(MOD_LSFT, kc)
97816df7
PIN
324#define LSFT_T(kc) MT(MOD_LSFT, kc)
325#define RSFT_T(kc) MT(MOD_RSFT, kc)
326
d8a608f3 327#define ALT_T(kc) MT(MOD_LALT, kc)
97816df7
PIN
328#define LALT_T(kc) MT(MOD_LALT, kc)
329#define RALT_T(kc) MT(MOD_RALT, kc)
f46c2b3c 330#define ALGR_T(kc) MT(MOD_RALT, kc) // dual-function AltGR
97816df7 331
d8a608f3 332#define GUI_T(kc) MT(MOD_LGUI, kc)
97816df7
PIN
333#define LGUI_T(kc) MT(MOD_LGUI, kc)
334#define RGUI_T(kc) MT(MOD_RGUI, kc)
335
d8a608f3
W
336#define C_S_T(kc) MT((MOD_LCTL | MOD_LSFT), kc) // Control + Shift e.g. for gnome-terminal
337#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 Win or Cmd, so just alt+shift+ctrl
338#define LCAG_T(kc) MT((MOD_LCTL | MOD_LALT | MOD_LGUI), kc) // Left control alt and gui
97816df7 339#define RCAG_T(kc) MT((MOD_RCTL | MOD_RALT | MOD_RGUI), kc) // Right control alt and gui
d8a608f3 340#define ALL_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI), kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
8459bb97 341#define SCMD_T(kc) MT((MOD_LGUI | MOD_LSFT), kc)
7288e5ab 342#define SWIN_T(kc) SCMD_T(kc)
2aa079d9 343#define LCA_T(kc) MT((MOD_LCTL | MOD_LALT), kc) // Left control and left alt
d8a608f3
W
344
345// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
346#define KC_HYPR HYPR(KC_NO)
347#define KC_MEH MEH(KC_NO)
348
349#ifdef UNICODE_ENABLE
350 // For sending unicode codes.
351 // You may not send codes over 7FFF -- this supports most of UTF8.
352 // To have a key that sends out Œ, go UC(0x0152)
353 #define UNICODE(n) (n | QK_UNICODE)
354 #define UC(n) UNICODE(n)
355#endif
356
357#ifdef UNICODEMAP_ENABLE
358 #define X(n) (n | QK_UNICODE_MAP)
359#endif
360
361#endif // QUANTUM_KEYCODES_H