SDL_Keycode(3type)

πŸ’– SDL_Keycode β€” it's giving SDL3 DATATYPES, bestie πŸ’–

okay so welcome to the SDL_Keycode page, part one of four, and yes we're starting with the basics because that's how we do. this is a 3type page from the SDL3 DATATYPES collection. iykyk. πŸŽ€


✨ NAME ✨

SDL_Keycode β€” the SDL virtual key representation. that's it, that's the whole vibe. it's how SDL talks about keys. πŸ‘‘


🌸 SYNOPSIS 🌸

first things first, you gotta pull in the header or nothing works, fr fr:

#include <SDL3/SDL_keycode.h>

and then boom, here's the actual type, no cap:

typedef Uint32 SDL_Keycode;

so SDL_Keycode is literally just a Uint32 wearing a little name tag. unsigned 32-bit integer, that's the whole thing. not me getting emotional over a typedef. 😭


okay that's the setup, the rest of the pages are coming so don't go anywhere bestie πŸ’…

Like okay, bestie, we're back and we are knee deep in keycode sauce now πŸ’…βœ¨ This is the part where the actual values show up, and yes, every single one matters, so buckle in. 🫢

First up, the two masks and the macro that glues scancodes into keycodes. These are the ✨ infrastructure ✨, the scaffolding, the bones of the whole thing:

       #define SDLK_EXTENDED_MASK          (1u << 29)
       #define SDLK_SCANCODE_MASK          (1u << 30)
       #define SDL_SCANCODE_TO_KEYCODE(X)  (X | SDLK_SCANCODE_MASK)

No cap, that last one is doing so much heavy lifting. SDL_SCANCODE_TO_KEYCODE(X) takes a scancode X and ORs it with SDLK_SCANCODE_MASK, and that's the whole vibe of how scancode-based keycodes get built. 🌈

Then we hit the control crew. The ones you literally cannot live without:

       #define SDLK_UNKNOWN                0x00000000u /**< 0 */
       #define SDLK_RETURN                 0x0000000du /**< '\r' */
       #define SDLK_ESCAPE                 0x0000001bu /**< '\x1B' */
       #define SDLK_BACKSPACE              0x00000008u /**< '\b' */
       #define SDLK_TAB                    0x00000009u /**< '\t' */
       #define SDLK_SPACE                  0x00000020u /**< ' ' */

SDLK_UNKNOWN is the "idk her" of keycodes at 0x00000000u, and look at those little comments β€” each one tells you the character it maps to. '\r', '\x1B', '\b', '\t', ' '. Chef's kiss. πŸŽ€

Now the punctuation era begins and honestly it's giving keyboard asmr:

       #define SDLK_EXCLAIM                0x00000021u /**< '!' */
       #define SDLK_DBLAPOSTROPHE          0x00000022u /**< '"' */
       #define SDLK_HASH                   0x00000023u /**< '#' */
       #define SDLK_DOLLAR                 0x00000024u /**< '$' */
       #define SDLK_PERCENT                0x00000025u /**< '%' */
       #define SDLK_AMPERSAND              0x00000026u /**< '&' */
       #define SDLK_APOSTROPHE             0x00000027u /**< '\'' */
       #define SDLK_LEFTPAREN              0x00000028u /**< '(' */
       #define SDLK_RIGHTPAREN             0x00000029u /**< ')' */
       #define SDLK_ASTERISK               0x0000002au /**< '*' */
       #define SDLK_PLUS                   0x0000002bu /**< '+' */
       #define SDLK_COMMA                  0x0000002cu /**< ',' */
       #define SDLK_MINUS                  0x0000002du /**< '-' */
       #define SDLK_PERIOD                 0x0000002eu /**< '.' */
       #define SDLK_SLASH                  0x0000002fu /**< '/' */

Notice SDLK_DBLAPOSTROPHE is the double-quote girly at 0x00000022u while plain SDLK_APOSTROPHE is 0x00000027u β€” and yes the comment for that one is '\'' because escaping quotes is a lifestyle. 😭

