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.
+ ! - }!
packages@lists.squeakfoundation.org