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

commits at source.squeak.org commits at source.squeak.org
Wed Jun 23 20:30:01 UTC 2021


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.
  
+ !
- 	}!



More information about the Squeak-dev mailing list