Digits next, and they are so orderly it's actually soothing:

       #define SDLK_0                      0x00000030u /**< '0' */
       #define SDLK_1                      0x00000031u /**< '1' */
       #define SDLK_2                      0x00000032u /**< '2' */
       #define SDLK_3                      0x00000033u /**< '3' */
       #define SDLK_4                      0x00000034u /**< '4' */
       #define SDLK_5                      0x00000035u /**< '5' */
       #define SDLK_6                      0x00000036u /**< '6' */
       #define SDLK_7                      0x00000037u /**< '7' */
       #define SDLK_8                      0x00000038u /**< '8' */
       #define SDLK_9                      0x00000039u /**< '9' */

SDLK_0 through SDLK_9, 0x00000030u through 0x00000039u. Straight up marching in a line. πŸ”₯

More symbols, we stay winning:

       #define SDLK_COLON                  0x0000003au /**< ':' */
       #define SDLK_SEMICOLON              0x0000003bu /**< ';' */
       #define SDLK_LESS                   0x0000003cu /**< '<' */
       #define SDLK_EQUALS                 0x0000003du /**< '=' */
       #define SDLK_GREATER                0x0000003eu /**< '>' */
       #define SDLK_QUESTION               0x0000003fu /**< '?' */
       #define SDLK_AT                     0x00000040u /**< '@' */
       #define SDLK_LEFTBRACKET            0x0000005bu /**< '[' */
       #define SDLK_BACKSLASH              0x0000005cu /**< '\\' */
       #define SDLK_RIGHTBRACKET           0x0000005du /**< ']' */
       #define SDLK_CARET                  0x0000005eu /**< '^' */
       #define SDLK_UNDERSCORE             0x0000005fu /**< '_' */
       #define SDLK_GRAVE                  0x00000060u /**< '`' */

Look at SDLK_BACKSLASH rocking the '\\' comment β€” double-escaped, unbothered, iconic. And SDLK_GRAVE is your backtick bestie at 0x00000060u. πŸ¦‹

The alphabet, all lowercase in the comment, all present and accounted for:

       #define SDLK_A                      0x00000061u /**< 'a' */
       #define SDLK_B                      0x00000062u /**< 'b' */
       #define SDLK_C                      0x00000063u /**< 'c' */
       #define SDLK_D                      0x00000064u /**< 'd' */
       #define SDLK_E                      0x00000065u /**< 'e' */
       #define SDLK_F                      0x00000066u /**< 'f' */
       #define SDLK_G                      0x00000067u /**< 'g' */
       #define SDLK_H                      0x00000068u /**< 'h' */
       #define SDLK_I                      0x00000069u /**< 'i' */
       #define SDLK_J                      0x0000006au /**< 'j' */
       #define SDLK_K                      0x0000006bu /**< 'k' */
       #define SDLK_L                      0x0000006cu /**< 'l' */
       #define SDLK_M                      0x0000006du /**< 'm' */
       #define SDLK_N                      0x0000006eu /**< 'n' */
       #define SDLK_O                      0x0000006fu /**< 'o' */
       #define SDLK_P                      0x00000070u /**< 'p' */
       #define SDLK_Q                      0x00000071u /**< 'q' */
       #define SDLK_R                      0x00000072u /**< 'r' */
       #define SDLK_S                      0x00000073u /**< 's' */
       #define SDLK_T                      0x00000074u /**< 't' */
       #define SDLK_U                      0x00000075u /**< 'u' */
       #define SDLK_V                      0x00000076u /**< 'v' */
       #define SDLK_W                      0x00000077u /**< 'w' */
       #define SDLK_X                      0x00000078u /**< 'x' */
       #define SDLK_Y                      0x00000079u /**< 'y' */
       #define SDLK_Z                      0x0000007au /**< 'z' */

SDLK_A at 0x00000061u all the way to SDLK_Z at 0x0000007au. So satisfying. πŸ’–

Wrapping up the plain-ASCII crowd with the brackets, braces, and the delete:

       #define SDLK_LEFTBRACE              0x0000007bu /**< '{' */
       #define SDLK_PIPE                   0x0000007cu /**< '|' */
       #define SDLK_RIGHTBRACE             0x0000007du /**< '}' */
       #define SDLK_TILDE                  0x0000007eu /**< '~' */
       #define SDLK_DELETE                 0x0000007fu /**< '\x7F' */
       #define SDLK_PLUSMINUS              0x000000b1u /**< '\xB1' */

