Relocate grave keycode processing (#8082)
[jackhill/qmk/firmware.git] / quantum / send_string_keycodes.h
1 /* Copyright 2019
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #pragma once
18
19 // clang-format off
20
21 /* Punctuation */
22 #define X_ENT X_ENTER
23 #define X_ESC X_ESCAPE
24 #define X_BSPC X_BSPACE
25 #define X_SPC X_SPACE
26 #define X_MINS X_MINUS
27 #define X_EQL X_EQUAL
28 #define X_LBRC X_LBRACKET
29 #define X_RBRC X_RBRACKET
30 #define X_BSLS X_BSLASH
31 #define X_NUHS X_NONUS_HASH
32 #define X_SCLN X_SCOLON
33 #define X_QUOT X_QUOTE
34 #define X_GRV X_GRAVE
35 #define X_COMM X_COMMA
36 #define X_SLSH X_SLASH
37 #define X_NUBS X_NONUS_BSLASH
38
39 /* Lock Keys */
40 #define X_CLCK X_CAPSLOCK
41 #define X_CAPS X_CAPSLOCK
42 #define X_SLCK X_SCROLLLOCK
43 #define X_NLCK X_NUMLOCK
44 #define X_LCAP X_LOCKING_CAPS
45 #define X_LNUM X_LOCKING_NUM
46 #define X_LSCR X_LOCKING_SCROLL
47
48 /* Commands */
49 #define X_PSCR X_PSCREEN
50 #define X_PAUS X_PAUSE
51 #define X_BRK X_PAUSE
52 #define X_INS X_INSERT
53 #define X_DEL X_DELETE
54 #define X_PGDN X_PGDOWN
55 #define X_RGHT X_RIGHT
56 #define X_APP X_APPLICATION
57 #define X_EXEC X_EXECUTE
58 #define X_SLCT X_SELECT
59 #define X_AGIN X_AGAIN
60 #define X_PSTE X_PASTE
61 #define X_ERAS X_ALT_ERASE
62 #define X_CLR X_CLEAR
63
64 /* Keypad */
65 #define X_PSLS X_KP_SLASH
66 #define X_PAST X_KP_ASTERISK
67 #define X_PMNS X_KP_MINUS
68 #define X_PPLS X_KP_PLUS
69 #define X_PENT X_KP_ENTER
70 #define X_P1 X_KP_1
71 #define X_P2 X_KP_2
72 #define X_P3 X_KP_3
73 #define X_P4 X_KP_4
74 #define X_P5 X_KP_5
75 #define X_P6 X_KP_6
76 #define X_P7 X_KP_7
77 #define X_P8 X_KP_8
78 #define X_P9 X_KP_9
79 #define X_P0 X_KP_0
80 #define X_PDOT X_KP_DOT
81 #define X_PEQL X_KP_EQUAL
82 #define X_PCMM X_KP_COMMA
83
84 /* Japanese specific */
85 #define X_ZKHK X_GRAVE
86 #define X_RO X_INT1
87 #define X_KANA X_INT2
88 #define X_JYEN X_INT3
89 #define X_HENK X_INT4
90 #define X_MHEN X_INT5
91
92 /* Korean specific */
93 #define X_HAEN X_LANG1
94 #define X_HANJ X_LANG2
95
96 /* Modifiers */
97 #define X_LCTL X_LCTRL
98 #define X_LSFT X_LSHIFT
99 #define X_LCMD X_LGUI
100 #define X_LWIN X_LGUI
101 #define X_RCTL X_RCTRL
102 #define X_RSFT X_RSHIFT
103 #define X_ALGR X_RALT
104 #define X_RCMD X_RGUI
105 #define X_RWIN X_RGUI
106
107 /* Generic Desktop Page (0x01) */
108 #define X_PWR X_SYSTEM_POWER
109 #define X_SLEP X_SYSTEM_SLEEP
110 #define X_WAKE X_SYSTEM_WAKE
111
112 /* Consumer Page (0x0C) */
113 #define X_MUTE X_AUDIO_MUTE
114 #define X_VOLU X_AUDIO_VOL_UP
115 #define X_VOLD X_AUDIO_VOL_DOWN
116 #define X_MNXT X_MEDIA_NEXT_TRACK
117 #define X_MPRV X_MEDIA_PREV_TRACK
118 #define X_MSTP X_MEDIA_STOP
119 #define X_MPLY X_MEDIA_PLAY_PAUSE
120 #define X_MSEL X_MEDIA_SELECT
121 #define X_EJCT X_MEDIA_EJECT
122 #define X_CALC X_CALCULATOR
123 #define X_MYCM X_MY_COMPUTER
124 #define X_WSCH X_WWW_SEARCH
125 #define X_WHOM X_WWW_HOME
126 #define X_WBAK X_WWW_BACK
127 #define X_WFWD X_WWW_FORWARD
128 #define X_WSTP X_WWW_STOP
129 #define X_WREF X_WWW_REFRESH
130 #define X_WFAV X_WWW_FAVORITES
131 #define X_MFFD X_MEDIA_FAST_FORWARD
132 #define X_MRWD X_MEDIA_REWIND
133 #define X_BRIU X_BRIGHTNESS_UP
134 #define X_BRID X_BRIGHTNESS_DOWN
135
136 /* System Specific */
137 #define X_BRMU X_PAUSE
138 #define X_BRMD X_SCROLLLOCK
139
140 /* Keyboard/Keypad Page (0x07) */
141 #define X_A 04
142 #define X_B 05
143 #define X_C 06
144 #define X_D 07
145 #define X_E 08
146 #define X_F 09
147 #define X_G 0a
148 #define X_H 0b
149 #define X_I 0c
150 #define X_J 0d
151 #define X_K 0e
152 #define X_L 0f
153 #define X_M 10
154 #define X_N 11
155 #define X_O 12
156 #define X_P 13
157 #define X_Q 14
158 #define X_R 15
159 #define X_S 16
160 #define X_T 17
161 #define X_U 18
162 #define X_V 19
163 #define X_W 1a
164 #define X_X 1b
165 #define X_Y 1c
166 #define X_Z 1d
167 #define X_1 1e
168 #define X_2 1f
169 #define X_3 20
170 #define X_4 21
171 #define X_5 22
172 #define X_6 23
173 #define X_7 24
174 #define X_8 25
175 #define X_9 26
176 #define X_0 27
177 #define X_ENTER 28
178 #define X_ESCAPE 29
179 #define X_BSPACE 2a
180 #define X_TAB 2b
181 #define X_SPACE 2c
182 #define X_MINUS 2d
183 #define X_EQUAL 2e
184 #define X_LBRACKET 2f
185 #define X_RBRACKET 30
186 #define X_BSLASH 31
187 #define X_NONUS_HASH 32
188 #define X_SCOLON 33
189 #define X_QUOTE 34
190 #define X_GRAVE 35
191 #define X_COMMA 36
192 #define X_DOT 37
193 #define X_SLASH 38
194 #define X_CAPSLOCK 39
195 #define X_F1 3a
196 #define X_F2 3b
197 #define X_F3 3c
198 #define X_F4 3d
199 #define X_F5 3e
200 #define X_F6 3f
201 #define X_F7 40
202 #define X_F8 41
203 #define X_F9 42
204 #define X_F10 43
205 #define X_F11 44
206 #define X_F12 45
207 #define X_PSCREEN 46
208 #define X_SCROLLLOCK 47
209 #define X_PAUSE 48
210 #define X_INSERT 49
211 #define X_HOME 4a
212 #define X_PGUP 4b
213 #define X_DELETE 4c
214 #define X_END 4d
215 #define X_PGDOWN 4e
216 #define X_RIGHT 4f
217 #define X_LEFT 50
218 #define X_DOWN 51
219 #define X_UP 52
220 #define X_NUMLOCK 53
221 #define X_KP_SLASH 54
222 #define X_KP_ASTERISK 55
223 #define X_KP_MINUS 56
224 #define X_KP_PLUS 57
225 #define X_KP_ENTER 58
226 #define X_KP_1 59
227 #define X_KP_2 5a
228 #define X_KP_3 5b
229 #define X_KP_4 5c
230 #define X_KP_5 5d
231 #define X_KP_6 5e
232 #define X_KP_7 5f
233 #define X_KP_8 60
234 #define X_KP_9 61
235 #define X_KP_0 62
236 #define X_KP_DOT 63
237 #define X_NONUS_BSLASH 64
238 #define X_APPLICATION 65
239 #define X_POWER 66
240 #define X_KP_EQUAL 67
241 #define X_F13 68
242 #define X_F14 69
243 #define X_F15 6a
244 #define X_F16 6b
245 #define X_F17 6c
246 #define X_F18 6d
247 #define X_F19 6e
248 #define X_F20 6f
249 #define X_F21 70
250 #define X_F22 71
251 #define X_F23 72
252 #define X_F24 73
253 #define X_EXECUTE 74
254 #define X_HELP 75
255 #define X_MENU 76
256 #define X_SELECT 77
257 #define X_STOP 78
258 #define X_AGAIN 79
259 #define X_UNDO 7a
260 #define X_CUT 7b
261 #define X_COPY 7c
262 #define X_PASTE 7d
263 #define X_FIND 7e
264 #define X__MUTE 7f
265 #define X__VOLUP 80
266 #define X__VOLDOWN 81
267 #define X_LOCKING_CAPS 82
268 #define X_LOCKING_NUM 83
269 #define X_LOCKING_SCROLL 84
270 #define X_KP_COMMA 85
271 #define X_KP_EQUAL_AS400 86
272 #define X_INT1 87
273 #define X_INT2 88
274 #define X_INT3 89
275 #define X_INT4 8a
276 #define X_INT5 8b
277 #define X_INT6 8c
278 #define X_INT7 8d
279 #define X_INT8 8e
280 #define X_INT9 8f
281 #define X_LANG1 90
282 #define X_LANG2 91
283 #define X_LANG3 92
284 #define X_LANG4 93
285 #define X_LANG5 94
286 #define X_LANG6 95
287 #define X_LANG7 96
288 #define X_LANG8 97
289 #define X_LANG9 98
290 #define X_ALT_ERASE 99
291 #define X_SYSREQ 9a
292 #define X_CANCEL 9b
293 #define X_CLEAR 9c
294 #define X_PRIOR 9d
295 #define X_RETURN 9e
296 #define X_SEPARATOR 9f
297 #define X_OUT a0
298 #define X_OPER a1
299 #define X_CLEAR_AGAIN a2
300 #define X_CRSEL a3
301 #define X_EXSEL a4
302
303 /* Modifiers */
304 #define X_LCTRL e0
305 #define X_LSHIFT e1
306 #define X_LALT e2
307 #define X_LGUI e3
308 #define X_RCTRL e4
309 #define X_RSHIFT e5
310 #define X_RALT e6
311 #define X_RGUI e7
312
313 /* Media and Function keys */
314 /* Generic Desktop Page (0x01) */
315 #define X_SYSTEM_POWER a5
316 #define X_SYSTEM_SLEEP a6
317 #define X_SYSTEM_WAKE a7
318
319 /* Consumer Page (0x0C) */
320 #define X_AUDIO_MUTE a8
321 #define X_AUDIO_VOL_UP a9
322 #define X_AUDIO_VOL_DOWN aa
323 #define X_MEDIA_NEXT_TRACK ab
324 #define X_MEDIA_PREV_TRACK ac
325 #define X_MEDIA_STOP ad
326 #define X_MEDIA_PLAY_PAUSE ae
327 #define X_MEDIA_SELECT af
328 #define X_MEDIA_EJECT b0
329 #define X_MAIL b1
330 #define X_CALCULATOR b2
331 #define X_MY_COMPUTER b3
332 #define X_WWW_SEARCH b4
333 #define X_WWW_HOME b5
334 #define X_WWW_BACK b6
335 #define X_WWW_FORWARD b7
336 #define X_WWW_STOP b8
337 #define X_WWW_REFRESH b9
338 #define X_WWW_FAVORITES ba
339 #define X_MEDIA_FAST_FORWARD bb
340 #define X_MEDIA_REWIND bc
341 #define X_BRIGHTNESS_UP bd
342 #define X_BRIGHTNESS_DOWN be
343
344 // Send string macros
345 #define STRINGIZE(z) #z
346 #define ADD_SLASH_X(y) STRINGIZE(\x##y)
347 #define SYMBOL_STR(x) ADD_SLASH_X(x)
348
349 #define SS_TAP_CODE 1
350 #define SS_DOWN_CODE 2
351 #define SS_UP_CODE 3
352
353 #define SS_TAP(keycode) "\1" SYMBOL_STR(keycode)
354 #define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode)
355 #define SS_UP(keycode) "\3" SYMBOL_STR(keycode)
356
357 // `string` arguments must not be parenthesized
358 #define SS_LCTL(string) SS_DOWN(X_LCTL) string SS_UP(X_LCTL)
359 #define SS_LSFT(string) SS_DOWN(X_LSFT) string SS_UP(X_LSFT)
360 #define SS_LALT(string) SS_DOWN(X_LALT) string SS_UP(X_LALT)
361 #define SS_LGUI(string) SS_DOWN(X_LGUI) string SS_UP(X_LGUI)
362 #define SS_LCMD(string) SS_LGUI(string)
363 #define SS_LWIN(string) SS_LGUI(string)
364
365 #define SS_RCTL(string) SS_DOWN(X_RCTL) string SS_UP(X_RCTL)
366 #define SS_RSFT(string) SS_DOWN(X_RSFT) string SS_UP(X_RSFT)
367 #define SS_RALT(string) SS_DOWN(X_RALT) string SS_UP(X_RALT)
368 #define SS_RGUI(string) SS_DOWN(X_RGUI) string SS_UP(X_RGUI)
369 #define SS_ALGR(string) SS_RALT(string)
370 #define SS_RCMD(string) SS_RGUI(string)
371 #define SS_RWIN(string) SS_RGUI(string)
372
373 // DEPRECATED
374 #define SS_LCTRL(string) SS_LCTL(string)