Since X11 does not provide a localized version of virtual keys, I mapped the X11 event's KeySym
to such a "virtual-key code", using evt.keycode
only as a fall back. It's not perfect but close to what Windows and macOS have.
Here is the mapping schema:
* 0x00 (unknown virtual key)
* 0x01 XK_space (shifted from Latin-1)
* 0x02 XK_comma (shifted from Latin-1 OR guessed from xKeycode)
* 0x03 XK_period (shifted from Latin-1 OR guessed from xKeycode)
* 0x04 .. 0x07 (unused)
*
* 0x08 .. 0x1f SPECIAL KEYS 1 (from all-mask 0xff00)
* 0x20 .. 0x29 NUMERIC ASCII KEYS (shifted from Latin-1)
* 0x2a .. 0x43 ALPHABETIC ASCII KEYS (shifted from Latin-1)
*
* 0x44 US_MINUS (guessed from xKeycode)
* 0x45 US_PLUS (guessed from xKeycode)
* 0x46 US_LBRACKET (guessed from xKeycode)
* 0x47 US_RBRACKET (guessed from xKeycode)
* 0x48 US_COLON (guessed from xKeycode)
* 0x49 US_QUOTE (guessed from xKeycode)
* 0x4a US_TILDE (guessed from xKeycode)
* 0x4b US_BACKSLASH (guessed from xKeycode)
* 0x4c US_COMMA (guessed from xKeycode)
* 0x4d US_PERIOD (guessed from xKeycode)
* 0x4e US_SLASH (guessed from xKeycode)
* 0x4f US_102 (guessed from xKeycode)
*
* 0x50 .. 0xff SPECIAL KEYS 2 (from all-mask 0xff00)
Here is the new mapping table for Squeak:
new-x11-virtual-keys.1.cs.txt
See /usr/include/X11/keysymdef.h to understand the "SPECIAL KEYS" (masked 0xff00).
The biggest remaining issue is all those "OEM keys", which means the ones you push for "+" or "/" or "~" and so on.
Note that the idea of having a localized version of the virtual key is that you can print it in an application's user interface. Would be really annoying if an app insists on, e.g., Z while you actionally pushed Y.
https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/599
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.