SDLK_PLUSMINUS is the little outlier bestie at 0x000000b1u with the comment '\xB1', and SDLK_DELETE is 0x0000007fu with '\x7F'. Both vibing in hex. πŸ’€

And NOW. The main event. The extended keys, where the scancode macro really shows out. Every single one of these has a comment that is literally SDL_SCANCODE_TO_KEYCODE(...), so you can see exactly which scancode it's built from:

       #define SDLK_CAPSLOCK               0x40000039u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK) */
       #define SDLK_F1                     0x4000003au /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1) */
       #define SDLK_F2                     0x4000003bu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2) */
       #define SDLK_F3                     0x4000003cu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3) */
       #define SDLK_F4                     0x4000003du /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4) */
       #define SDLK_F5                     0x4000003eu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5) */
       #define SDLK_F6                     0x4000003fu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6) */
       #define SDLK_F7                     0x40000040u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7) */
       #define SDLK_F8                     0x40000041u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8) */
       #define SDLK_F9                     0x40000042u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9) */
       #define SDLK_F10                    0x40000043u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10) */
       #define SDLK_F11                    0x40000044u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11) */
       #define SDLK_F12                    0x40000045u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12) */
       #define SDLK_PRINTSCREEN            0x40000046u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN) */
       #define SDLK_SCROLLLOCK             0x40000047u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK) */
       #define SDLK_PAUSE                  0x40000048u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE) */
       #define SDLK_INSERT                 0x40000049u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT) */
       #define SDLK_HOME                   0x4000004au /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME) */
       #define SDLK_PAGEUP                 0x4000004bu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP) */
       #define SDLK_END                    0x4000004du /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END) */
       #define SDLK_PAGEDOWN               0x4000004eu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN) */
       #define SDLK_RIGHT                  0x4000004fu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT) */
       #define SDLK_LEFT                   0x40000050u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT) */
       #define SDLK_DOWN                   0x40000051u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN) */
       #define SDLK_UP                     0x40000052u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP) */
       #define SDLK_NUMLOCKCLEAR           0x40000053u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR) */
       #define SDLK_KP_DIVIDE              0x40000054u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE) */
       #define SDLK_KP_MULTIPLY            0x40000055u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY) */
       #define SDLK_KP_MINUS               0x40000056u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS) */
       #define SDLK_KP_PLUS                0x40000057u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS) */
       #define SDLK_KP_ENTER               0x40000058u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER) */
       #define SDLK_KP_1                   0x40000059u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1) */
       #define SDLK_KP_2                   0x4000005au /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2) */
       #define SDLK_KP_3                   0x4000005bu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3) */
       #define SDLK_KP_4                   0x4000005cu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4) */
       #define SDLK_KP_5                   0x4000005du /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5) */
       #define SDLK_KP_6                   0x4000005eu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6) */
       #define SDLK_KP_7                   0x4000005fu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7) */
       #define SDLK_KP_8                   0x40000060u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8) */
       #define SDLK_KP_9                   0x40000061u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9) */
       #define SDLK_KP_0                   0x40000062u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0) */
       #define SDLK_KP_PERIOD              0x40000063u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD) */
       #define SDLK_APPLICATION            0x40000065u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION) */
       #define SDLK_POWER                  0x40000066u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER) */
       #define SDLK_KP_EQUALS              0x40000067u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS) */
       #define SDLK_F13                    0x40000068u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13) */
       #define SDLK_F14                    0x40000069u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14) */
       #define SDLK_F15                    0x4000006au /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15) */
       #define SDLK_F16                    0x4000006bu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16) */
       #define SDLK_F17                    0x4000006cu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17) */
       #define SDLK_F18                    0x4000006du /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18) */
       #define SDLK_F19                    0x4000006eu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19) */
       #define SDLK_F20                    0x4000006fu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20) */
       #define SDLK_F21                    0x40000070u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21) */
       #define SDLK_F22                    0x40000071u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22) */
       #define SDLK_F23                    0x40000072u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23) */
       #define SDLK_F24                    0x40000073u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24) */
       #define SDLK_EXECUTE                0x40000074u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE) */
       #define SDLK_HELP                   0x40000075u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP) */
       #define SDLK_MENU                   0x40000076u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU) */
       #define SDLK_SELECT                 0x40000077u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT) */
       #define SDLK_STOP                   0x40000078u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP) */

