[Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Adds cross-platform compatible virtual-key codes to vm-display-x11 plugin (#599)

Marcel Taeumel notifications at github.com
Fri Oct 1 17:47:00 UTC 2021

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:

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:


-- Commit Summary --

  * <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/599/commits/4c64947be11eef4a4b567852edb4bd231b7a90e2">For keyDown and keyUp events, pass keycodes into the image. Not quite the virtual keys on other platforms because no information about locale.</a>
  * <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/599/commits/147f7d63e70e380331eddb524a90828aa8b0dd8e">Prepare skeleton for xkey2sqVirtualKeyCode(). Fix several several naming issues: keyCode -> ascii, codes -> keyNameEntries, nameForKeycode -> nameForKeysym</a>
  * <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/599/commits/ff3c42659822b528d49f578538e434d1acae4fd1">Compute a virtual-key code using X11's KeySym and -- as a fall-back -- that event's not-localized KeyCode.</a>

-- File Changes --

    M platforms/unix/vm-display-X11/sqUnixX11.c (181)

-- Patch Links --


You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20211001/1a88405d/attachment.html>

More information about the Vm-dev mailing list