[squeak-dev] The Trunk: Kernel-dtl.1404.mcz

Marcel Taeumel marcel.taeumel at hpi.de
Thu Jun 24 06:53:14 UTC 2021


Hi Dave,

thanks! Yay! I built something and somebody found a way to make it better. Collective code ownership. I like that. :-)

Best,
Marcel
Am 23.06.2021 22:54:41 schrieb David T. Lewis <lewis at mail.msen.com>:
Marcel,

I hope you don't mind me pushing this directly to trunk, but the changes
are straightforward and I verified that the resulting key map tables are
the same as in the prior version.

I noticed the issue when I updated an image that happened to be accidentally
set to use non-sista bytecodes.

Dave

On Wed, Jun 23, 2021 at 08:30:01PM +0000, commits at source.squeak.org wrote:
> David T. Lewis uploaded a new version of Kernel to project The Trunk:
> http://source.squeak.org/trunk/Kernel-dtl.1404.mcz
>
> ==================== Summary ====================
>
> Name: Kernel-dtl.1404
> Author: dtl
> Time: 23 June 2021, 4:29:59.090823 pm
> UUID: a04cdcaf-c50a-4edb-a2bf-4308d1e74f6a
> Ancestors: Kernel-mt.1403
>
> Rearrange the code in EventSensor virtual keys methods to reduce the number of literals in methods, allowing EventSensor class>>virtualKeysOnWindows to be compiled with the EncoderForV3PlusClosures bytecode set.
>
> =============== Diff against Kernel-mt.1403 ===============
>
> Item was changed:
> ----- Method: EventSensor class>>installVirtualKeyTable (in category 'class initialization') -----
> installVirtualKeyTable
>
> + VirtualKeyTable := Smalltalk windowSystemName
> - VirtualKeyTable := Dictionary newFrom: (
> - Smalltalk windowSystemName
> caseOf: {
> ['Windows'] -> [self virtualKeysOnWindows].
> ['Win32' "older VMs"] -> [self virtualKeysOnWindows].
> ['Aqua'] -> [self virtualKeysOnMacOS].
> ['X11'] -> [self virtualKeysOnX11].
> + ['RiscOS'] -> [Dictionary new].
> + ['Quartz'] -> [Dictionary new].
> + } otherwise: [Dictionary new].
> - ['RiscOS'] -> [{}].
> - ['Quartz'] -> [{}].
> - } otherwise: [{}]).
>
> "Shift 8 bits to not overwrite virtual-key mappings from above."
> self mapControlKeysToCommandKeys ifTrue: [
> VirtualKeyTable
> at: (2r0010 "ctrl" bitShift: 8)
> put: (2r1010 "cmd+ctrl").
> VirtualKeyTable
> at: (2r0011 "ctrl+shift" bitShift: 8)
> put: (2r1011 "cmd+ctrl+shift")].
>
> self mapAltKeysToOptionKeys ifTrue: [
> VirtualKeyTable
> at: (2r1000 "cmd/alt" bitShift: 8)
> put: (2r1100 "cmd/alt+opt").
> VirtualKeyTable
> at: (2r1001 "cmd/alt+shift" bitShift: 8)
> put: (2r1101 "cmd/alt+opt+shift")].!
>
> Item was changed:
> ----- Method: EventSensor class>>virtualKeysOnMacOS (in category 'virtual keys') -----
> virtualKeysOnMacOS
> "Based on Carbon's Events.h -- https://snipplr.com/view/42797"
>
> + ^ Dictionary newFromPairs: {
> + 16r00 . $A. "#'kVK_ANSI_A'"
> + 16r01 . $S. "#'kVK_ANSI_S'"
> + 16r02 . $D. "#'kVK_ANSI_D'"
> + 16r03 . $F. "#'kVK_ANSI_F'"
> + 16r04 . $H. "#'kVK_ANSI_H'"
> + 16r05 . $G. "#'kVK_ANSI_G'"
> + 16r06 . $Z. "#'kVK_ANSI_Z'"
> + 16r07 . $X. "#'kVK_ANSI_X'"
> + 16r08 . $C. "#'kVK_ANSI_C'"
> + 16r09 . $V. "#'kVK_ANSI_V'"
> + 16r0B . $B. "#'kVK_ANSI_B'"
> + 16r0C . $Q. "#'kVK_ANSI_Q'"
> + 16r0D . $W. "#'kVK_ANSI_W'"
> + 16r0E . $E. "#'kVK_ANSI_E'"
> + 16r0F . $R. "#'kVK_ANSI_R'"
> + 16r10 . $Y. "#'kVK_ANSI_Y'"
> + 16r11 . $T. "#'kVK_ANSI_T'"
> + 16r12 . $1. "#'kVK_ANSI_1'"
> + 16r13 . $2. "#'kVK_ANSI_2'"
> + 16r14 . $3. "#'kVK_ANSI_3'"
> + 16r15 . $4. "#'kVK_ANSI_4'"
> + 16r16 . $6. "#'kVK_ANSI_6'"
> + 16r17 . $5. "#'kVK_ANSI_5'"
> + 16r18 . (self simplifyVirtualKeyCodes ifTrue: [#squeak2] ifFalse: [#'kVK_ANSI_Equal']).
> + 16r19 . $9. "#'kVK_ANSI_9'"
> + 16r1A . $7. "#'kVK_ANSI_7'"
> + 16r1B . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_Minus']).
> + 16r1C . $8. "#'kVK_ANSI_8'"
> + 16r1D . $0. "#'kVK_ANSI_0'"
> + 16r1E . (self simplifyVirtualKeyCodes ifTrue: [#squeak2] ifFalse: [#'kVK_ANSI_RightBracket']).
> + 16r1F . $O. "#'kVK_ANSI_O'"
> + 16r20 . $U. "#'kVK_ANSI_U'"
> + 16r21 . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_LeftBracket']).
> + 16r22 . $I. "#'kVK_ANSI_I'"
> + 16r23 . $P. "#'kVK_ANSI_P'"
> + 16r25 . $L. "#'kVK_ANSI_L'"
> + 16r26 . $J. "#'kVK_ANSI_J'"
> + 16r27 . (self simplifyVirtualKeyCodes ifTrue: [#squeak3] ifFalse: [#'kVK_ANSI_Quote']).
> + 16r28 . $K. "#'kVK_ANSI_K'"
> + 16r29 . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_Semicolon']).
> + 16r2A . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_Backslash']).
> + 16r2B . #squeakComma. "#'kVK_ANSI_Comma'"
> + 16r2C . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_Slash']).
> + 16r2D . $N. "#'kVK_ANSI_N'"
> + 16r2E . $M. "#'kVK_ANSI_M'"
> + 16r2F . #squeakPeriod. "#'kVK_ANSI_Period'"
> + 16r32 . (self simplifyVirtualKeyCodes ifTrue: [#squeak4] ifFalse: [#'kVK_ANSI_Grave']).
> + 16r41 . #numDec. "#'kVK_ANSI_KeypadDecimal'"
> + 16r43 . #numMul. "#'kVK_ANSI_KeypadMultiply'"
> + 16r45 . #numAdd. "#'kVK_ANSI_KeypadPlus'"
> + 16r47 . #numClr. "#'kVK_ANSI_KeypadClear'"
> + 16r4B . #numDiv. "#'kVK_ANSI_KeypadDivide'"
> + 16r4C . (self simplifyVirtualKeyCodes ifTrue: [Character return] ifFalse: [Character enter]). "#'kVK_ANSI_KeypadEnter'"
> + 16r4E . #numSub. "#'kVK_ANSI_KeypadMinus'"
> + 16r51 . #numEqu. "#'kVK_ANSI_KeypadEquals'"
> + 16r52 . #num0. "#'kVK_ANSI_Keypad0'"
> + 16r53 . #num1. "#'kVK_ANSI_Keypad1'"
> + 16r54 . #num2. "#'kVK_ANSI_Keypad2'"
> + 16r55 . #num3. "#'kVK_ANSI_Keypad3'"
> + 16r56 . #num4. "#'kVK_ANSI_Keypad4'"
> + 16r57 . #num5. "#'kVK_ANSI_Keypad5'"
> + 16r58 . #num6. "#'kVK_ANSI_Keypad6'"
> + 16r59 . #num7. "#'kVK_ANSI_Keypad7'"
> + 16r5B . #num8. "#'kVK_ANSI_Keypad8'"
> + 16r5C . #num9. "#'kVK_ANSI_Keypad9'"
> + 16r24 . Character return. "#'kVK_Return'"
> + 16r30 . Character tab. "#'kVK_Tab'"
> + 16r31 . Character space. "#'kVK_Space'"
> + 16r33 . Character backspace. "#'kVK_Delete'"
> + 16r35 . Character escape. "#'kVK_Escape'"
> + 16r36 . #command. "#'kVK_RightCommand'"
> + 16r37 . #command. "#'kVK_Command'"
> + 16r38 . #shift. "#'kVK_Shift'"
> + 16r39 . #capsLock. "#'kVK_CapsLock'"
> + 16r3A . #option. "#'kVK_Option'"
> + 16r3B . #control. "#'kVK_Control'"
> + 16r3C . #shift. "#'kVK_RightShift'"
> + 16r3D . #option. "#'kVK_RightOption'"
> + 16r3E . #control. "#'kVK_RightControl'"
> + 16r3F . #'kVK_Function'.
> + 16r40 . #F17. "#'kVK_F17'"
> + 16r48 . #'kVK_VolumeUp'.
> + 16r49 . #'kVK_VolumeDown'.
> + 16r4A . #'kVK_Mute'.
> + 16r4F . #F18. "#'kVK_F18'"
> + 16r50 . #F19. "#'kVK_F19'"
> + 16r5A . #F20. "#'kVK_F20'"
> + 16r60 . #F5. "#'kVK_F5'"
> + 16r61 . #F6. "#'kVK_F6'"
> + 16r62 . #F7. "#'kVK_F7'"
> + 16r63 . #F3. "#'kVK_F3'"
> + 16r64 . #F8. "#'kVK_F8'"
> + 16r65 . #F9. "#'kVK_F9'"
> + 16r67 . #F11. "#'kVK_F11'"
> + 16r69 . #F13. "#'kVK_F13'"
> + 16r6A . #F16. "#'kVK_F16'"
> + 16r6B . #F14. "#'kVK_F14'"
> + 16r6D . #F10. "#'kVK_F10'"
> + 16r6F . #F12. "#'kVK_F12'"
> + 16r71 . #F15. "#'kVK_F15'"
> + 16r72 . #help. "#'kVK_Help'"
> + 16r73 . Character home. "#'kVK_Home'"
> + 16r74 . Character pageUp. "#'kVK_PageUp'"
> + 16r75 . Character delete. "#'kVK_ForwardDelete'"
> + 16r76 . #F4. "#'kVK_F4'"
> + 16r77 . Character end. "#'kVK_End'"
> + 16r78 . #F2. "#'kVK_F2'"
> + 16r79 . Character pageDown. "#'kVK_PageDown'"
> + 16r7A . #F1. "#'kVK_F1'"
> + 16r7B . Character arrowLeft. "#'kVK_LeftArrow'"
> + 16r7C . Character arrowRight. "#'kVK_RightArrow'"
> + 16r7D . Character arrowDown. "#'kVK_DownArrow'"
> + 16r7E . Character arrowUp. "#'kVK_UpArrow'"
> + 16r0A . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ISO_Section']).
> + 16r5D . #'kVK_JIS_Yen'.
> + 16r5E . #'kVK_JIS_Underscore'.
> + 16r5F . #'kVK_JIS_KeypadComma'.
> + 16r66 . #'kVK_JIS_Eisu'.
> + 16r68 . #'kVK_JIS_Kana'.
> + }
> +
> + !
> - ^ {
> - 16r00 -> $A. "#'kVK_ANSI_A'"
> - 16r01 -> $S. "#'kVK_ANSI_S'"
> - 16r02 -> $D. "#'kVK_ANSI_D'"
> - 16r03 -> $F. "#'kVK_ANSI_F'"
> - 16r04 -> $H. "#'kVK_ANSI_H'"
> - 16r05 -> $G. "#'kVK_ANSI_G'"
> - 16r06 -> $Z. "#'kVK_ANSI_Z'"
> - 16r07 -> $X. "#'kVK_ANSI_X'"
> - 16r08 -> $C. "#'kVK_ANSI_C'"
> - 16r09 -> $V. "#'kVK_ANSI_V'"
> - 16r0B -> $B. "#'kVK_ANSI_B'"
> - 16r0C -> $Q. "#'kVK_ANSI_Q'"
> - 16r0D -> $W. "#'kVK_ANSI_W'"
> - 16r0E -> $E. "#'kVK_ANSI_E'"
> - 16r0F -> $R. "#'kVK_ANSI_R'"
> - 16r10 -> $Y. "#'kVK_ANSI_Y'"
> - 16r11 -> $T. "#'kVK_ANSI_T'"
> - 16r12 -> $1. "#'kVK_ANSI_1'"
> - 16r13 -> $2. "#'kVK_ANSI_2'"
> - 16r14 -> $3. "#'kVK_ANSI_3'"
> - 16r15 -> $4. "#'kVK_ANSI_4'"
> - 16r16 -> $6. "#'kVK_ANSI_6'"
> - 16r17 -> $5. "#'kVK_ANSI_5'"
> - 16r18 -> (self simplifyVirtualKeyCodes ifTrue: [#squeak2] ifFalse: [#'kVK_ANSI_Equal']).
> - 16r19 -> $9. "#'kVK_ANSI_9'"
> - 16r1A -> $7. "#'kVK_ANSI_7'"
> - 16r1B -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_Minus']).
> - 16r1C -> $8. "#'kVK_ANSI_8'"
> - 16r1D -> $0. "#'kVK_ANSI_0'"
> - 16r1E -> (self simplifyVirtualKeyCodes ifTrue: [#squeak2] ifFalse: [#'kVK_ANSI_RightBracket']).
> - 16r1F -> $O. "#'kVK_ANSI_O'"
> - 16r20 -> $U. "#'kVK_ANSI_U'"
> - 16r21 -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_LeftBracket']).
> - 16r22 -> $I. "#'kVK_ANSI_I'"
> - 16r23 -> $P. "#'kVK_ANSI_P'"
> - 16r25 -> $L. "#'kVK_ANSI_L'"
> - 16r26 -> $J. "#'kVK_ANSI_J'"
> - 16r27 -> (self simplifyVirtualKeyCodes ifTrue: [#squeak3] ifFalse: [#'kVK_ANSI_Quote']).
> - 16r28 -> $K. "#'kVK_ANSI_K'"
> - 16r29 -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_Semicolon']).
> - 16r2A -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_Backslash']).
> - 16r2B -> #squeakComma. "#'kVK_ANSI_Comma'"
> - 16r2C -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ANSI_Slash']).
> - 16r2D -> $N. "#'kVK_ANSI_N'"
> - 16r2E -> $M. "#'kVK_ANSI_M'"
> - 16r2F -> #squeakPeriod. "#'kVK_ANSI_Period'"
> - 16r32 -> (self simplifyVirtualKeyCodes ifTrue: [#squeak4] ifFalse: [#'kVK_ANSI_Grave']).
> - 16r41 -> #numDec. "#'kVK_ANSI_KeypadDecimal'"
> - 16r43 -> #numMul. "#'kVK_ANSI_KeypadMultiply'"
> - 16r45 -> #numAdd. "#'kVK_ANSI_KeypadPlus'"
> - 16r47 -> #numClr. "#'kVK_ANSI_KeypadClear'"
> - 16r4B -> #numDiv. "#'kVK_ANSI_KeypadDivide'"
> - 16r4C -> (self simplifyVirtualKeyCodes ifTrue: [Character return] ifFalse: [Character enter]). "#'kVK_ANSI_KeypadEnter'"
> - 16r4E -> #numSub. "#'kVK_ANSI_KeypadMinus'"
> - 16r51 -> #numEqu. "#'kVK_ANSI_KeypadEquals'"
> - 16r52 -> #num0. "#'kVK_ANSI_Keypad0'"
> - 16r53 -> #num1. "#'kVK_ANSI_Keypad1'"
> - 16r54 -> #num2. "#'kVK_ANSI_Keypad2'"
> - 16r55 -> #num3. "#'kVK_ANSI_Keypad3'"
> - 16r56 -> #num4. "#'kVK_ANSI_Keypad4'"
> - 16r57 -> #num5. "#'kVK_ANSI_Keypad5'"
> - 16r58 -> #num6. "#'kVK_ANSI_Keypad6'"
> - 16r59 -> #num7. "#'kVK_ANSI_Keypad7'"
> - 16r5B -> #num8. "#'kVK_ANSI_Keypad8'"
> - 16r5C -> #num9. "#'kVK_ANSI_Keypad9'"
> - 16r24 -> Character return. "#'kVK_Return'"
> - 16r30 -> Character tab. "#'kVK_Tab'"
> - 16r31 -> Character space. "#'kVK_Space'"
> - 16r33 -> Character backspace. "#'kVK_Delete'"
> - 16r35 -> Character escape. "#'kVK_Escape'"
> - 16r36 -> #command. "#'kVK_RightCommand'"
> - 16r37 -> #command. "#'kVK_Command'"
> - 16r38 -> #shift. "#'kVK_Shift'"
> - 16r39 -> #capsLock. "#'kVK_CapsLock'"
> - 16r3A -> #option. "#'kVK_Option'"
> - 16r3B -> #control. "#'kVK_Control'"
> - 16r3C -> #shift. "#'kVK_RightShift'"
> - 16r3D -> #option. "#'kVK_RightOption'"
> - 16r3E -> #control. "#'kVK_RightControl'"
> - 16r3F -> #'kVK_Function'.
> - 16r40 -> #F17. "#'kVK_F17'"
> - 16r48 -> #'kVK_VolumeUp'.
> - 16r49 -> #'kVK_VolumeDown'.
> - 16r4A -> #'kVK_Mute'.
> - 16r4F -> #F18. "#'kVK_F18'"
> - 16r50 -> #F19. "#'kVK_F19'"
> - 16r5A -> #F20. "#'kVK_F20'"
> - 16r60 -> #F5. "#'kVK_F5'"
> - 16r61 -> #F6. "#'kVK_F6'"
> - 16r62 -> #F7. "#'kVK_F7'"
> - 16r63 -> #F3. "#'kVK_F3'"
> - 16r64 -> #F8. "#'kVK_F8'"
> - 16r65 -> #F9. "#'kVK_F9'"
> - 16r67 -> #F11. "#'kVK_F11'"
> - 16r69 -> #F13. "#'kVK_F13'"
> - 16r6A -> #F16. "#'kVK_F16'"
> - 16r6B -> #F14. "#'kVK_F14'"
> - 16r6D -> #F10. "#'kVK_F10'"
> - 16r6F -> #F12. "#'kVK_F12'"
> - 16r71 -> #F15. "#'kVK_F15'"
> - 16r72 -> #help. "#'kVK_Help'"
> - 16r73 -> Character home. "#'kVK_Home'"
> - 16r74 -> Character pageUp. "#'kVK_PageUp'"
> - 16r75 -> Character delete. "#'kVK_ForwardDelete'"
> - 16r76 -> #F4. "#'kVK_F4'"
> - 16r77 -> Character end. "#'kVK_End'"
> - 16r78 -> #F2. "#'kVK_F2'"
> - 16r79 -> Character pageDown. "#'kVK_PageDown'"
> - 16r7A -> #F1. "#'kVK_F1'"
> - 16r7B -> Character arrowLeft. "#'kVK_LeftArrow'"
> - 16r7C -> Character arrowRight. "#'kVK_RightArrow'"
> - 16r7D -> Character arrowDown. "#'kVK_DownArrow'"
> - 16r7E -> Character arrowUp. "#'kVK_UpArrow'"
> - 16r0A -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'kVK_ISO_Section']).
> - 16r5D -> #'kVK_JIS_Yen'.
> - 16r5E -> #'kVK_JIS_Underscore'.
> - 16r5F -> #'kVK_JIS_KeypadComma'.
> - 16r66 -> #'kVK_JIS_Eisu'.
> - 16r68 -> #'kVK_JIS_Kana'.
> - }!
>
> Item was changed:
> ----- Method: EventSensor class>>virtualKeysOnWindows (in category 'virtual keys') -----
> virtualKeysOnWindows
> "https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
>
> Tweaked to Windows 10 Version 20H2 (Build 19042.928)
> Microsoft Surface Pro 6 (GERMAN)"
> -
> - ^ {
>
> + | table |
> + table := Dictionary new.
> + {
> + "16r01" Character home. "#'VK_HOME'" "Overshadows #'VK_LBUTTON' --- Left mouse button"
> + "16r02" #'VK_RBUTTON'. "Right mouse button"
> + "16r03" #'VK_CANCEL'. "Control-break processing"
> + "16r04" Character end. "#'VK_END'" "Overshadows #'VK_MBUTTON' --- Middle mouse button"
> + "16r05" Character insert. "#'VK_INSERT'" "Overshadows #'VK_XBUTTON1' --- X1 mouse button"
> + "16r06" #'VK_XBUTTON2'. "X2 mouse button"
> + "16r07" nil.
> + "16r08" Character backspace. "#'VK_BACK'"
> + "16r09" Character tab. "#'VK_TAB'"
> + "16r0A" nil.
> + "16r0B" Character pageUp. "#'VK_PRIOR'" "PAGE UP key"
> + "16r0C" Character pageDown. "#'VK_NEXT'" "PAGE DOWN key --- overshadows #'VK_CLEAR'"
> + "16r0D" Character return. "#'VK_RETURN'" "ENTER key"
> + "16r0E" nil.
> + "16r0F" nil.
> + "16r10" #shift. "#'VK_SHIFT'"
> + "16r11" (self mapControlKeysToCommandKeys ifTrue: [#command] ifFalse: [#control]). "#'VK_CONTROL'"
> + "16r12" (self mapAltKeysToOptionKeys ifTrue: [#option] ifFalse: [#command "aka. #alt"]). "#'VK_MENU'"
> + "16r13" #'VK_PAUSE'.
> + "16r14" #capsLock. "#'VK_CAPITAL'"
> + "16r15" #'VK_KANA'. "IME Kana/Hangul mode"
> + "16r16" #'VK_IME_ON'. "IME on"
> + "16r17" #'VK_JUNJA'. "IMA Junja mode"
> + "16r18" #'VK_FINAL'. "IME final mode"
> + "16r19" #'VK_KANJI'. "IME Kanji/Hanja mode"
> + "16r1A" #'VK_IME_OFF'. "IME off"
> + "16r1B" Character escape. "#'VK_ESCAPE'"
> + "16r1C" Character arrowLeft. "#'VK_LEFT'" "LEFT ARROW. Overshadows #'VK_CONVERT' --- IME convert"
> + "16r1D" Character arrowRight. "#'VK_RIGHT'" "RIGHT ARROW. Overshadows 'VK_NONCONVERT' --- IME nonconvert"
> + "16r1E" Character arrowUp. "#'VK_UP'" "UP ARROW. Overshadows #'VK_ACCEPT' --- IME accept"
> + "16r1F" Character arrowDown. "#'VK_DOWN'" "DOWN ARROW. Overshadows #'VK_MODECHANGE' --- IME mode change request"
> + "16r20" Character space. "#'VK_SPACE'" "SPACEBAR"
> + "16r21" #'VK_PRIOR'. "PAGE UP key. Not needed. See 16r0B"
> + "16r22" #'VK_NEXT'. "PAGE DOWN key. Not needed. See 16r0C"
> + "16r23" #'VK_END'. "Not needed. See 16r04"
> + "16r24" #'VK_HOME'. "Not needed. See 16r01"
> + "16r25" #'VK_LEFT'. "LEFT ARROW. Not needed. See 16r1C"
> + "16r26" #'VK_UP'. "UP ARROW. Not needed. See 16r1E"
> + "16r27" #'VK_RIGHT'. "RIGHT ARROW. Not needed. See 16r1D"
> + "16r28" #'VK_DOWN'. "DOWN ARROW. Not needed. See 16r1F"
> + "16r29" #'VK_SELECT'.
> + "16r2A" #'VK_PRINT'.
> + "16r2B" #'VK_EXECUTE'.
> + "16r2C" #'VK_SNAPSHOT'. "PRINT SCREEN key"
> + "16r2D" #'VK_INSERT'. "Not needed. See 16r05"
> + "16r2E" #F16. "#'VK_F16' swapped with #'VK_DELETE'. See 16r7F"
> + "16r2F" #help. "#'VK_HELP'"
> + "16r30" $0.
> + "16r31" $1.
> + "16r32" $2.
> + "16r33" $3.
> + "16r34" $4.
> + "16r35" $5.
> + "16r36" $6.
> + "16r37" $7.
> + "16r38" $8.
> + "16r39" $9.
> + "16r3A" nil.
> + "16r3B" nil.
> + "16r3C" nil.
> + "16r3D" nil.
> + "16r3E" nil.
> + "16r3F" nil.
> + "16r40" nil.
> + "16r41" $A.
> + "16r42" $B.
> + "16r43" $C.
> + "16r44" $D.
> + "16r45" $E.
> + "16r46" $F.
> + "16r47" $G.
> + "16r48" $H.
> + "16r49" $I.
> + "16r4A" $J.
> + "16r4B" $K.
> + "16r4C" $L.
> + "16r4D" $M.
> + "16r4E" $N.
> + "16r4F" $O.
> + "16r50" $P.
> + "16r51" $Q.
> + "16r52" $R.
> + "16r53" $S.
> + "16r54" $T.
> + "16r55" $U.
> + "16r56" $V.
> + "16r57" $W.
> + "16r58" $X.
> + "16r59" $Y.
> + "16r5A" $Z.
> + "16r5B" #'VK_LWIN'. "Left Windows key"
> + "16r5C" #'VK_RWIN'. "Right windows key"
> + "16r5D" #'VK_APPS'. "Applications key"
> + "16r5E" nil.
> + "16r5F" #'VK_SLEEP'. "Computer Sleep Key"
> + "16r60" #num0. "#'VK_NUMPAD0'"
> + "16r61" #num1. "#'VK_NUMPAD1'"
> + "16r62" #num2. "#'VK_NUMPAD2'"
> + "16r63" #num3. "#'VK_NUMPAD3'"
> + "16r64" #num4. "#'VK_NUMPAD4'"
> + "16r65" #num5. "#'VK_NUMPAD5'"
> + "16r66" #num6. "#'VK_NUMPAD6'"
> + "16r67" #num7. "#'VK_NUMPAD7'"
> + "16r68" #num8. "#'VK_NUMPAD8'"
> + "16r69" #num9. "#'VK_NUMPAD9'"
> + "16r6A" #numMul. "#'VK_MULTIPLY'"
> + "16r6B" #numAdd. "#'VK_ADD'"
> + "16r6C" #'VK_SEPARATOR'.
> + "16r6D" #numSub. "#'VK_SUBTRACT'"
> + "16r6E" #numDec. "#'VK_DECIMAL'"
> + "16r6F" #numDiv. "#'VK_DIVIDE'"
> + "16r70" #F1. "#'VK_F1'"
> + "16r71" #F2. "#'VK_F2'"
> + "16r72" #F3. "#'VK_F3'"
> + "16r73" #F4. "#'VK_F4'"
> + "16r74" #F5. "#'VK_F5'"
> + "16r75" #F6. "#'VK_F6'"
> + "16r76" #F7. "#'VK_F7'"
> + "16r77" #F8. "#'VK_F8'"
> + "16r78" #F9. "#'VK_F9'"
> + "16r79" #F10. "#'VK_F10'"
> + "16r7A" #F11. "#'VK_F11'"
> + "16r7B" #F12. "#'VK_F12'"
> + "16r7C" #F13. "#'VK_F13'"
> + "16r7D" #F14. "#'VK_F14'"
> + "16r7E" #F15. "#'VK_F15'"
> + "16r7F" Character delete. "#'VK_DELETE' swapped with #'VK_F16'. See 16r2E"
> + "16r80" #F17. "#'VK_F17'"
> + "16r81" #F18. "#'VK_F18'"
> + "16r82" #F19. "#'VK_F19'"
> + "16r83" #F20. "#'VK_F20'"
> + "16r84" #F21. "#'VK_F21'"
> + "16r85" #F22. "#'VK_F22'"
> + "16r86" #F23. "#'VK_F23'"
> + "16r87" #F24. "#'VK_F24'"
> + "16r88" nil.
> + "16r89" nil.
> + "16r8A" nil.
> + "16r8B" nil.
> + "16r8C" nil.
> + "16r8D" nil.
> + "16r8E" nil.
> + "16r8F" nil.
> + "16r90" #'VK_NUMLOCK'.
> + "16r91" #'VK_SCROLL'.
> + "16r92" nil.
> + "16r93" nil.
> + "16r94" nil.
> + "16r95" nil.
> + "16r96" nil.
> + "16r97" nil.
> + "16r98" nil.
> + "16r99" nil.
> + "16r9A" nil.
> + "16r9B" nil.
> + "16r9C" nil.
> + "16r9D" nil.
> + "16r9E" nil.
> + "16r9F" nil.
> + "16rA0" #'VK_LSHIFT'.
> + "16rA1" #'VK_RSHIFT'.
> + "16rA2" #'VK_LCONTROL'.
> + "16rA3" #'VK_RCONTROL'.
> + "16rA4" #'VK_LMENU'.
> + "16rA5" #'VK_RMENU'.
> + "16rA6" #'VK_BROWSER_BACK'.
> + "16rA7" #'VK_BROWSER_FORWARD'.
> + "16rA8" #'VK_BROWSER_REFRESH'.
> + "16rA9" #'VK_BROWSER_STOP'.
> + "16rAA" #'VK_BROWSER_SEARCH'.
> + "16rAB" #'VK_BROWSER_FAVORITES'.
> + "16rAC" #'VK_BROWSER_HOME'.
> + "16rAD" #'VK_VOLUME_MUTE'.
> + "16rAE" #'VK_VOLUME_DOWN'.
> + "16rAF" #'VK_VOLUME_UP'.
> + "16rB0" #'VK_MEDIA_NEXT_TRACK'.
> + "16rB1" #'VK_MEDIA_PREV_TRACK'.
> + "16rB2" #'VK_MEDIA_STOP'.
> + "16rB3" #'VK_MEDIA_PLAY_PAUSE'.
> + "16rB4" #'VK_LAUNCH_MAIL'.
> + "16rB5" #'VK_LAUNCH_MEDIA_SELECT'.
> + "16rB6" #'VK_LAUNCH_APP1'.
> + "16rB7" #'VK_LAUNCH_APP2'.
> + "16rB8" nil.
> + "16rB9" nil
> + } withIndexDo: [ :val :i | table at: i put: val] .
> - 16r01 -> Character home. "#'VK_HOME'" "Overshadows #'VK_LBUTTON' --- Left mouse button"
> - 16r02 -> #'VK_RBUTTON'. "Right mouse button"
> - 16r03 -> #'VK_CANCEL'. "Control-break processing"
> - 16r04 -> Character end. "#'VK_END'" "Overshadows #'VK_MBUTTON' --- Middle mouse button"
> - 16r05 -> Character insert. "#'VK_INSERT'" "Overshadows #'VK_XBUTTON1' --- X1 mouse button"
> - 16r06 -> #'VK_XBUTTON2'. "X2 mouse button"
> - 16r07 -> nil.
> - 16r08 -> Character backspace. "#'VK_BACK'"
> - 16r09 -> Character tab. "#'VK_TAB'"
> - 16r0A -> nil.
> - 16r0B -> Character pageUp. "#'VK_PRIOR'" "PAGE UP key"
> - 16r0C -> Character pageDown. "#'VK_NEXT'" "PAGE DOWN key --- overshadows #'VK_CLEAR'"
> - 16r0D -> Character return. "#'VK_RETURN'" "ENTER key"
> - 16r0E -> nil.
> - 16r0F -> nil.
> - 16r10 -> #shift. "#'VK_SHIFT'"
> - 16r11 -> (self mapControlKeysToCommandKeys ifTrue: [#command] ifFalse: [#control]). "#'VK_CONTROL'"
> - 16r12 -> (self mapAltKeysToOptionKeys ifTrue: [#option] ifFalse: [#command "aka. #alt"]). "#'VK_MENU'"
> - 16r13 -> #'VK_PAUSE'.
> - 16r14 -> #capsLock. "#'VK_CAPITAL'"
> - 16r15 -> #'VK_KANA'. "IME Kana/Hangul mode"
> - 16r16 -> #'VK_IME_ON'. "IME on"
> - 16r17 -> #'VK_JUNJA'. "IMA Junja mode"
> - 16r18 -> #'VK_FINAL'. "IME final mode"
> - 16r19 -> #'VK_KANJI'. "IME Kanji/Hanja mode"
> - 16r1A -> #'VK_IME_OFF'. "IME off"
> - 16r1B -> Character escape. "#'VK_ESCAPE'"
> - 16r1C -> Character arrowLeft. "#'VK_LEFT'" "LEFT ARROW. Overshadows #'VK_CONVERT' --- IME convert"
> - 16r1D -> Character arrowRight. "#'VK_RIGHT'" "RIGHT ARROW. Overshadows 'VK_NONCONVERT' --- IME nonconvert"
> - 16r1E -> Character arrowUp. "#'VK_UP'" "UP ARROW. Overshadows #'VK_ACCEPT' --- IME accept"
> - 16r1F -> Character arrowDown. "#'VK_DOWN'" "DOWN ARROW. Overshadows #'VK_MODECHANGE' --- IME mode change request"
> - 16r20 -> Character space. "#'VK_SPACE'" "SPACEBAR"
> - 16r21 -> #'VK_PRIOR'. "PAGE UP key. Not needed. See 16r0B"
> - 16r22 -> #'VK_NEXT'. "PAGE DOWN key. Not needed. See 16r0C"
> - 16r23 -> #'VK_END'. "Not needed. See 16r04"
> - 16r24 -> #'VK_HOME'. "Not needed. See 16r01"
> - 16r25 -> #'VK_LEFT'. "LEFT ARROW. Not needed. See 16r1C"
> - 16r26 -> #'VK_UP'. "UP ARROW. Not needed. See 16r1E"
> - 16r27 -> #'VK_RIGHT'. "RIGHT ARROW. Not needed. See 16r1D"
> - 16r28 -> #'VK_DOWN'. "DOWN ARROW. Not needed. See 16r1F"
> - 16r29 -> #'VK_SELECT'.
> - 16r2A -> #'VK_PRINT'.
> - 16r2B -> #'VK_EXECUTE'.
> - 16r2C -> #'VK_SNAPSHOT'. "PRINT SCREEN key"
> - 16r2D -> #'VK_INSERT'. "Not needed. See 16r05"
> - 16r2E -> #F16. "#'VK_F16' swapped with #'VK_DELETE'. See 16r7F"
> - 16r2F -> #help. "#'VK_HELP'"
> - 16r30 -> $0.
> - 16r31 -> $1.
> - 16r32 -> $2.
> - 16r33 -> $3.
> - 16r34 -> $4.
> - 16r35 -> $5.
> - 16r36 -> $6.
> - 16r37 -> $7.
> - 16r38 -> $8.
> - 16r39 -> $9.
> - 16r3A -> nil.
> - 16r3B -> nil.
> - 16r3C -> nil.
> - 16r3D -> nil.
> - 16r3E -> nil.
> - 16r3F -> nil.
> - 16r40 -> nil.
> - 16r41 -> $A.
> - 16r42 -> $B.
> - 16r43 -> $C.
> - 16r44 -> $D.
> - 16r45 -> $E.
> - 16r46 -> $F.
> - 16r47 -> $G.
> - 16r48 -> $H.
> - 16r49 -> $I.
> - 16r4A -> $J.
> - 16r4B -> $K.
> - 16r4C -> $L.
> - 16r4D -> $M.
> - 16r4E -> $N.
> - 16r4F -> $O.
> - 16r50 -> $P.
> - 16r51 -> $Q.
> - 16r52 -> $R.
> - 16r53 -> $S.
> - 16r54 -> $T.
> - 16r55 -> $U.
> - 16r56 -> $V.
> - 16r57 -> $W.
> - 16r58 -> $X.
> - 16r59 -> $Y.
> - 16r5A -> $Z.
> - 16r5B -> #'VK_LWIN'. "Left Windows key"
> - 16r5C -> #'VK_RWIN'. "Right windows key"
> - 16r5D -> #'VK_APPS'. "Applications key"
> - 16r5E -> nil.
> - 16r5F -> #'VK_SLEEP'. "Computer Sleep Key"
> - 16r60 -> #num0. "#'VK_NUMPAD0'"
> - 16r61 -> #num1. "#'VK_NUMPAD1'"
> - 16r62 -> #num2. "#'VK_NUMPAD2'"
> - 16r63 -> #num3. "#'VK_NUMPAD3'"
> - 16r64 -> #num4. "#'VK_NUMPAD4'"
> - 16r65 -> #num5. "#'VK_NUMPAD5'"
> - 16r66 -> #num6. "#'VK_NUMPAD6'"
> - 16r67 -> #num7. "#'VK_NUMPAD7'"
> - 16r68 -> #num8. "#'VK_NUMPAD8'"
> - 16r69 -> #num9. "#'VK_NUMPAD9'"
> - 16r6A -> #numMul. "#'VK_MULTIPLY'"
> - 16r6B -> #numAdd. "#'VK_ADD'"
> - 16r6C -> #'VK_SEPARATOR'.
> - 16r6D -> #numSub. "#'VK_SUBTRACT'"
> - 16r6E -> #numDec. "#'VK_DECIMAL'"
> - 16r6F -> #numDiv. "#'VK_DIVIDE'"
> - 16r70 -> #F1. "#'VK_F1'"
> - 16r71 -> #F2. "#'VK_F2'"
> - 16r72 -> #F3. "#'VK_F3'"
> - 16r73 -> #F4. "#'VK_F4'"
> - 16r74 -> #F5. "#'VK_F5'"
> - 16r75 -> #F6. "#'VK_F6'"
> - 16r76 -> #F7. "#'VK_F7'"
> - 16r77 -> #F8. "#'VK_F8'"
> - 16r78 -> #F9. "#'VK_F9'"
> - 16r79 -> #F10. "#'VK_F10'"
> - 16r7A -> #F11. "#'VK_F11'"
> - 16r7B -> #F12. "#'VK_F12'"
> - 16r7C -> #F13. "#'VK_F13'"
> - 16r7D -> #F14. "#'VK_F14'"
> - 16r7E -> #F15. "#'VK_F15'"
> - 16r7F -> Character delete. "#'VK_DELETE' swapped with #'VK_F16'. See 16r2E"
> - 16r80 -> #F17. "#'VK_F17'"
> - 16r81 -> #F18. "#'VK_F18'"
> - 16r82 -> #F19. "#'VK_F19'"
> - 16r83 -> #F20. "#'VK_F20'"
> - 16r84 -> #F21. "#'VK_F21'"
> - 16r85 -> #F22. "#'VK_F22'"
> - 16r86 -> #F23. "#'VK_F23'"
> - 16r87 -> #F24. "#'VK_F24'"
> - 16r88 -> nil.
> - 16r89 -> nil.
> - 16r8A -> nil.
> - 16r8B -> nil.
> - 16r8C -> nil.
> - 16r8D -> nil.
> - 16r8E -> nil.
> - 16r8F -> nil.
> - 16r90 -> #'VK_NUMLOCK'.
> - 16r91 -> #'VK_SCROLL'.
> - 16r92 -> nil.
> - 16r93 -> nil.
> - 16r94 -> nil.
> - 16r95 -> nil.
> - 16r96 -> nil.
> - 16r97 -> nil.
> - 16r98 -> nil.
> - 16r99 -> nil.
> - 16r9A -> nil.
> - 16r9B -> nil.
> - 16r9C -> nil.
> - 16r9D -> nil.
> - 16r9E -> nil.
> - 16r9F -> nil.
> - 16rA0 -> #'VK_LSHIFT'.
> - 16rA1 -> #'VK_RSHIFT'.
> - 16rA2 -> #'VK_LCONTROL'.
> - 16rA3 -> #'VK_RCONTROL'.
> - 16rA4 -> #'VK_LMENU'.
> - 16rA5 -> #'VK_RMENU'.
> - 16rA6 -> #'VK_BROWSER_BACK'.
> - 16rA7 -> #'VK_BROWSER_FORWARD'.
> - 16rA8 -> #'VK_BROWSER_REFRESH'.
> - 16rA9 -> #'VK_BROWSER_STOP'.
> - 16rAA -> #'VK_BROWSER_SEARCH'.
> - 16rAB -> #'VK_BROWSER_FAVORITES'.
> - 16rAC -> #'VK_BROWSER_HOME'.
> - 16rAD -> #'VK_VOLUME_MUTE'.
> - 16rAE -> #'VK_VOLUME_DOWN'.
> - 16rAF -> #'VK_VOLUME_UP'.
> - 16rB0 -> #'VK_MEDIA_NEXT_TRACK'.
> - 16rB1 -> #'VK_MEDIA_PREV_TRACK'.
> - 16rB2 -> #'VK_MEDIA_STOP'.
> - 16rB3 -> #'VK_MEDIA_PLAY_PAUSE'.
> - 16rB4 -> #'VK_LAUNCH_MAIL'.
> - 16rB5 -> #'VK_LAUNCH_MEDIA_SELECT'.
> - 16rB6 -> #'VK_LAUNCH_APP1'.
> - 16rB7 -> #'VK_LAUNCH_APP2'.
> - 16rB8 -> nil.
> - 16rB9 -> nil.
>
> + {
> + 16rBA . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_1']).
> + "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ;: key"
> +
> + 16rBB . (self simplifyVirtualKeyCodes ifTrue: [#squeak2] ifFalse: [#'VK_OEM_PLUS']).
> + "For any country/region, the + key -- mt. Haha. You wish."
> +
> + 16rBC . #squeakComma. "#'VK_OEM_COMMA'" "For any country/region, the , key"
> +
> + 16rBD . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_MINUS']).
> + "For any country/region, the - key"
> +
> + 16rBE . #squeakPeriod. "#'VK_OEM_PERIOD'" "For any country/region, the . key"
> +
> + 16rBF . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_2']).
> + "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the /? key"
> +
> + 16rC0 . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_3']).
> + "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the `~ key'"
> + } pairsDo: [ :i :val | table at: i put: val] .
> - 16rBA -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_1']).
> - "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ;: key"
>
> + 16rC1 to: 16rDA
> + do: [ :e | table at: e put: nil ].
> - 16rBB -> (self simplifyVirtualKeyCodes ifTrue: [#squeak2] ifFalse: [#'VK_OEM_PLUS']).
> - "For any country/region, the + key -- mt. Haha. You wish."
>
> + {
> +
> + 16rDB . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_4']).
> + "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the [{ key"
> +
> + 16rDC . (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_5']).
> + "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \| key"
> +
> + 16rDD . (self simplifyVirtualKeyCodes ifTrue: [#squeak2] ifFalse: [#'VK_OEM_6']).
> + "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ]} key"
> +
> + 16rDE . (self simplifyVirtualKeyCodes ifTrue: [#squeak3] ifFalse: [#'VK_OEM_7']).
> + "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the single-quote/double-quote key"
> +
> + 16rDF . #'VK_OEM_8'.
> + "Used for miscellaneous characters; it can vary by keyboard."
> +
> + 16rE0 . nil.
> + 16rE1 . nil.
> +
> + 16rE2 . (self simplifyVirtualKeyCodes ifTrue: [#squeak4] ifFalse: [#'VK_OEM_102']).
> + "Either the angle bracket key or the backslash key on the RT 102-key keyboard"
> +
> + 16rE3 . nil.
> + 16rE4 . nil.
> + 16rE5 . #'VK_PROCESSKEY'. "IME PROCESS key"
> + 16rE6 . nil.
> + 16rE7 . #'VK_PACKET'. "Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods."
> + } pairsDo: [ :i :val | table at: i put: val] .
> - 16rBC -> #squeakComma. "#'VK_OEM_COMMA'" "For any country/region, the , key"
>
> + 16rE8 to: 16rF5
> + do: [ :e | table at: e put: nil ].
> - 16rBD -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_MINUS']).
> - "For any country/region, the - key"
>
> + {
> + 16rF6 . #'VK_ATTN'.
> + 16rF7 . #'VK_CRSEL'.
> + 16rF8 . #'VK_EXSEL'.
> + 16rF9 . #'VK_EREOF'. "Erase EOF key"
> + 16rFA . #'VK_PLAY'.
> + 16rFB . #'VK_ZOOM'.
> + 16rFC . #'VK_NONAME'. "Reserved"
> + 16rFD . #'VK_PA1'.
> + 16rFE . #'VK_OEM_CLEAR'. "Clear key"
> +
> + } pairsDo: [ :i :val | table at: i put: val] .
> - 16rBE -> #squeakPeriod. "#'VK_OEM_PERIOD'" "For any country/region, the . key"
>
> + ^table
> - 16rBF -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_2']).
> - "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the /? key"
>
> + !
> - 16rC0 -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_3']).
> - "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the `~ key'"
> -
> - 16rC1 -> nil.
> - 16rC2 -> nil.
> - 16rC3 -> nil.
> - 16rC4 -> nil.
> - 16rC5 -> nil.
> - 16rC6 -> nil.
> - 16rC7 -> nil.
> - 16rC8 -> nil.
> - 16rC9 -> nil.
> - 16rCA -> nil.
> - 16rCB -> nil.
> - 16rCC -> nil.
> - 16rCD -> nil.
> - 16rCE -> nil.
> - 16rCF -> nil.
> - 16rD0 -> nil.
> - 16rD1 -> nil.
> - 16rD2 -> nil.
> - 16rD3 -> nil.
> - 16rD4 -> nil.
> - 16rD5 -> nil.
> - 16rD6 -> nil.
> - 16rD7 -> nil.
> - 16rD8 -> nil.
> - 16rD9 -> nil.
> - 16rDA -> nil.
> -
> - 16rDB -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_4']).
> - "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the [{ key"
> -
> - 16rDC -> (self simplifyVirtualKeyCodes ifTrue: [#squeak1] ifFalse: [#'VK_OEM_5']).
> - "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \| key"
> -
> - 16rDD -> (self simplifyVirtualKeyCodes ifTrue: [#squeak2] ifFalse: [#'VK_OEM_6']).
> - "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ]} key"
> -
> - 16rDE -> (self simplifyVirtualKeyCodes ifTrue: [#squeak3] ifFalse: [#'VK_OEM_7']).
> - "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the single-quote/double-quote key"
> -
> - 16rDF -> #'VK_OEM_8'.
> - "Used for miscellaneous characters; it can vary by keyboard."
> -
> - 16rE0 -> nil.
> - 16rE1 -> nil.
> -
> - 16rE2 -> (self simplifyVirtualKeyCodes ifTrue: [#squeak4] ifFalse: [#'VK_OEM_102']).
> - "Either the angle bracket key or the backslash key on the RT 102-key keyboard"
> -
> - 16rE3 -> nil.
> - 16rE4 -> nil.
> - 16rE5 -> #'VK_PROCESSKEY'. "IME PROCESS key"
> - 16rE6 -> nil.
> - 16rE7 -> #'VK_PACKET'. "Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods."
> - 16rE8 -> nil.
> - 16rE9 -> nil.
> - 16rEA -> nil.
> - 16rEB -> nil.
> - 16rEC -> nil.
> - 16rED -> nil.
> - 16rEE -> nil.
> - 16rEF -> nil.
> - 16rF0 -> nil.
> - 16rF1 -> nil.
> - 16rF2 -> nil.
> - 16rF3 -> nil.
> - 16rF4 -> nil.
> - 16rF5 -> nil.
> - 16rF6 -> #'VK_ATTN'.
> - 16rF7 -> #'VK_CRSEL'.
> - 16rF8 -> #'VK_EXSEL'.
> - 16rF9 -> #'VK_EREOF'. "Erase EOF key"
> - 16rFA -> #'VK_PLAY'.
> - 16rFB -> #'VK_ZOOM'.
> - 16rFC -> #'VK_NONAME'. "Reserved"
> - 16rFD -> #'VK_PA1'.
> - 16rFE -> #'VK_OEM_CLEAR'. "Clear key"
> -
> - }!
>
> Item was changed:
> ----- Method: EventSensor class>>virtualKeysOnX11 (in category 'virtual keys') -----
> virtualKeysOnX11
> "Based on the OSVM X11 code as of 202104182333"
> "https://code.woboq.org/kde/include/X11/keysymdef.h.html"
>
> "!!!!!! There are non-printable control keys for keyDown events on X11. Sigh."
> self flag: #todo. "Linux VM is broken. We need scancodes but we get actual character codes. It is really hard to determine physical keys from that."
> - ^ {
>
> + ^ Dictionary newFromPairs: {
> + "Regular ASCII"
> + 16r41 . $A.
> + 16r42 . $B.
> + 16r43 . $C.
> + 16r44 . $D.
> + 16r45 . $E.
> + 16r46 . $F.
> + 16r47 . $G.
> + 16r48 . $H.
> + 16r49 . $I.
> + 16r4A . $J.
> + 16r4B . $K.
> + 16r4C . $L.
> + 16r4D . $M.
> + 16r4E . $N.
> + 16r4F . $O.
> + 16r50 . $P.
> + 16r51 . $Q.
> + 16r52 . $R.
> + 16r53 . $S.
> + 16r54 . $T.
> + 16r55 . $U.
> + 16r56 . $V.
> + 16r57 . $W.
> + 16r58 . $X.
> + 16r59 . $Y.
> + 16r5A . $Z.
> - "Regular ASCII"
> - 16r41 -> $A.
> - 16r42 -> $B.
> - 16r43 -> $C.
> - 16r44 -> $D.
> - 16r45 -> $E.
> - 16r46 -> $F.
> - 16r47 -> $G.
> - 16r48 -> $H.
> - 16r49 -> $I.
> - 16r4A -> $J.
> - 16r4B -> $K.
> - 16r4C -> $L.
> - 16r4D -> $M.
> - 16r4E -> $N.
> - 16r4F -> $O.
> - 16r50 -> $P.
> - 16r51 -> $Q.
> - 16r52 -> $R.
> - 16r53 -> $S.
> - 16r54 -> $T.
> - 16r55 -> $U.
> - 16r56 -> $V.
> - 16r57 -> $W.
> - 16r58 -> $X.
> - 16r59 -> $Y.
> - 16r5A -> $Z.
>
> + "Regular ASCII - numbers"
> + 16r30 . $0.
> + 16r31 . $1.
> + 16r32 . $2.
> + 16r33 . $3.
> + 16r34 . $4.
> + 16r35 . $5.
> + 16r36 . $6.
> + 16r37 . $7.
> + 16r38 . $8.
> + 16r39 . $9.
> - "Regular ASCII - numbers"
> - 16r30 -> $0.
> - 16r31 -> $1.
> - 16r32 -> $2.
> - 16r33 -> $3.
> - 16r34 -> $4.
> - 16r35 -> $5.
> - 16r36 -> $6.
> - 16r37 -> $7.
> - 16r38 -> $8.
> - 16r39 -> $9.
>
> + "Mapped to uppercase when SHIFT is pressed ... sigh ..."
> + 16r61 . $A.
> + 16r62 . $B.
> + 16r63 . $C.
> + 16r64 . $D.
> + 16r65 . $E.
> + 16r66 . $F.
> + 16r67 . $G.
> + 16r68 . $H.
> + 16r69 . $I.
> + 16r6A . $J.
> + 16r6B . $K.
> + 16r6C . $L.
> + 16r6D . $M.
> + 16r6E . $N.
> + 16r6F . $O.
> + 16r70 . $P.
> + 16r71 . $Q.
> + 16r72 . $R.
> + 16r73 . $S.
> + 16r74 . $T.
> + 16r75 . $U.
> + 16r76 . $V.
> + 16r77 . $W.
> + 16r78 . $X.
> + 16r79 . $Y.
> + 16r7A . $Z.
> - "Mapped to uppercase when SHIFT is pressed ... sigh ..."
> - 16r61 -> $A.
> - 16r62 -> $B.
> - 16r63 -> $C.
> - 16r64 -> $D.
> - 16r65 -> $E.
> - 16r66 -> $F.
> - 16r67 -> $G.
> - 16r68 -> $H.
> - 16r69 -> $I.
> - 16r6A -> $J.
> - 16r6B -> $K.
> - 16r6C -> $L.
> - 16r6D -> $M.
> - 16r6E -> $N.
> - 16r6F -> $O.
> - 16r70 -> $P.
> - 16r71 -> $Q.
> - 16r72 -> $R.
> - 16r73 -> $S.
> - 16r74 -> $T.
> - 16r75 -> $U.
> - 16r76 -> $V.
> - 16r77 -> $W.
> - 16r78 -> $X.
> - 16r79 -> $Y.
> - 16r7A -> $Z.
>
> + "most common non-printable control characters"
> + 16r01 . Character home.
> + 16r03 . Character enter.
> + 16r04 . Character end.
> + 16r05 . Character insert.
> + 16r08 . Character backspace.
> + 16r09 . Character tab.
> + 16r0B . Character pageUp.
> + 16r0C . Character pageDown.
> + 16r0D . Character return.
> + 16r1B . Character escape.
> + 16r1C . Character arrowLeft.
> + 16r1D . Character arrowRight.
> + 16r1E . Character arrowUp.
> + 16r1F . Character arrowDown.
> + 16r20 . Character space.
> - "most common non-printable control characters"
> - 16r01 -> Character home.
> - 16r03 -> Character enter.
> - 16r04 -> Character end.
> - 16r05 -> Character insert.
> - 16r08 -> Character backspace.
> - 16r09 -> Character tab.
> - 16r0B -> Character pageUp.
> - 16r0C -> Character pageDown.
> - 16r0D -> Character return.
> - 16r1B -> Character escape.
> - 16r1C -> Character arrowLeft.
> - 16r1D -> Character arrowRight.
> - 16r1E -> Character arrowUp.
> - 16r1F -> Character arrowDown.
> - 16r20 -> Character space.
>
> + 16r7F . Character delete.
> - 16r7F -> Character delete.
>
> + "Physical modifier keys"
> + 16rF7 . (self mapAltKeysToOptionKeys ifTrue: [#option] ifFalse: [#command "aka. #alt"]). "#'XK_Alt_L'"
> + 16rFE . #shift. "#'XK_Shift_R'"
> + 16rFF . #shift. "#'XK_Shift_L'."
> + 16rFA . (self mapControlKeysToCommandKeys ifTrue: [#command] ifFalse: [#control]). "#'XK_Control_R'"
> + 16rFB . (self mapControlKeysToCommandKeys ifTrue: [#command] ifFalse: [#control]). "#'XK_Control_L'."
> + 16rFD . #capsLock. "#'XK_Caps_Lock'."
> - "Physical modifier keys"
> - 16rF7 -> (self mapAltKeysToOptionKeys ifTrue: [#option] ifFalse: [#command "aka. #alt"]). "#'XK_Alt_L'"
> - 16rFE -> #shift. "#'XK_Shift_R'"
> - 16rFF -> #shift. "#'XK_Shift_L'."
> - 16rFA -> (self mapControlKeysToCommandKeys ifTrue: [#command] ifFalse: [#control]). "#'XK_Control_R'"
> - 16rFB -> (self mapControlKeysToCommandKeys ifTrue: [#command] ifFalse: [#control]). "#'XK_Control_L'."
> - 16rFD -> #capsLock. "#'XK_Caps_Lock'."
>
> + "Try to make sense of some other key characters. Hmpf."
> + 16r22 . #squeak1.
> + 16r23 . #squeak1.
> + 16r27 . #squeak1.
> + 16r2D . #squeak1.
> + 16r2F . #squeak1.
> + 16r3A . #squeak1.
> + 16r3B . #squeak1.
> + 16r3C . #squeak1.
> + 16r3E . #squeak1.
> + 16r3F . #squeak1.
> + 16r5B . #squeak1.
> + 16r5C . #squeak1.
> + 16r5E . #squeak1.
> + 16r5F . #squeak1.
> + 16r60 . #squeak1.
> + 16r7B . #squeak1.
> + 16r7C . #squeak1.
> + 16r7E . #squeak1.
> + 16rC2 . #squeak1.
> + 16rC3 . #squeak1.
> - "Try to make sense of some other key characters. Hmpf."
> - 16r22 -> #squeak1.
> - 16r23 -> #squeak1.
> - 16r27 -> #squeak1.
> - 16r2D -> #squeak1.
> - 16r2F -> #squeak1.
> - 16r3A -> #squeak1.
> - 16r3B -> #squeak1.
> - 16r3C -> #squeak1.
> - 16r3E -> #squeak1.
> - 16r3F -> #squeak1.
> - 16r5B -> #squeak1.
> - 16r5C -> #squeak1.
> - 16r5E -> #squeak1.
> - 16r5F -> #squeak1.
> - 16r60 -> #squeak1.
> - 16r7B -> #squeak1.
> - 16r7C -> #squeak1.
> - 16r7E -> #squeak1.
> - 16rC2 -> #squeak1.
> - 16rC3 -> #squeak1.
>
> + 16r2A . #squeak2.
> + 16r2B . #squeak2.
> + 16r3D . #squeak2.
> + 16r5D . #squeak2.
> + 16r7D . #squeak2.
> - 16r2A -> #squeak2.
> - 16r2B -> #squeak2.
> - 16r3D -> #squeak2.
> - 16r5D -> #squeak2.
> - 16r7D -> #squeak2.
>
> + 16r2C . #squeakComma.
> + 16r2E . #squeakPeriod.
> + }
> - 16r2C -> #squeakComma.
> - 16r2E -> #squeakPeriod.
>
> + !
> - }!
>
>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210624/5fd1770d/attachment.html>


More information about the Squeak-dev mailing list