See how they all start with 0x400000? That's SDLK_SCANCODE_MASK doing its thing, bestie β€” every scancode-based keycode has that high bit set. 🌟 The function keys SDLK_F1 through SDLK_F24, the whole keypad situation with SDLK_KP_DIVIDE, SDLK_KP_MULTIPLY, SDLK_KP_MINUS, SDLK_KP_PLUS, SDLK_KP_ENTER, SDLK_KP_1 through SDLK_KP_9, SDLK_KP_0, SDLK_KP_PERIOD, SDLK_KP_EQUALS, the nav cluster with SDLK_INSERT, SDLK_HOME, SDLK_PAGEUP, SDLK_END, SDLK_PAGEDOWN, SDLK_RIGHT, SDLK_LEFT, SDLK_DOWN, SDLK_UP… it's a whole extended family reunion and every cousin showed up. πŸ‘‘

And we're still going, because there is more after SDLK_STOP β€” so don't go anywhere. 🌸

okay bestie, the roll call keeps going πŸ’… we're deep in the #define pile now, so hydrate and keep scrolling πŸ“

  • SDLK_AGAIN β€” 0x40000079u, and the little note next to it says SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN) πŸ”
  • SDLK_UNDO β€” 0x4000007au, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO)
  • SDLK_CUT β€” 0x4000007bu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT)
  • SDLK_COPY β€” 0x4000007cu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY)
  • SDLK_PASTE β€” 0x4000007du, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE)
  • SDLK_FIND β€” 0x4000007eu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND) πŸ”
  • SDLK_MUTE β€” 0x4000007fu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE)
  • SDLK_VOLUMEUP β€” 0x40000080u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP)
  • SDLK_VOLUMEDOWN β€” 0x40000081u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN)
  • SDLK_KP_COMMA β€” 0x40000085u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA)
  • SDLK_KP_EQUALSAS400 β€” 0x40000086u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400) ✨

and now we enter the absolute lore section, no cap πŸ“œ

  • SDLK_ALTERASE β€” 0x40000099u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE)
  • SDLK_SYSREQ β€” 0x4000009au, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ)
  • SDLK_CANCEL β€” 0x4000009bu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL)
  • SDLK_CLEAR β€” 0x4000009cu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR)
  • SDLK_PRIOR β€” 0x4000009du, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR)
  • SDLK_RETURN2 β€” 0x4000009eu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2) 😭
  • SDLK_SEPARATOR β€” 0x4000009fu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR)
  • SDLK_OUT β€” 0x400000a0u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT)
  • SDLK_OPER β€” 0x400000a1u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER)
  • SDLK_CLEARAGAIN β€” 0x400000a2u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN)
  • SDLK_CRSEL β€” 0x400000a3u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL)
  • SDLK_EXSEL β€” 0x400000a4u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL)
  • SDLK_FRONT β€” 0x400000a5u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FRONT) πŸ‘‘

