kanata_keyberon/
key_code.rs

1//! Key code definitions.
2
3/// Used for switch opcode purposes. Keys should not exceed this amount.
4pub 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/// Define a key code according to the HID specification.  Their names
13/// correspond to the american QWERTY layout.
14#[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}