[squeak-dev] Please try out | Cross-platform mapping for virtual key codes :-)

Thiede, Christoph Christoph.Thiede at student.hpi.uni-potsdam.de
Sat May 1 17:50:53 UTC 2021

Hi Marcel,

following observations for your first question:

  *   Key strokes for characters such as $+, $#, $ß, $?, or $- yield "Squeak1" or "Squeak2" in my image.
  *   Combinations such as "dead circumflex , space" that print a $^ on my Qwertz system are displayed as pure "space" in the tool.
  *   Ctrl + Alt + E (types $€), Ctrl + Alt + 7 (types ${), Alt + (NumPlus , Num2, Num0) (types $ ), etc. are printed as "E", "7", "0", etc. only.

Regarding your remaining questions, I cannot really add much value to this because I have never dealt with this before. But there weren't any WTF moments. :-)

What about different keyboard layouts such as QWERTZ/QWERTY/AWERTY etc.? What about virtual ways to enter characters (e.g. tools for special characters, emojipads, etc.). How do you make sure that these virtual keys are mapped correctly to their physical equivalents?


Von: Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im Auftrag von Taeumel, Marcel
Gesendet: Mittwoch, 28. April 2021 12:02 Uhr
An: squeak-dev
Betreff: Re: [squeak-dev] Please try out | Cross-platform mapping for virtual key codes :-)

Hi all!

Here is a small update. Please find attached the changeset.

- Adds KeyboardEvent >> #keyCode (via new inst-var)
- Logs the last key-down event to attach virtual-key codes to key-stroke events; see HandMorph >> #generateKeyboardEvent:
- Simplifies KeyboardEvent >> #key
- Show event repetition in KeyboardExecizer


Major questions:
1. Does it work on your machine?
2. What are your thoughts on KeyboardEvent >> #key?
3. What are your thoughts on KeyboardEvent >> #keyCode?
4. Do you understand KeyboardEvent >> #physicalKey #virtualKey #physicalModifiers #virtualModifiers ?

Happy testing!


P.S.: Don't forget about the X11 key (scan?) codes. ^__^ I haven't had the time to look into the VM plugin yet.

Am 27.04.2021 16:40:56 schrieb Marcel Taeumel <marcel.taeumel at hpi.de>:

Hi all!

Please find attached a changeset that adds mapping tables for virtual keys (or scan codes) for macOS, X11, and Windows. You can find them in EventSensor class >> #virtualKeysOn*

You can try out if they work through the KeyboardExerciser. Please take a look at the balloon text (i.e. tool tip) to better understand the data.

There is also a new preference:
[x] Simplify Virtual-key codes

... because of Windows who dares to couple codes to the input language (e.g. US vs. DE), which Squeak knows nothing about. macOS is better in this regard. :-)

Biggest mess is on Linux/X11. For key-down/up events, the Linux VM delivers actual character codes instead of scan codes, which makes a basic mapping to physical keys almost impossible. See EventSensor class >> #virtualKeysOnX11. We MUST fix that! Please. Somebody. Can I haz scan codes? ^__^



The good news: KeyboardEvent >> #key (and UserInputEvent >> #modifiers) now gives you cross-platform stable information about physical keys to be used in keyboard handlers. Yes, for both key-stroke and key-down/up events.

Or at least, that is the plan. That's why it would be great if you could help testing! :-)

Why key-stroke events too? Aren't they for typing text only?

1. Almost all keyboard shortcuts in current Squeak are based on key-stroke events.
2. Using the #keyCharacter is tricky because SHIFT changes lower-case to upper-case, which makes "anEvent shiftPressed" hard to understand.
3. CTRL combinations might not do the expected thing. How would you handle CTRL+C? The #keyCharacter could arrive as $c or Character enter. See the preference "Map non-printable characters to printable characters. Now, #key will always answer $C in such a case. Regardless of that preference.

Can't we just use #keyCharacter in key-down/up events?

No. Those are undefined. Never do that. key-down/up events carry virtual-key codes in their #keyValue. We might want to change #keyCharacter to answer "nil" for those events.


Q: What is a "physical key" or "physical modifier"?
A: The label that can be presented to the user so that he or she feels at home when using Squeak. Thus, looks platform-specific.

Q: What is a "virtual key" or "virtual modifier"?
A: The information to be processed in your application's key handlers. Thus, looks platform-independent. If you have still no clue how to talk to keyboard events, please read the commentary in KeyboardEvent >> #checkCommandKey.


Happy testing! :-) And thank you all in advance!


P.S.: You might want to disable the preference "synthesize mouse-wheel events from keyboard-events" to get CTRL+ArrowUp and CTRL+ArrowDown ;-)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210501/8ffca2bc/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 57922 bytes
Desc: image.png
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210501/8ffca2bc/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 62612 bytes
Desc: image.png
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210501/8ffca2bc/attachment-0003.png>

More information about the Squeak-dev mailing list