the keypad era begins and it is long, bestie, buckle up πŸ’€

  • SDLK_KP_00 β€” 0x400000b0u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00)
  • SDLK_KP_000 β€” 0x400000b1u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000)
  • SDLK_THOUSANDSSEPARATOR β€” 0x400000b2u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR)
  • SDLK_DECIMALSEPARATOR β€” 0x400000b3u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR)
  • SDLK_CURRENCYUNIT β€” 0x400000b4u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT) πŸ’Έ
  • SDLK_CURRENCYSUBUNIT β€” 0x400000b5u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT)
  • SDLK_KP_LEFTPAREN β€” 0x400000b6u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN)
  • SDLK_KP_RIGHTPAREN β€” 0x400000b7u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN)
  • SDLK_KP_LEFTBRACE β€” 0x400000b8u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE)
  • SDLK_KP_RIGHTBRACE β€” 0x400000b9u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE)
  • SDLK_KP_TAB β€” 0x400000bau, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB)
  • SDLK_KP_BACKSPACE β€” 0x400000bbu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE)
  • SDLK_KP_A β€” 0x400000bcu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A)
  • SDLK_KP_B β€” 0x400000bdu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B)
  • SDLK_KP_C β€” 0x400000beu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C)
  • SDLK_KP_D β€” 0x400000bfu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D)
  • SDLK_KP_E β€” 0x400000c0u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E)
  • SDLK_KP_F β€” 0x400000c1u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F) 🧚
  • SDLK_KP_XOR β€” 0x400000c2u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR)
  • SDLK_KP_POWER β€” 0x400000c3u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER)
  • SDLK_KP_PERCENT β€” 0x400000c4u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT)
  • SDLK_KP_LESS β€” 0x400000c5u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS)
  • SDLK_KP_GREATER β€” 0x400000c6u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER)
  • SDLK_KP_AMPERSAND β€” 0x400000c7u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND)
  • SDLK_KP_DBLAMPERSAND β€” 0x400000c8u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND)
  • SDLK_KP_VERTICALBAR β€” 0x400000c9u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR)
  • SDLK_KP_DBLVERTICALBAR β€” 0x400000cau, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR)
  • SDLK_KP_COLON β€” 0x400000cbu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON)
  • SDLK_KP_HASH β€” 0x400000ccu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH)
  • SDLK_KP_SPACE β€” 0x400000cdu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE)
  • SDLK_KP_AT β€” 0x400000ceu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT)
  • SDLK_KP_EXCLAM β€” 0x400000cfu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM) ❗
  • SDLK_KP_MEMSTORE β€” 0x400000d0u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE)
  • SDLK_KP_MEMRECALL β€” 0x400000d1u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL)
  • SDLK_KP_MEMCLEAR β€” 0x400000d2u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR)
  • SDLK_KP_MEMADD β€” 0x400000d3u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD)
  • SDLK_KP_MEMSUBTRACT β€” 0x400000d4u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT)
  • SDLK_KP_MEMMULTIPLY β€” 0x400000d5u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY)
  • SDLK_KP_MEMDIVIDE β€” 0x400000d6u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE)
  • SDLK_KP_PLUSMINUS β€” 0x400000d7u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS)
  • SDLK_KP_CLEAR β€” 0x400000d8u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR)
  • SDLK_KP_CLEARENTRY β€” 0x400000d9u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY)
  • SDLK_KP_BINARY β€” 0x400000dau, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY)
  • SDLK_KP_OCTAL β€” 0x400000dbu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL)
  • SDLK_KP_DECIMAL β€” 0x400000dcu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL)
  • SDLK_KP_HEXADECIMAL β€” 0x400000ddu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL) 🌈

modifier girlies, assemble πŸ’…

  • SDLK_LCTRL β€” 0x400000e0u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL)
  • SDLK_LSHIFT β€” 0x400000e1u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT)
  • SDLK_LALT β€” 0x400000e2u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT)
  • SDLK_LGUI β€” 0x400000e3u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI)
  • SDLK_RCTRL β€” 0x400000e4u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL)
  • SDLK_RSHIFT β€” 0x400000e5u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT)
  • SDLK_RALT β€” 0x400000e6u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT)
  • SDLK_RGUI β€” 0x400000e7u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI) πŸŽ€

