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.


You can view, comment on, or merge this pull request online at:

  https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/599

Commit Summary

File Changes

Patch Links:


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.