send_string_keycodes.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  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. #pragma once
  17. // clang-format off
  18. /* Punctuation */
  19. #define X_ENT X_ENTER
  20. #define X_ESC X_ESCAPE
  21. #define X_BSPC X_BACKSPACE
  22. #define X_SPC X_SPACE
  23. #define X_MINS X_MINUS
  24. #define X_EQL X_EQUAL
  25. #define X_LBRC X_LEFT_BRACKET
  26. #define X_RBRC X_RIGHT_BRACKET
  27. #define X_BSLS X_BACKSLASH
  28. #define X_NUHS X_NONUS_HASH
  29. #define X_SCLN X_SEMICOLON
  30. #define X_QUOT X_QUOTE
  31. #define X_GRV X_GRAVE
  32. #define X_COMM X_COMMA
  33. #define X_SLSH X_SLASH
  34. #define X_NUBS X_NONUS_BACKSLASH
  35. /* Lock Keys */
  36. #define X_CAPS X_CAPS_LOCK
  37. #define X_SCRL X_SCROLL_LOCK
  38. #define X_NUM X_NUM_LOCK
  39. #define X_LCAP X_LOCKING_CAPS_LOCK
  40. #define X_LNUM X_LOCKING_NUM_LOCK
  41. #define X_LSCR X_LOCKING_SCROLL_LOCK
  42. /* Commands */
  43. #define X_PSCR X_PRINT_SCREEN
  44. #define X_PAUS X_PAUSE
  45. #define X_BRK X_PAUSE
  46. #define X_INS X_INSERT
  47. #define X_PGUP X_PAGE_UP
  48. #define X_DEL X_DELETE
  49. #define X_PGDN X_PAGE_DOWN
  50. #define X_RGHT X_RIGHT
  51. #define X_APP X_APPLICATION
  52. #define X_EXEC X_EXECUTE
  53. #define X_SLCT X_SELECT
  54. #define X_AGIN X_AGAIN
  55. #define X_PSTE X_PASTE
  56. #define X_ERAS X_ALTERNATE_ERASE
  57. #define X_SYRQ X_SYSTEM_REQUEST
  58. #define X_CNCL X_CANCEL
  59. #define X_CLR X_CLEAR
  60. #define X_PRIR X_PRIOR
  61. #define X_RETN X_RETURN
  62. #define X_SEPR X_SEPARATOR
  63. #define X_CLAG X_CLEAR_AGAIN
  64. #define X_CRSL X_CRSEL
  65. #define X_EXSL X_EXSEL
  66. /* Keypad */
  67. #define X_PSLS X_KP_SLASH
  68. #define X_PAST X_KP_ASTERISK
  69. #define X_PMNS X_KP_MINUS
  70. #define X_PPLS X_KP_PLUS
  71. #define X_PENT X_KP_ENTER
  72. #define X_P1 X_KP_1
  73. #define X_P2 X_KP_2
  74. #define X_P3 X_KP_3
  75. #define X_P4 X_KP_4
  76. #define X_P5 X_KP_5
  77. #define X_P6 X_KP_6
  78. #define X_P7 X_KP_7
  79. #define X_P8 X_KP_8
  80. #define X_P9 X_KP_9
  81. #define X_P0 X_KP_0
  82. #define X_PDOT X_KP_DOT
  83. #define X_PEQL X_KP_EQUAL
  84. #define X_PCMM X_KP_COMMA
  85. /* Language Specific */
  86. #define X_INT1 X_INTERNATIONAL_1
  87. #define X_INT2 X_INTERNATIONAL_2
  88. #define X_INT3 X_INTERNATIONAL_3
  89. #define X_INT4 X_INTERNATIONAL_4
  90. #define X_INT5 X_INTERNATIONAL_5
  91. #define X_INT6 X_INTERNATIONAL_6
  92. #define X_INT7 X_INTERNATIONAL_7
  93. #define X_INT8 X_INTERNATIONAL_8
  94. #define X_INT9 X_INTERNATIONAL_9
  95. #define X_LNG1 X_LANGUAGE_1
  96. #define X_LNG2 X_LANGUAGE_2
  97. #define X_LNG3 X_LANGUAGE_3
  98. #define X_LNG4 X_LANGUAGE_4
  99. #define X_LNG5 X_LANGUAGE_5
  100. #define X_LNG6 X_LANGUAGE_6
  101. #define X_LNG7 X_LANGUAGE_7
  102. #define X_LNG8 X_LANGUAGE_8
  103. #define X_LNG9 X_LANGUAGE_9
  104. /* Modifiers */
  105. #define X_LCTL X_LEFT_CTRL
  106. #define X_LSFT X_LEFT_SHIFT
  107. #define X_LALT X_LEFT_ALT
  108. #define X_LOPT X_LEFT_ALT
  109. #define X_LGUI X_LEFT_GUI
  110. #define X_LCMD X_LEFT_GUI
  111. #define X_LWIN X_LEFT_GUI
  112. #define X_RCTL X_RIGHT_CTRL
  113. #define X_RSFT X_RIGHT_SHIFT
  114. #define X_RALT X_RIGHT_ALT
  115. #define X_ALGR X_RIGHT_ALT
  116. #define X_ROPT X_RIGHT_ALT
  117. #define X_RGUI X_RIGHT_GUI
  118. #define X_RCMD X_RIGHT_GUI
  119. #define X_RWIN X_RIGHT_GUI
  120. /* Generic Desktop Page (0x01) */
  121. #define X_PWR X_SYSTEM_POWER
  122. #define X_SLEP X_SYSTEM_SLEEP
  123. #define X_WAKE X_SYSTEM_WAKE
  124. /* Consumer Page (0x0C) */
  125. #define X_MUTE X_AUDIO_MUTE
  126. #define X_VOLU X_AUDIO_VOL_UP
  127. #define X_VOLD X_AUDIO_VOL_DOWN
  128. #define X_MNXT X_MEDIA_NEXT_TRACK
  129. #define X_MPRV X_MEDIA_PREV_TRACK
  130. #define X_MSTP X_MEDIA_STOP
  131. #define X_MPLY X_MEDIA_PLAY_PAUSE
  132. #define X_MSEL X_MEDIA_SELECT
  133. #define X_EJCT X_MEDIA_EJECT
  134. #define X_CALC X_CALCULATOR
  135. #define X_MYCM X_MY_COMPUTER
  136. #define X_WSCH X_WWW_SEARCH
  137. #define X_WHOM X_WWW_HOME
  138. #define X_WBAK X_WWW_BACK
  139. #define X_WFWD X_WWW_FORWARD
  140. #define X_WSTP X_WWW_STOP
  141. #define X_WREF X_WWW_REFRESH
  142. #define X_WFAV X_WWW_FAVORITES
  143. #define X_MFFD X_MEDIA_FAST_FORWARD
  144. #define X_MRWD X_MEDIA_REWIND
  145. #define X_BRIU X_BRIGHTNESS_UP
  146. #define X_BRID X_BRIGHTNESS_DOWN
  147. #define X_CPNL X_CONTROL_PANEL
  148. #define X_ASST X_ASSISTANT
  149. /* System Specific */
  150. #define X_BRMU X_PAUSE
  151. #define X_BRMD X_SCROLL_LOCK
  152. /* Mouse Keys */
  153. #define X_MS_U X_MS_UP
  154. #define X_MS_D X_MS_DOWN
  155. #define X_MS_L X_MS_LEFT
  156. #define X_MS_R X_MS_RIGHT
  157. #define X_BTN1 X_MS_BTN1
  158. #define X_BTN2 X_MS_BTN2
  159. #define X_BTN3 X_MS_BTN3
  160. #define X_BTN4 X_MS_BTN4
  161. #define X_BTN5 X_MS_BTN5
  162. #define X_BTN6 X_MS_BTN6
  163. #define X_BTN7 X_MS_BTN7
  164. #define X_BTN8 X_MS_BTN8
  165. #define X_WH_U X_MS_WH_UP
  166. #define X_WH_D X_MS_WH_DOWN
  167. #define X_WH_L X_MS_WH_LEFT
  168. #define X_WH_R X_MS_WH_RIGHT
  169. #define X_ACL0 X_MS_ACCEL0
  170. #define X_ACL1 X_MS_ACCEL1
  171. #define X_ACL2 X_MS_ACCEL2
  172. /* Keyboard/Keypad Page (0x07) */
  173. #define X_A 04
  174. #define X_B 05
  175. #define X_C 06
  176. #define X_D 07
  177. #define X_E 08
  178. #define X_F 09
  179. #define X_G 0a
  180. #define X_H 0b
  181. #define X_I 0c
  182. #define X_J 0d
  183. #define X_K 0e
  184. #define X_L 0f
  185. #define X_M 10
  186. #define X_N 11
  187. #define X_O 12
  188. #define X_P 13
  189. #define X_Q 14
  190. #define X_R 15
  191. #define X_S 16
  192. #define X_T 17
  193. #define X_U 18
  194. #define X_V 19
  195. #define X_W 1a
  196. #define X_X 1b
  197. #define X_Y 1c
  198. #define X_Z 1d
  199. #define X_1 1e
  200. #define X_2 1f
  201. #define X_3 20
  202. #define X_4 21
  203. #define X_5 22
  204. #define X_6 23
  205. #define X_7 24
  206. #define X_8 25
  207. #define X_9 26
  208. #define X_0 27
  209. #define X_ENTER 28
  210. #define X_ESCAPE 29
  211. #define X_BACKSPACE 2a
  212. #define X_TAB 2b
  213. #define X_SPACE 2c
  214. #define X_MINUS 2d
  215. #define X_EQUAL 2e
  216. #define X_LEFT_BRACKET 2f
  217. #define X_RIGHT_BRACKET 30
  218. #define X_BACKSLASH 31
  219. #define X_NONUS_HASH 32
  220. #define X_SEMICOLON 33
  221. #define X_QUOTE 34
  222. #define X_GRAVE 35
  223. #define X_COMMA 36
  224. #define X_DOT 37
  225. #define X_SLASH 38
  226. #define X_CAPS_LOCK 39
  227. #define X_F1 3a
  228. #define X_F2 3b
  229. #define X_F3 3c
  230. #define X_F4 3d
  231. #define X_F5 3e
  232. #define X_F6 3f
  233. #define X_F7 40
  234. #define X_F8 41
  235. #define X_F9 42
  236. #define X_F10 43
  237. #define X_F11 44
  238. #define X_F12 45
  239. #define X_PRINT_SCREEN 46
  240. #define X_SCROLL_LOCK 47
  241. #define X_PAUSE 48
  242. #define X_INSERT 49
  243. #define X_HOME 4a
  244. #define X_PAGE_UP 4b
  245. #define X_DELETE 4c
  246. #define X_END 4d
  247. #define X_PAGE_DOWN 4e
  248. #define X_RIGHT 4f
  249. #define X_LEFT 50
  250. #define X_DOWN 51
  251. #define X_UP 52
  252. #define X_NUM_LOCK 53
  253. #define X_KP_SLASH 54
  254. #define X_KP_ASTERISK 55
  255. #define X_KP_MINUS 56
  256. #define X_KP_PLUS 57
  257. #define X_KP_ENTER 58
  258. #define X_KP_1 59
  259. #define X_KP_2 5a
  260. #define X_KP_3 5b
  261. #define X_KP_4 5c
  262. #define X_KP_5 5d
  263. #define X_KP_6 5e
  264. #define X_KP_7 5f
  265. #define X_KP_8 60
  266. #define X_KP_9 61
  267. #define X_KP_0 62
  268. #define X_KP_DOT 63
  269. #define X_NONUS_BACKSLASH 64
  270. #define X_APPLICATION 65
  271. #define X_KB_POWER 66
  272. #define X_KP_EQUAL 67
  273. #define X_F13 68
  274. #define X_F14 69
  275. #define X_F15 6a
  276. #define X_F16 6b
  277. #define X_F17 6c
  278. #define X_F18 6d
  279. #define X_F19 6e
  280. #define X_F20 6f
  281. #define X_F21 70
  282. #define X_F22 71
  283. #define X_F23 72
  284. #define X_F24 73
  285. #define X_EXECUTE 74
  286. #define X_HELP 75
  287. #define X_MENU 76
  288. #define X_SELECT 77
  289. #define X_STOP 78
  290. #define X_AGAIN 79
  291. #define X_UNDO 7a
  292. #define X_CUT 7b
  293. #define X_COPY 7c
  294. #define X_PASTE 7d
  295. #define X_FIND 7e
  296. #define X_KB_MUTE 7f
  297. #define X_KB_VOLUME_UP 80
  298. #define X_KB_VOLUME_DOWN 81
  299. #define X_LOCKING_CAPS_LOCK 82
  300. #define X_LOCKING_NUM_LOCK 83
  301. #define X_LOCKING_SCROLL_LOCK 84
  302. #define X_KP_COMMA 85
  303. #define X_KP_EQUAL_AS400 86
  304. #define X_INTERNATIONAL_1 87
  305. #define X_INTERNATIONAL_2 88
  306. #define X_INTERNATIONAL_3 89
  307. #define X_INTERNATIONAL_4 8a
  308. #define X_INTERNATIONAL_5 8b
  309. #define X_INTERNATIONAL_6 8c
  310. #define X_INTERNATIONAL_7 8d
  311. #define X_INTERNATIONAL_8 8e
  312. #define X_INTERNATIONAL_9 8f
  313. #define X_LANGUAGE_1 90
  314. #define X_LANGUAGE_2 91
  315. #define X_LANGUAGE_3 92
  316. #define X_LANGUAGE_4 93
  317. #define X_LANGUAGE_5 94
  318. #define X_LANGUAGE_6 95
  319. #define X_LANGUAGE_7 96
  320. #define X_LANGUAGE_8 97
  321. #define X_LANGUAGE_9 98
  322. #define X_ALTERNATE_ERASE 99
  323. #define X_SYSTEM_REQUEST 9a
  324. #define X_CANCEL 9b
  325. #define X_CLEAR 9c
  326. #define X_PRIOR 9d
  327. #define X_RETURN 9e
  328. #define X_SEPARATOR 9f
  329. #define X_OUT a0
  330. #define X_OPER a1
  331. #define X_CLEAR_AGAIN a2
  332. #define X_CRSEL a3
  333. #define X_EXSEL a4
  334. /* Modifiers */
  335. #define X_LEFT_CTRL e0
  336. #define X_LEFT_SHIFT e1
  337. #define X_LEFT_ALT e2
  338. #define X_LEFT_GUI e3
  339. #define X_RIGHT_CTRL e4
  340. #define X_RIGHT_SHIFT e5
  341. #define X_RIGHT_ALT e6
  342. #define X_RIGHT_GUI e7
  343. /* Media and Function keys */
  344. /* Generic Desktop Page (0x01) */
  345. #define X_SYSTEM_POWER a5
  346. #define X_SYSTEM_SLEEP a6
  347. #define X_SYSTEM_WAKE a7
  348. /* Consumer Page (0x0C) */
  349. #define X_AUDIO_MUTE a8
  350. #define X_AUDIO_VOL_UP a9
  351. #define X_AUDIO_VOL_DOWN aa
  352. #define X_MEDIA_NEXT_TRACK ab
  353. #define X_MEDIA_PREV_TRACK ac
  354. #define X_MEDIA_STOP ad
  355. #define X_MEDIA_PLAY_PAUSE ae
  356. #define X_MEDIA_SELECT af
  357. #define X_MEDIA_EJECT b0
  358. #define X_MAIL b1
  359. #define X_CALCULATOR b2
  360. #define X_MY_COMPUTER b3
  361. #define X_WWW_SEARCH b4
  362. #define X_WWW_HOME b5
  363. #define X_WWW_BACK b6
  364. #define X_WWW_FORWARD b7
  365. #define X_WWW_STOP b8
  366. #define X_WWW_REFRESH b9
  367. #define X_WWW_FAVORITES ba
  368. #define X_MEDIA_FAST_FORWARD bb
  369. #define X_MEDIA_REWIND bc
  370. #define X_BRIGHTNESS_UP bd
  371. #define X_BRIGHTNESS_DOWN be
  372. #define X_CONTROL_PANEL bf
  373. #define X_ASSISTANT c0
  374. /* Mouse Buttons (unallocated range in HID spec) */
  375. #ifdef VIA_ENABLE
  376. #define X_MS_UP f0
  377. #define X_MS_DOWN f1
  378. #define X_MS_LEFT f2
  379. #define X_MS_RIGHT f3
  380. #define X_MS_BTN1 f4
  381. #define X_MS_BTN2 f5
  382. #define X_MS_BTN3 f6
  383. #define X_MS_BTN4 f7
  384. #define X_MS_BTN5 f8
  385. #define X_MS_BTN6 f8
  386. #define X_MS_BTN7 f8
  387. #define X_MS_BTN8 f8
  388. #define X_MS_WH_UP f9
  389. #define X_MS_WH_DOWN fa
  390. #define X_MS_WH_LEFT fb
  391. #define X_MS_WH_RIGHT fc
  392. #define X_MS_ACCEL0 fd
  393. #define X_MS_ACCEL1 fe
  394. #define X_MS_ACCEL2 ff
  395. #else
  396. #define X_MS_UP cd
  397. #define X_MS_DOWN ce
  398. #define X_MS_LEFT cf
  399. #define X_MS_RIGHT d0
  400. #define X_MS_BTN1 d1
  401. #define X_MS_BTN2 d2
  402. #define X_MS_BTN3 d3
  403. #define X_MS_BTN4 d4
  404. #define X_MS_BTN5 d5
  405. #define X_MS_BTN6 d6
  406. #define X_MS_BTN7 d7
  407. #define X_MS_BTN8 d8
  408. #define X_MS_WH_UP d9
  409. #define X_MS_WH_DOWN da
  410. #define X_MS_WH_LEFT db
  411. #define X_MS_WH_RIGHT dc
  412. #define X_MS_ACCEL0 dd
  413. #define X_MS_ACCEL1 de
  414. #define X_MS_ACCEL2 df
  415. #endif
  416. // Send string macros
  417. #define STRINGIZE(z) #z
  418. #define ADD_SLASH_X(y) STRINGIZE(\x##y)
  419. #define SYMBOL_STR(x) ADD_SLASH_X(x)
  420. #define SS_QMK_PREFIX 1
  421. #define SS_TAP_CODE 1
  422. #define SS_DOWN_CODE 2
  423. #define SS_UP_CODE 3
  424. #define SS_DELAY_CODE 4
  425. #define SS_TAP(keycode) "\1\1" SYMBOL_STR(keycode)
  426. #define SS_DOWN(keycode) "\1\2" SYMBOL_STR(keycode)
  427. #define SS_UP(keycode) "\1\3" SYMBOL_STR(keycode)
  428. #define SS_DELAY(msecs) "\1\4" STRINGIZE(msecs) "|"
  429. // `string` arguments must not be parenthesized
  430. #define SS_LCTL(string) SS_DOWN(X_LCTL) string SS_UP(X_LCTL)
  431. #define SS_LSFT(string) SS_DOWN(X_LSFT) string SS_UP(X_LSFT)
  432. #define SS_LALT(string) SS_DOWN(X_LALT) string SS_UP(X_LALT)
  433. #define SS_LGUI(string) SS_DOWN(X_LGUI) string SS_UP(X_LGUI)
  434. #define SS_LOPT(string) SS_LALT(string)
  435. #define SS_LCMD(string) SS_LGUI(string)
  436. #define SS_LWIN(string) SS_LGUI(string)
  437. #define SS_RCTL(string) SS_DOWN(X_RCTL) string SS_UP(X_RCTL)
  438. #define SS_RSFT(string) SS_DOWN(X_RSFT) string SS_UP(X_RSFT)
  439. #define SS_RALT(string) SS_DOWN(X_RALT) string SS_UP(X_RALT)
  440. #define SS_RGUI(string) SS_DOWN(X_RGUI) string SS_UP(X_RGUI)
  441. #define SS_ALGR(string) SS_RALT(string)
  442. #define SS_ROPT(string) SS_RALT(string)
  443. #define SS_RCMD(string) SS_RGUI(string)
  444. #define SS_RWIN(string) SS_RGUI(string)