and then the whole media + app-control lineup walks in, main character energy only πŸ¦‹

  • SDLK_MODE β€” 0x40000101u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE)
  • SDLK_SLEEP β€” 0x40000102u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP) 😴
  • SDLK_WAKE β€” 0x40000103u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WAKE)
  • SDLK_CHANNEL_INCREMENT β€” 0x40000104u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CHANNEL_INCREMENT)
  • SDLK_CHANNEL_DECREMENT β€” 0x40000105u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CHANNEL_DECREMENT)
  • SDLK_MEDIA_PLAY β€” 0x40000106u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_PLAY) ▢️
  • SDLK_MEDIA_PAUSE β€” 0x40000107u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_PAUSE)
  • SDLK_MEDIA_RECORD β€” 0x40000108u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_RECORD)
  • SDLK_MEDIA_FAST_FORWARD β€” 0x40000109u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_FAST_FORWARD)
  • SDLK_MEDIA_REWIND β€” 0x4000010au, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_REWIND)
  • SDLK_MEDIA_NEXT_TRACK β€” 0x4000010bu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_NEXT_TRACK)
  • SDLK_MEDIA_PREVIOUS_TRACK β€” 0x4000010cu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_PREVIOUS_TRACK)
  • SDLK_MEDIA_STOP β€” 0x4000010du, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_STOP)
  • SDLK_MEDIA_EJECT β€” 0x4000010eu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_EJECT)
  • SDLK_MEDIA_PLAY_PAUSE β€” 0x4000010fu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_PLAY_PAUSE)
  • SDLK_MEDIA_SELECT β€” 0x40000110u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_SELECT)
  • SDLK_AC_NEW β€” 0x40000111u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_NEW)
  • SDLK_AC_OPEN β€” 0x40000112u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_OPEN)
  • SDLK_AC_CLOSE β€” 0x40000113u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_CLOSE)
  • SDLK_AC_EXIT β€” 0x40000114u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_EXIT)
  • SDLK_AC_SAVE β€” 0x40000115u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SAVE) πŸ’Ύ
  • SDLK_AC_PRINT β€” 0x40000116u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_PRINT)
  • SDLK_AC_PROPERTIES β€” 0x40000117u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_PROPERTIES)
  • SDLK_AC_SEARCH β€” 0x40000118u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH)
  • SDLK_AC_HOME β€” 0x40000119u, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME)
  • SDLK_AC_BACK β€” 0x4000011au, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK)
  • SDLK_AC_FORWARD β€” 0x4000011bu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD)
  • SDLK_AC_STOP β€” 0x4000011cu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP)
  • SDLK_AC_REFRESH β€” 0x4000011du, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH)
  • SDLK_AC_BOOKMARKS β€” 0x4000011eu, noted as SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS) ⭐

and bestie, we are so not done yet β€” keep scrolling, there's more πŸ’–

#define SDLK_SOFTLEFT               0x4000011fu /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTLEFT) */
#define SDLK_SOFTRIGHT              0x40000120u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTRIGHT) */
#define SDLK_CALL                   0x40000121u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALL) */
#define SDLK_ENDCALL                0x40000122u /**< SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ENDCALL) */
#define SDLK_LEFT_TAB               0x20000001u /**< Extended key Left Tab */
#define SDLK_LEVEL5_SHIFT           0x20000002u /**< Extended key Level 5 Shift */
#define SDLK_MULTI_KEY_COMPOSE      0x20000003u /**< Extended key Multi-key Compose */
#define SDLK_LMETA                  0x20000004u /**< Extended key Left Meta */
#define SDLK_RMETA                  0x20000005u /**< Extended key Right Meta */
#define SDLK_LHYPER                 0x20000006u /**< Extended key Left Hyper */
#define SDLK_RHYPER                 0x20000007u /**< Extended key Right Hyper */

πŸ’– DESCRIPTION πŸ’–

okay bestie, so values of this type are how you represent keyboard keys β€” but specifically using whatever layout the keyboard is currently vibing with. 🎹✨

So a value can be:

  • a Unicode value β€” the actual unmodified character that pressing that key would produce, or
  • an SDLK_* constant, for the keys that are just... not char-producing. no character energy. πŸ’€
🚨 special exception alert 🚨 the number keys at the top of the keyboard map by default to SDLK_0…SDLK_9 on AZERTY layouts. like, yes, even though you'd lowkey expect otherwise. it's giving intentional. πŸ’…

Keys with the SDLK_EXTENDED_MASK bit set do not map to a scancode or a Unicode code point. they're just out here doing their own thing. πŸ¦‹

Many common keycodes are listed below, but this list is not exhaustive. so like, don't come for me if your fave isn't in there bestie, it's not the whole alphabet of keys, it's a highlight reel. ⭐


🌈 AVAILABILITY 🌈

this datatype has been around since SDL 3.2.0. so if you're on something older, it's giving vintage and not in the cute way. 🫢


πŸ‘€ SEE ALSO πŸ‘€


and that's the whole page bestie, you ate that πŸ’…βœ¨ this one's straight outta the Simple Directmedia Layer source, landing at version SDL 3.4.18, and yeah the page be calling itself SDL_Keycode(3type) πŸŽ€ go forth and keycode responsibly, no cap πŸ¦‹πŸ’–

πŸ“¦ where this page comes from