1pub const KEY_MAX: u16 = 850;
5
6#[test]
7fn keycode_max_test() {
8 assert!((KeyCode::KeyMax as u16) < KEY_MAX);
9}
10
11#[allow(missing_docs)]
12#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
15#[repr(u16)]
16pub enum KeyCode {
17 ErrorUndefined = 0,
18 Escape = 1,
19 Kb1 = 2,
20 Kb2 = 3,
21 Kb3 = 4,
22 Kb4 = 5,
23 Kb5 = 6,
24 Kb6 = 7,
25 Kb7 = 8,
26 Kb8 = 9,
27 Kb9 = 10,
28 Kb0 = 11,
29 Minus = 12,
30 Equal = 13,
31 BSpace = 14,
32 Tab = 15,
33 Q = 16,
34 W = 17,
35 E = 18,
36 R = 19,
37 T = 20,
38 Y = 21,
39 U = 22,
40 I = 23,
41 O = 24,
42 P = 25,
43 LBracket = 26,
44 RBracket = 27,
45 Enter = 28,
46 LCtrl = 29,
47 A = 30,
48 S = 31,
49 D = 32,
50 F = 33,
51 G = 34,
52 H = 35,
53 J = 36,
54 K = 37,
55 L = 38,
56 SColon = 39,
57 Quote = 40,
58 Grave = 41,
59 LShift = 42,
60 Bslash = 43,
61 Z = 44,
62 X = 45,
63 C = 46,
64 V = 47,
65 B = 48,
66 N = 49,
67 M = 50,
68 Comma = 51,
69 Dot = 52,
70 Slash = 53,
71 RShift = 54,
72 KpAsterisk = 55,
73 LAlt = 56,
74 Space = 57,
75 CapsLock = 58,
76 F1 = 59,
77 F2 = 60,
78 F3 = 61,
79 F4 = 62,
80 F5 = 63,
81 F6 = 64,
82 F7 = 65,
83 F8 = 66,
84 F9 = 67,
85 F10 = 68,
86 NumLock = 69,
87 ScrollLock = 70,
88 Kp7 = 71,
89 Kp8 = 72,
90 Kp9 = 73,
91 KpMinus = 74,
92 Kp4 = 75,
93 Kp5 = 76,
94 Kp6 = 77,
95 KpPlus = 78,
96 Kp1 = 79,
97 Kp2 = 80,
98 Kp3 = 81,
99 Kp0 = 82,
100 KpDot = 83,
101 K0xBF = 84,
102 K0xC0 = 85,
103 NonUsBslash = 86,
104 F11 = 87,
105 F12 = 88,
106 Intl1 = 89,
107 K0xB1 = 90,
108 K0xB3 = 91,
109 K0xB0 = 92,
110 K0xB2 = 93,
111 K0xAF = 94,
112 NonUsHash = 95,
113 KpEnter = 96,
114 RCtrl = 97,
115 KpSlash = 98,
116 SysReq = 99,
117 RAlt = 100,
118 K0xC1 = 101,
119 Home = 102,
120 Up = 103,
121 PgUp = 104,
122 Left = 105,
123 Right = 106,
124 End = 107,
125 Down = 108,
126 PgDown = 109,
127 Insert = 110,
128 Delete = 111,
129 K0xC2 = 112,
130 Mute = 113,
131 VolDown = 114,
132 VolUp = 115,
133 Power = 116,
134 KpEqual = 117,
135 K0xC3 = 118,
136 Pause = 119,
137 K0xC4 = 120,
138 KpComma = 121,
139 Lang1 = 122,
140 Lang2 = 123,
141 Intl3 = 124,
142 LGui = 125,
143 RGui = 126,
144 Application = 127,
145 Stop = 128,
146 Again = 129,
147 K0xC5 = 130,
148 Undo = 131,
149 K0xC6 = 132,
150 Copy = 133,
151 K0xC7 = 134,
152 Paste = 135,
153 Find = 136,
154 Cut = 137,
155 Help = 138,
156 Menu = 139,
157 MediaCalc = 140,
158 K0xC8 = 141,
159 MediaSleep = 142,
160 Wakeup = 143,
161 K0xC9 = 144,
162 K0xCA = 145,
163 K0xCB = 146,
164 K0xCC = 147,
165 K0xCD = 148,
166 K0xCE = 149,
167 MediaWWW = 150,
168 K0xCF = 151,
169 MediaCoffee = 152,
170 K0xD0 = 153,
171 K0xD1 = 154,
172 K0xAE = 155,
173 K0xD2 = 156,
174 K0xD3 = 157,
175 MediaBack = 158,
176 MediaForward = 159,
177 MediaStop = 160,
178 MediaEjectCD = 161,
179 MediaFind = 162,
180 MediaNextSong = 163,
181 MediaPlayPause = 164,
182 MediaPreviousSong = 165,
183 MediaStopCD = 166,
184 K0xD4 = 167,
185 K0xD5 = 168,
186 K0xD6 = 169,
187 K0xD7 = 170,
188 K0xD8 = 171,
189 K0xAD = 172,
190 MediaRefresh = 173,
191 K0xD9 = 174,
192 K0xDA = 175,
193 MediaEdit = 176,
194 MediaScrollUp = 177,
195 MediaScrollDown = 178,
196 K0xDB = 179,
197 K0xDC = 180,
198 K0xDD = 181,
199 K0xDE = 182,
200 F13 = 183,
201 F14 = 184,
202 F15 = 185,
203 F16 = 186,
204 F17 = 187,
205 F18 = 188,
206 F19 = 189,
207 F20 = 190,
208 F21 = 191,
209 F22 = 192,
210 F23 = 193,
211 F24 = 194,
212 Execute = 195,
213 LockingCapsLock = 196,
214 LockingNumLock = 197,
215 LockingScrollLock = 198,
216 KpEqualSign = 199,
217 Intl2 = 200,
218 Intl4 = 201,
219 Intl5 = 202,
220 Intl6 = 203,
221 Intl7 = 204,
222 Intl8 = 205,
223 Intl9 = 206,
224 Select = 207,
225 Lang3 = 208,
226 Lang4 = 209,
227 PScreen = 210,
228 Lang5 = 211,
229 Lang6 = 212,
230 Lang7 = 213,
231 Lang8 = 214,
232 K0xAB = 215,
233 Lang9 = 216,
234 K0xDF = 217,
235 K0xBE = 218,
236 Clear = 219,
237 K220 = 220,
238 K0xAC = 221,
239 AltErase = 222,
240 Cancel = 223,
241 BrightnessDown = 224,
242 BrightnessUp = 225,
243 K0xAA = 226,
244 Prior = 227,
245 Return = 228,
246 KbdIllumDown = 229,
247 KbdIllumUp = 230,
248 Separator = 231,
249 Out = 232,
250 Oper = 233,
251 ClearAgain = 234,
252 CrSel = 235,
253 ExSel = 236,
254 K0xB4 = 237,
255 K0xB5 = 238,
256 K0xB6 = 239,
257 No = 240,
258 K0xB7 = 241,
259 K0xB8 = 242,
260 K0xB9 = 243,
261 K0xBA = 244,
262 K0xBB = 245,
263 K0xBC = 246,
264 K0xBD = 247,
265 MediaMute = 248,
266 K249 = 249,
267 PostFail = 250,
268 ErrorRollOver = 251,
269 K252 = 252,
270 K253 = 253,
271 K254 = 254,
272 K255 = 255,
273 K256 = 256,
274 K257 = 257,
275 K258 = 258,
276 K259 = 259,
277 K260 = 260,
278 K261 = 261,
279 K262 = 262,
280 K263 = 263,
281 K264 = 264,
282 K265 = 265,
283 K266 = 266,
284 K267 = 267,
285 K268 = 268,
286 K269 = 269,
287 K270 = 270,
288 K271 = 271,
289 K272 = 272,
290 K273 = 273,
291 K274 = 274,
292 K275 = 275,
293 K276 = 276,
294 K277 = 277,
295 K278 = 278,
296 K279 = 279,
297 K280 = 280,
298 K281 = 281,
299 K282 = 282,
300 K283 = 283,
301 K284 = 284,
302 K285 = 285,
303 K286 = 286,
304 K287 = 287,
305 K288 = 288,
306 K289 = 289,
307 K290 = 290,
308 K291 = 291,
309 K292 = 292,
310 K293 = 293,
311 K294 = 294,
312 K295 = 295,
313 K296 = 296,
314 K297 = 297,
315 K298 = 298,
316 K299 = 299,
317 K300 = 300,
318 K301 = 301,
319 K302 = 302,
320 K303 = 303,
321 K304 = 304,
322 K305 = 305,
323 K306 = 306,
324 K307 = 307,
325 K308 = 308,
326 K309 = 309,
327 K310 = 310,
328 K311 = 311,
329 K312 = 312,
330 K313 = 313,
331 K314 = 314,
332 K315 = 315,
333 K316 = 316,
334 K317 = 317,
335 K318 = 318,
336 K319 = 319,
337 K320 = 320,
338 K321 = 321,
339 K322 = 322,
340 K323 = 323,
341 K324 = 324,
342 K325 = 325,
343 K326 = 326,
344 K327 = 327,
345 K328 = 328,
346 K329 = 329,
347 K330 = 330,
348 K331 = 331,
349 K332 = 332,
350 K333 = 333,
351 K334 = 334,
352 K335 = 335,
353 K336 = 336,
354 K337 = 337,
355 K338 = 338,
356 K339 = 339,
357 K340 = 340,
358 K341 = 341,
359 K342 = 342,
360 K343 = 343,
361 K344 = 344,
362 K345 = 345,
363 K346 = 346,
364 K347 = 347,
365 K348 = 348,
366 K349 = 349,
367 K350 = 350,
368 K351 = 351,
369 K352 = 352,
370 K353 = 353,
371 K354 = 354,
372 K355 = 355,
373 K356 = 356,
374 K357 = 357,
375 K358 = 358,
376 K359 = 359,
377 K360 = 360,
378 K361 = 361,
379 K362 = 362,
380 K363 = 363,
381 K364 = 364,
382 K365 = 365,
383 K366 = 366,
384 K367 = 367,
385 K368 = 368,
386 K369 = 369,
387 K370 = 370,
388 K371 = 371,
389 K372 = 372,
390 K373 = 373,
391 K374 = 374,
392 K375 = 375,
393 K376 = 376,
394 K377 = 377,
395 K378 = 378,
396 K379 = 379,
397 K380 = 380,
398 K381 = 381,
399 K382 = 382,
400 K383 = 383,
401 K384 = 384,
402 K385 = 385,
403 K386 = 386,
404 K387 = 387,
405 K388 = 388,
406 K389 = 389,
407 K390 = 390,
408 K391 = 391,
409 K392 = 392,
410 K393 = 393,
411 K394 = 394,
412 K395 = 395,
413 K396 = 396,
414 K397 = 397,
415 K398 = 398,
416 K399 = 399,
417 K400 = 400,
418 K401 = 401,
419 K402 = 402,
420 K403 = 403,
421 K404 = 404,
422 K405 = 405,
423 K406 = 406,
424 K407 = 407,
425 K408 = 408,
426 K409 = 409,
427 K410 = 410,
428 K411 = 411,
429 K412 = 412,
430 K413 = 413,
431 K414 = 414,
432 K415 = 415,
433 K416 = 416,
434 K417 = 417,
435 K418 = 418,
436 K419 = 419,
437 K420 = 420,
438 K421 = 421,
439 K422 = 422,
440 K423 = 423,
441 K424 = 424,
442 K425 = 425,
443 K426 = 426,
444 K427 = 427,
445 K428 = 428,
446 K429 = 429,
447 K430 = 430,
448 K431 = 431,
449 K432 = 432,
450 K433 = 433,
451 K434 = 434,
452 K435 = 435,
453 K436 = 436,
454 K437 = 437,
455 K438 = 438,
456 K439 = 439,
457 K440 = 440,
458 K441 = 441,
459 K442 = 442,
460 K443 = 443,
461 K444 = 444,
462 K445 = 445,
463 K446 = 446,
464 K447 = 447,
465 K448 = 448,
466 K449 = 449,
467 K450 = 450,
468 K451 = 451,
469 K452 = 452,
470 K453 = 453,
471 K454 = 454,
472 K455 = 455,
473 K456 = 456,
474 K457 = 457,
475 K458 = 458,
476 K459 = 459,
477 K460 = 460,
478 K461 = 461,
479 K462 = 462,
480 K463 = 463,
481 K464 = 464,
482 K465 = 465,
483 K466 = 466,
484 K467 = 467,
485 K468 = 468,
486 K469 = 469,
487 K470 = 470,
488 K471 = 471,
489 K472 = 472,
490 K473 = 473,
491 K474 = 474,
492 K475 = 475,
493 K476 = 476,
494 K477 = 477,
495 K478 = 478,
496 K479 = 479,
497 K480 = 480,
498 K481 = 481,
499 K482 = 482,
500 K483 = 483,
501 K484 = 484,
502 K485 = 485,
503 K486 = 486,
504 K487 = 487,
505 K488 = 488,
506 K489 = 489,
507 K490 = 490,
508 K491 = 491,
509 K492 = 492,
510 K493 = 493,
511 K494 = 494,
512 K495 = 495,
513 K496 = 496,
514 K497 = 497,
515 K498 = 498,
516 K499 = 499,
517 K500 = 500,
518 K501 = 501,
519 K502 = 502,
520 K503 = 503,
521 K504 = 504,
522 K505 = 505,
523 K506 = 506,
524 K507 = 507,
525 K508 = 508,
526 K509 = 509,
527 K510 = 510,
528 K511 = 511,
529 K512 = 512,
530 K513 = 513,
531 K514 = 514,
532 K515 = 515,
533 K516 = 516,
534 K517 = 517,
535 K518 = 518,
536 K519 = 519,
537 K520 = 520,
538 K521 = 521,
539 K522 = 522,
540 K523 = 523,
541 K524 = 524,
542 K525 = 525,
543 K526 = 526,
544 K527 = 527,
545 K528 = 528,
546 K529 = 529,
547 K530 = 530,
548 K531 = 531,
549 K532 = 532,
550 K533 = 533,
551 K534 = 534,
552 K535 = 535,
553 K536 = 536,
554 K537 = 537,
555 K538 = 538,
556 K539 = 539,
557 K540 = 540,
558 K541 = 541,
559 K542 = 542,
560 K543 = 543,
561 K544 = 544,
562 K545 = 545,
563 K546 = 546,
564 K547 = 547,
565 K548 = 548,
566 K549 = 549,
567 K550 = 550,
568 K551 = 551,
569 K552 = 552,
570 K553 = 553,
571 K554 = 554,
572 K555 = 555,
573 K556 = 556,
574 K557 = 557,
575 K558 = 558,
576 K559 = 559,
577 K560 = 560,
578 K561 = 561,
579 K562 = 562,
580 K563 = 563,
581 K564 = 564,
582 K565 = 565,
583 K566 = 566,
584 K567 = 567,
585 K568 = 568,
586 K569 = 569,
587 K570 = 570,
588 K571 = 571,
589 K572 = 572,
590 K573 = 573,
591 K574 = 574,
592 K575 = 575,
593 K576 = 576,
594 K577 = 577,
595 K578 = 578,
596 K579 = 579,
597 K580 = 580,
598 K581 = 581,
599 K582 = 582,
600 K583 = 583,
601 K584 = 584,
602 K585 = 585,
603 K586 = 586,
604 K587 = 587,
605 K588 = 588,
606 K589 = 589,
607 K590 = 590,
608 K591 = 591,
609 K592 = 592,
610 K593 = 593,
611 K594 = 594,
612 K595 = 595,
613 K596 = 596,
614 K597 = 597,
615 K598 = 598,
616 K599 = 599,
617 K600 = 600,
618 K601 = 601,
619 K602 = 602,
620 K603 = 603,
621 K604 = 604,
622 K605 = 605,
623 K606 = 606,
624 K607 = 607,
625 K608 = 608,
626 K609 = 609,
627 K610 = 610,
628 K611 = 611,
629 K612 = 612,
630 K613 = 613,
631 K614 = 614,
632 K615 = 615,
633 K616 = 616,
634 K617 = 617,
635 K618 = 618,
636 K619 = 619,
637 K620 = 620,
638 K621 = 621,
639 K622 = 622,
640 K623 = 623,
641 K624 = 624,
642 K625 = 625,
643 K626 = 626,
644 K627 = 627,
645 K628 = 628,
646 K629 = 629,
647 K630 = 630,
648 K631 = 631,
649 K632 = 632,
650 K633 = 633,
651 K634 = 634,
652 K635 = 635,
653 K636 = 636,
654 K637 = 637,
655 K638 = 638,
656 K639 = 639,
657 K640 = 640,
658 K641 = 641,
659 K642 = 642,
660 K643 = 643,
661 K644 = 644,
662 K645 = 645,
663 K646 = 646,
664 K647 = 647,
665 K648 = 648,
666 K649 = 649,
667 K650 = 650,
668 K651 = 651,
669 K652 = 652,
670 K653 = 653,
671 K654 = 654,
672 K655 = 655,
673 K656 = 656,
674 K657 = 657,
675 K658 = 658,
676 K659 = 659,
677 K660 = 660,
678 K661 = 661,
679 K662 = 662,
680 K663 = 663,
681 K664 = 664,
682 K665 = 665,
683 K666 = 666,
684 K667 = 667,
685 K668 = 668,
686 K669 = 669,
687 K670 = 670,
688 K671 = 671,
689 K672 = 672,
690 K673 = 673,
691 K674 = 674,
692 K675 = 675,
693 K676 = 676,
694 K677 = 677,
695 K678 = 678,
696 K679 = 679,
697 K680 = 680,
698 K681 = 681,
699 K682 = 682,
700 K683 = 683,
701 K684 = 684,
702 K685 = 685,
703 K686 = 686,
704 K687 = 687,
705 K688 = 688,
706 K689 = 689,
707 K690 = 690,
708 K691 = 691,
709 K692 = 692,
710 K693 = 693,
711 K694 = 694,
712 K695 = 695,
713 K696 = 696,
714 K697 = 697,
715 K698 = 698,
716 K699 = 699,
717 K700 = 700,
718 K701 = 701,
719 K702 = 702,
720 K703 = 703,
721 K704 = 704,
722 K705 = 705,
723 K706 = 706,
724 K707 = 707,
725 K708 = 708,
726 K709 = 709,
727 K710 = 710,
728 K711 = 711,
729 K712 = 712,
730 K713 = 713,
731 K714 = 714,
732 K715 = 715,
733 K716 = 716,
734 K717 = 717,
735 K718 = 718,
736 K719 = 719,
737 K720 = 720,
738 K721 = 721,
739 K722 = 722,
740 K723 = 723,
741 K724 = 724,
742 K725 = 725,
743 K726 = 726,
744 K727 = 727,
745 K728 = 728,
746 K729 = 729,
747 K730 = 730,
748 K731 = 731,
749 K732 = 732,
750 K733 = 733,
751 K734 = 734,
752 K735 = 735,
753 K736 = 736,
754 K737 = 737,
755 K738 = 738,
756 K739 = 739,
757 K740 = 740,
758 K741 = 741,
759 K742 = 742,
760 K743 = 743,
761 K744 = 744,
762 MWU = 745,
763 MWD = 746,
764 MWL = 747,
765 MWR = 748,
766 K749 = 749,
767 K750 = 750,
768 K751 = 751,
769 K752 = 752,
770 K753 = 753,
771 K754 = 754,
772 K755 = 755,
773 K756 = 756,
774 K757 = 757,
775 K758 = 758,
776 K759 = 759,
777 K760 = 760,
778 K761 = 761,
779 K762 = 762,
780 K763 = 763,
781 K764 = 764,
782 K765 = 765,
783 K766 = 766,
784 KeyMax = 767,
785}
786
787impl KeyCode {
788 pub fn is_mod(self) -> bool {
789 use KeyCode::*;
790 matches!(
791 self,
792 LShift | RShift | LCtrl | RCtrl | LAlt | RAlt | LGui | RGui
793 )
794 }
795}
796
797use core::fmt;
798impl fmt::Display for KeyCode {
799 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
800 match self {
801 KeyCode::Kb1 => write!(f, "1"),
802 KeyCode::Kb2 => write!(f, "2"),
803 KeyCode::Kb3 => write!(f, "3"),
804 KeyCode::Kb4 => write!(f, "4"),
805 KeyCode::Kb5 => write!(f, "5"),
806 KeyCode::Kb6 => write!(f, "6"),
807 KeyCode::Kb7 => write!(f, "7"),
808 KeyCode::Kb8 => write!(f, "8"),
809 KeyCode::Kb9 => write!(f, "9"),
810 KeyCode::Kb0 => write!(f, "0"),
811 KeyCode::LCtrl => write!(f, "‹⎈"),
812 KeyCode::RCtrl => write!(f, "⎈›"),
813 KeyCode::LShift => write!(f, "‹⇧"),
814 KeyCode::RShift => write!(f, "⇧›"),
815 KeyCode::LAlt => write!(f, "‹⎇"),
816 KeyCode::RAlt => write!(f, "⎇›"),
817 KeyCode::LGui => write!(f, "‹◆"),
818 KeyCode::RGui => write!(f, "◆›"),
819 KeyCode::Enter => write!(f, "⏎"),
820 KeyCode::Escape => write!(f, "⎋"),
821 KeyCode::BSpace => write!(f, "␈"),
822 KeyCode::Tab => write!(f, "⭾"),
823 KeyCode::Space => write!(f, "␠"),
824 KeyCode::Minus => write!(f, "−"),
825 KeyCode::Equal => write!(f, "="),
826 KeyCode::LBracket => write!(f, "["),
827 KeyCode::RBracket => write!(f, "]"),
828 KeyCode::Bslash => write!(f, "\\"),
829 KeyCode::NonUsHash => write!(f, "#"),
830 KeyCode::SColon => write!(f, ";"),
831 KeyCode::Quote => write!(f, "'"),
832 KeyCode::Grave => write!(f, "`"),
833 KeyCode::Comma => write!(f, ","),
834 KeyCode::Dot => write!(f, "."),
835 KeyCode::Slash => write!(f, "/"),
836 KeyCode::CapsLock => write!(f, "⇪"),
837 KeyCode::Insert => write!(f, "⎀"),
838 KeyCode::Delete => write!(f, "␡"),
839 KeyCode::Home => write!(f, "⇤"),
840 KeyCode::End => write!(f, "⇥"),
841 KeyCode::PgDown => write!(f, "⇟"),
842 KeyCode::PgUp => write!(f, "⇞"),
843 KeyCode::Down => write!(f, "▼"),
844 KeyCode::Up => write!(f, "▲"),
845 KeyCode::Right => write!(f, "▶"),
846 KeyCode::Left => write!(f, "◀"),
847 KeyCode::NumLock => write!(f, "⇭"),
848 KeyCode::KpSlash => write!(f, "🔢/"),
849 KeyCode::KpAsterisk => write!(f, "🔢*"),
850 KeyCode::KpMinus => write!(f, "🔢−"),
851 KeyCode::KpPlus => write!(f, "🔢+"),
852 KeyCode::KpEnter => write!(f, "🔢⏎"),
853 KeyCode::Kp0 => write!(f, "🔢0"),
854 KeyCode::Kp1 => write!(f, "🔢1"),
855 KeyCode::Kp2 => write!(f, "🔢2"),
856 KeyCode::Kp3 => write!(f, "🔢3"),
857 KeyCode::Kp4 => write!(f, "🔢4"),
858 KeyCode::Kp5 => write!(f, "🔢5"),
859 KeyCode::Kp6 => write!(f, "🔢6"),
860 KeyCode::Kp7 => write!(f, "🔢7"),
861 KeyCode::Kp8 => write!(f, "🔢8"),
862 KeyCode::Kp9 => write!(f, "🔢9"),
863 KeyCode::KpDot => write!(f, "🔢."),
864 KeyCode::KpEqual => write!(f, "🔢="),
865 KeyCode::NonUsBslash => write!(f, "|"),
866 KeyCode::Application => write!(f, "☰"),
867 KeyCode::Mute => write!(f, "🔇"),
868 KeyCode::VolUp => write!(f, "🔊"),
869 KeyCode::VolDown => write!(f, "🔉"),
870 _ => write!(f, "{self:?}"),
871 }
872 }
873}