Levente Uzonyi uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-ul.282.mcz
==================== Summary ====================
Name: Tools-ul.282
Author: ul
Time: 23 November 2010, 3:42:59.885 pm
UUID: 96d0a312-4360-6f49-8987-40be24aeff17
Ancestors: Tools-ul.281, Tools-ul.278
merged
=============== Diff against Tools-ul.281 ===============
Item was changed:
Object subclass: #DebuggerMethodMap
instanceVariableNames: 'timestamp methodReference methodNode abstractSourceRanges sortedSourceMap'
+ classVariableNames: 'AccessLock MapCache MapCacheEntries'
- classVariableNames: 'MapCache MapCacheEntries'
poolDictionaries: ''
category: 'Tools-Debugger'!
!DebuggerMethodMap commentStamp: '<historical>' prior: 0!
I am a place-holder for information needed by the Debugger to inspect method activations. I insulate the debugger from details of code generation such as exact bytecode offsets and temporary variable locations. I have two concreate subclasses, one for methods compiled using BlueBook blocks and one for methods compiled using Closures. These classes deal with temporary variable access. My function is to abstract the source map away from actual bytecode pcs to abstract bytecode pcs.
To reduce compilation time I try and defer as much computation to access time as possible as instances of me will be created after each compilation.
I maintain a WeakIdentityDictionary of method to DebuggerMethodMap to cache maps. I refer to my method through a WeakArray to keep the map cache functional. If the reference from a DebuggerMethodMap to its method were strong then the method would never be dropped from the cache because the reference from its map would keep it alive.!
Item was changed:
----- Method: DebuggerMethodMap class>>cacheDebugMap:forMethod: (in category 'debugger support') -----
cacheDebugMap: aDebuggerMethodMap forMethod: aCompiledMethod
+
+ ^self protected: [
+ MapCache size >= MapCacheEntries ifTrue: [
+ MapCache slowSize >= MapCacheEntries
+ ifFalse: [ MapCache rehash ]
+ ifTrue: [
+ | mapsByAge |
+ mapsByAge := MapCache keys sort: [ :m1 :m2 |
+ "We are holding strongly on the keys, so #at: is suitable."
+ (MapCache at: m1) timestamp < (MapCache at: m2) timestamp].
+ mapsByAge from: 1 to: mapsByAge size - MapCacheEntries do: [ :each |
+ MapCache removeKey: each ] ] ].
+ MapCache
+ at: aCompiledMethod
+ put: aDebuggerMethodMap ]!
- MapCache finalizeValues.
- [MapCache size >= MapCacheEntries] whileTrue:
- [| mapsByAge |
- mapsByAge := MapCache keys asArray sort:
- [:m1 :m2|
- (MapCache at: m1) timestamp
- < (MapCache at: m2) timestamp].
- mapsByAge notEmpty ifTrue: "There be race conditions and reentrancy issues here"
- [MapCache removeKey: mapsByAge last]].
-
- ^MapCache
- at: aCompiledMethod
- put: aDebuggerMethodMap!
Item was changed:
----- Method: DebuggerMethodMap class>>forMethod: (in category 'instance creation') -----
forMethod: aMethod "<CompiledMethod>"
"Answer a DebuggerMethodMap suitable for debugging activations of aMethod.
Answer an existing instance from the cache if it exists, cacheing a new one if required."
+
+ ^self protected: [
+ MapCache
+ at: aMethod
+ ifAbsent: [self
+ cacheDebugMap:
+ (self
+ forMethod: aMethod
+ methodNode: aMethod methodNode)
+ forMethod: aMethod] ]!
- ^MapCache
- at: aMethod
- ifAbsent: [self
- cacheDebugMap:
- (self
- forMethod: aMethod
- methodNode: aMethod methodNode)
- forMethod: aMethod]!
Item was added:
+ ----- Method: DebuggerMethodMap class>>protected: (in category 'synchronization') -----
+ protected: aBlock
+
+ ^(AccessLock ifNil: [ AccessLock := Mutex new ]) critical: aBlock!
Item was changed:
----- Method: DebuggerMethodMap class>>voidMapCache (in category 'class initialization') -----
voidMapCache
+
+ self protected: [
+ MapCache := WeakIdentityKeyDictionary new.
+ MapCacheEntries := 16 ]!
- MapCache := WeakIdentityKeyDictionary new.
- MapCacheEntries := 16!
Levente Uzonyi uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-ul.282.mcz
==================== Summary ====================
Name: Tools-ul.282
Author: ul
Time: 23 November 2010, 3:42:59.885 pm
UUID: 96d0a312-4360-6f49-8987-40be24aeff17
Ancestors: Tools-ul.281, Tools-ul.278
merged
=============== Diff against Tools-ul.281 ===============
Item was changed:
Object subclass: #DebuggerMethodMap
instanceVariableNames: 'timestamp methodReference methodNode abstractSourceRanges sortedSourceMap'
+ classVariableNames: 'AccessLock MapCache MapCacheEntries'
- classVariableNames: 'MapCache MapCacheEntries'
poolDictionaries: ''
category: 'Tools-Debugger'!
!DebuggerMethodMap commentStamp: '<historical>' prior: 0!
I am a place-holder for information needed by the Debugger to inspect method activations. I insulate the debugger from details of code generation such as exact bytecode offsets and temporary variable locations. I have two concreate subclasses, one for methods compiled using BlueBook blocks and one for methods compiled using Closures. These classes deal with temporary variable access. My function is to abstract the source map away from actual bytecode pcs to abstract bytecode pcs.
To reduce compilation time I try and defer as much computation to access time as possible as instances of me will be created after each compilation.
I maintain a WeakIdentityDictionary of method to DebuggerMethodMap to cache maps. I refer to my method through a WeakArray to keep the map cache functional. If the reference from a DebuggerMethodMap to its method were strong then the method would never be dropped from the cache because the reference from its map would keep it alive.!
Item was changed:
----- Method: DebuggerMethodMap class>>cacheDebugMap:forMethod: (in category 'debugger support') -----
cacheDebugMap: aDebuggerMethodMap forMethod: aCompiledMethod
+
+ ^self protected: [
+ MapCache size >= MapCacheEntries ifTrue: [
+ MapCache slowSize >= MapCacheEntries
+ ifFalse: [ MapCache rehash ]
+ ifTrue: [
+ | mapsByAge |
+ mapsByAge := MapCache keys sort: [ :m1 :m2 |
+ "We are holding strongly on the keys, so #at: is suitable."
+ (MapCache at: m1) timestamp < (MapCache at: m2) timestamp].
+ mapsByAge from: 1 to: mapsByAge size - MapCacheEntries do: [ :each |
+ MapCache removeKey: each ] ] ].
+ MapCache
+ at: aCompiledMethod
+ put: aDebuggerMethodMap ]!
- MapCache finalizeValues.
- [MapCache size >= MapCacheEntries] whileTrue:
- [| mapsByAge |
- mapsByAge := MapCache keys asArray sort:
- [:m1 :m2|
- (MapCache at: m1) timestamp
- < (MapCache at: m2) timestamp].
- mapsByAge notEmpty ifTrue: "There be race conditions and reentrancy issues here"
- [MapCache removeKey: mapsByAge last]].
-
- ^MapCache
- at: aCompiledMethod
- put: aDebuggerMethodMap!
Item was changed:
----- Method: DebuggerMethodMap class>>forMethod: (in category 'instance creation') -----
forMethod: aMethod "<CompiledMethod>"
"Answer a DebuggerMethodMap suitable for debugging activations of aMethod.
Answer an existing instance from the cache if it exists, cacheing a new one if required."
+
+ ^self protected: [
+ MapCache
+ at: aMethod
+ ifAbsent: [self
+ cacheDebugMap:
+ (self
+ forMethod: aMethod
+ methodNode: aMethod methodNode)
+ forMethod: aMethod] ]!
- ^MapCache
- at: aMethod
- ifAbsent: [self
- cacheDebugMap:
- (self
- forMethod: aMethod
- methodNode: aMethod methodNode)
- forMethod: aMethod]!
Item was added:
+ ----- Method: DebuggerMethodMap class>>protected: (in category 'synchronization') -----
+ protected: aBlock
+
+ ^(AccessLock ifNil: [ AccessLock := Mutex new ]) critical: aBlock!
Item was changed:
----- Method: DebuggerMethodMap class>>voidMapCache (in category 'class initialization') -----
voidMapCache
+
+ self protected: [
+ MapCache := WeakIdentityKeyDictionary new.
+ MapCacheEntries := 16 ]!
- MapCache := WeakIdentityKeyDictionary new.
- MapCacheEntries := 16!
Levente Uzonyi uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-ul.282.mcz
==================== Summary ====================
Name: Tools-ul.282
Author: ul
Time: 23 November 2010, 3:42:59.885 pm
UUID: 96d0a312-4360-6f49-8987-40be24aeff17
Ancestors: Tools-ul.281, Tools-ul.278
merged
=============== Diff against Tools-ul.281 ===============
Item was changed:
Object subclass: #DebuggerMethodMap
instanceVariableNames: 'timestamp methodReference methodNode abstractSourceRanges sortedSourceMap'
+ classVariableNames: 'AccessLock MapCache MapCacheEntries'
- classVariableNames: 'MapCache MapCacheEntries'
poolDictionaries: ''
category: 'Tools-Debugger'!
!DebuggerMethodMap commentStamp: '<historical>' prior: 0!
I am a place-holder for information needed by the Debugger to inspect method activations. I insulate the debugger from details of code generation such as exact bytecode offsets and temporary variable locations. I have two concreate subclasses, one for methods compiled using BlueBook blocks and one for methods compiled using Closures. These classes deal with temporary variable access. My function is to abstract the source map away from actual bytecode pcs to abstract bytecode pcs.
To reduce compilation time I try and defer as much computation to access time as possible as instances of me will be created after each compilation.
I maintain a WeakIdentityDictionary of method to DebuggerMethodMap to cache maps. I refer to my method through a WeakArray to keep the map cache functional. If the reference from a DebuggerMethodMap to its method were strong then the method would never be dropped from the cache because the reference from its map would keep it alive.!
Item was changed:
----- Method: DebuggerMethodMap class>>cacheDebugMap:forMethod: (in category 'debugger support') -----
cacheDebugMap: aDebuggerMethodMap forMethod: aCompiledMethod
+
+ ^self protected: [
+ MapCache size >= MapCacheEntries ifTrue: [
+ MapCache slowSize >= MapCacheEntries
+ ifFalse: [ MapCache rehash ]
+ ifTrue: [
+ | mapsByAge |
+ mapsByAge := MapCache keys sort: [ :m1 :m2 |
+ "We are holding strongly on the keys, so #at: is suitable."
+ (MapCache at: m1) timestamp < (MapCache at: m2) timestamp].
+ mapsByAge from: 1 to: mapsByAge size - MapCacheEntries do: [ :each |
+ MapCache removeKey: each ] ] ].
+ MapCache
+ at: aCompiledMethod
+ put: aDebuggerMethodMap ]!
- MapCache finalizeValues.
- [MapCache size >= MapCacheEntries] whileTrue:
- [| mapsByAge |
- mapsByAge := MapCache keys asArray sort:
- [:m1 :m2|
- (MapCache at: m1) timestamp
- < (MapCache at: m2) timestamp].
- mapsByAge notEmpty ifTrue: "There be race conditions and reentrancy issues here"
- [MapCache removeKey: mapsByAge last]].
-
- ^MapCache
- at: aCompiledMethod
- put: aDebuggerMethodMap!
Item was changed:
----- Method: DebuggerMethodMap class>>forMethod: (in category 'instance creation') -----
forMethod: aMethod "<CompiledMethod>"
"Answer a DebuggerMethodMap suitable for debugging activations of aMethod.
Answer an existing instance from the cache if it exists, cacheing a new one if required."
+
+ ^self protected: [
+ MapCache
+ at: aMethod
+ ifAbsent: [self
+ cacheDebugMap:
+ (self
+ forMethod: aMethod
+ methodNode: aMethod methodNode)
+ forMethod: aMethod] ]!
- ^MapCache
- at: aMethod
- ifAbsent: [self
- cacheDebugMap:
- (self
- forMethod: aMethod
- methodNode: aMethod methodNode)
- forMethod: aMethod]!
Item was added:
+ ----- Method: DebuggerMethodMap class>>protected: (in category 'synchronization') -----
+ protected: aBlock
+
+ ^(AccessLock ifNil: [ AccessLock := Mutex new ]) critical: aBlock!
Item was changed:
----- Method: DebuggerMethodMap class>>voidMapCache (in category 'class initialization') -----
voidMapCache
+
+ self protected: [
+ MapCache := WeakIdentityKeyDictionary new.
+ MapCacheEntries := 16 ]!
- MapCache := WeakIdentityKeyDictionary new.
- MapCacheEntries := 16!
Levente Uzonyi uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-ul.395.mcz
==================== Summary ====================
Name: System-ul.395
Author: ul
Time: 23 November 2010, 3:29:08.371 pm
UUID: edf05ab8-4137-db41-b757-0b90a30855f2
Ancestors: System-ul.394
- updated the contents of the keyboard shortcuts
=============== Diff against System-ul.394 ===============
Item was changed:
----- Method: Utilities class>>commandKeyMappings (in category 'support windows') -----
commandKeyMappings
^ (self class firstCommentAt: #commandKeyMappings) translated
"Lower-case command keys
(use with Cmd key on Mac and Alt key on other platforms)
a Select all
b Browse it (selection is a class name or cursor is over a class-list or message-list)
c Copy selection
d Do it (selection is a valid expression)
e Exchange selection with prior selection
f Find
g Find again
h Set selection as search string for find again
i Inspect it (selection is a valid expression, or selection is over an inspect-ilst)
j Again once (do the last text-related operation again)
k Set font
l Cancel
m Implementors of it (selection is a message selector or cursor is over a class-list or message-list)
n Senders of it (selection is a message selector or cursor is over a class-list or message-list)
o Spawn current method
p Print it (selection is a valid expression)
q Query symbol (toggle all possible completion for a given prefix)
r Recognizer
s Save (i.e. accept)
t Finds a Transcript (when cursor is over the desktop)
u Toggle alignment
v Paste
w Delete preceding word (over text); Close-window (over morphic desktop)
x Cut selection
y Swap characters
z Undo
Note: for Do it, Senders of it, etc., a null selection will be expanded to a word or to the current line in an attempt to do what you want. Also note that Senders/Implementors of it will find the outermost keyword selector in a large selection, as when you have selected a bracketed expression or an entire line. Finally note that the same cmd-m and cmd-n (and cmd-v for versions) work in the message pane of most browsers.
Upper-case command keys
(use with Shift-Cmd, or Ctrl on Mac
or Shift-Alt on other platforms; sometimes Ctrl works too)
A Advance argument
B Browse it in this same browser (in System browsers only)
C Compare argument to clipboard
D Duplicate
E Method strings containing it
F Insert 'ifFalse:'
G fileIn from it (a file name)
H cursor TopHome:
I Inspect via Object Explorer
J Again many (apply the previous text command repeatedly until the end of the text)
K Set style
L Outdent (move selection one tab-stop left)
M Select current type-in
N References to it (selection is a class name, or cursor is over a class-list or message-list)
O Open single-message browser (in message lists)
P Make project link
R Indent (move selection one tab-stap right)
S Search
T Insert 'ifTrue:'
U Convert linefeeds to carriage returns in selection
V Paste author's initials
W Selectors containing it (in text); show-world-menu (when issued with cursor over desktop)
X Force selection to lowercase
Y Force selection to uppercase
Z Capitalize all words in selection
Other special keys
Backspace Backward delete character
Del Forward delete character
Shift-Bksp Backward delete word
Shift-Del Forward delete word
Esc Pop up the Desktop Menu
\ Send top window to back
Cursor keys
left, right,
up, down Move cursor left, right, up or down
Ctrl-left Move cursor left one word
Ctrl-right Move cursor right one word
Home Move cursor to begin of line or begin of text
End Move cursor to end of line or end of text
PgUp, Ctrl-up Move cursor up one page
PgDown, Ctrl-Dn Move cursor down one page
Note all these keys can be used together with Shift to define or enlarge the selection. You cannot however shrink that selection again, as in some other systems.
Other Cmd-key combinations (not available on all platforms)
Return Insert return followed by as many tabs as the previous line
(with a further adjustment for additional brackets in that line)
Space Select the current word as with double clicking
Enclose the selection in a kind of bracket. Each is a toggle.
(not available on all platforms)
Ctrl-( Enclose within ( and ), or remove enclosing ( and )
Ctrl-[ Enclose within [ and ], or remove enclosing [ and ]
Crtl-{ Enclose within { and }, or remove enclosing { and }
Ctrl-< Enclose within < and >, or remove enclosing < and >
Ctrl-' Enclose within ' and ', or remove enclosing ' and '
Ctrl-"" Enclose within "" and "", or remove enclosing "" and ""
Note also that you can double-click just inside any of the above delimiters,
or at the beginning or end of a line, to select the text enclosed.
Text Emphasis
(not available on all platforms)
Cmd-1 type the first method argument
Cmd-2 type the second method argument
Cmd-3 type the third method argument
Cmd-4 type the fourth method argument
Cmd-5 for future use
Cmd-6 color, action-on-click, link to class comment, link to method, url
Brings up a menu. To remove these properties, select
more than the active part and then use command-0.
Cmd-7 bold
Cmd-8 italic
Cmd-9 narrow (same as negative kern)
Cmd-0 plain text (resets all emphasis)
Cmd-- underlined (toggles it)
Cmd-= struck out (toggles it)
Shift-Cmd-- (aka :=) negative kern (letters 1 pixel closer)
Shift-Cmd-+ positive kern (letters 1 pixel larger spread)
Docking Bar
Ctrl-<n> opens the n-th (where n is between 0 and 7) menu if such exists, otherwise it moves the keyboard focus to the Search Bar. Currently this means:
+ Ctrl-0 Activates Search Bar
Ctrl-1 Squeak menu
Ctrl-2 Projects menu
Ctrl-3 Tools menu
+ Ctrl-4 Apps menu
+ Ctrl-5 Extras menu
+ Ctrl-6 Windows menu
+ Ctrl-7 Help menu
- Ctrl-4 Extras menu
- Ctrl-5 Windows menu
- Ctrl-6 Help menu
- Ctrl-7 Activates Search Bar
"!
Levente Uzonyi uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-ul.395.mcz
==================== Summary ====================
Name: System-ul.395
Author: ul
Time: 23 November 2010, 3:29:08.371 pm
UUID: edf05ab8-4137-db41-b757-0b90a30855f2
Ancestors: System-ul.394
- updated the contents of the keyboard shortcuts
=============== Diff against System-ul.394 ===============
Item was changed:
----- Method: Utilities class>>commandKeyMappings (in category 'support windows') -----
commandKeyMappings
^ (self class firstCommentAt: #commandKeyMappings) translated
"Lower-case command keys
(use with Cmd key on Mac and Alt key on other platforms)
a Select all
b Browse it (selection is a class name or cursor is over a class-list or message-list)
c Copy selection
d Do it (selection is a valid expression)
e Exchange selection with prior selection
f Find
g Find again
h Set selection as search string for find again
i Inspect it (selection is a valid expression, or selection is over an inspect-ilst)
j Again once (do the last text-related operation again)
k Set font
l Cancel
m Implementors of it (selection is a message selector or cursor is over a class-list or message-list)
n Senders of it (selection is a message selector or cursor is over a class-list or message-list)
o Spawn current method
p Print it (selection is a valid expression)
q Query symbol (toggle all possible completion for a given prefix)
r Recognizer
s Save (i.e. accept)
t Finds a Transcript (when cursor is over the desktop)
u Toggle alignment
v Paste
w Delete preceding word (over text); Close-window (over morphic desktop)
x Cut selection
y Swap characters
z Undo
Note: for Do it, Senders of it, etc., a null selection will be expanded to a word or to the current line in an attempt to do what you want. Also note that Senders/Implementors of it will find the outermost keyword selector in a large selection, as when you have selected a bracketed expression or an entire line. Finally note that the same cmd-m and cmd-n (and cmd-v for versions) work in the message pane of most browsers.
Upper-case command keys
(use with Shift-Cmd, or Ctrl on Mac
or Shift-Alt on other platforms; sometimes Ctrl works too)
A Advance argument
B Browse it in this same browser (in System browsers only)
C Compare argument to clipboard
D Duplicate
E Method strings containing it
F Insert 'ifFalse:'
G fileIn from it (a file name)
H cursor TopHome:
I Inspect via Object Explorer
J Again many (apply the previous text command repeatedly until the end of the text)
K Set style
L Outdent (move selection one tab-stop left)
M Select current type-in
N References to it (selection is a class name, or cursor is over a class-list or message-list)
O Open single-message browser (in message lists)
P Make project link
R Indent (move selection one tab-stap right)
S Search
T Insert 'ifTrue:'
U Convert linefeeds to carriage returns in selection
V Paste author's initials
W Selectors containing it (in text); show-world-menu (when issued with cursor over desktop)
X Force selection to lowercase
Y Force selection to uppercase
Z Capitalize all words in selection
Other special keys
Backspace Backward delete character
Del Forward delete character
Shift-Bksp Backward delete word
Shift-Del Forward delete word
Esc Pop up the Desktop Menu
\ Send top window to back
Cursor keys
left, right,
up, down Move cursor left, right, up or down
Ctrl-left Move cursor left one word
Ctrl-right Move cursor right one word
Home Move cursor to begin of line or begin of text
End Move cursor to end of line or end of text
PgUp, Ctrl-up Move cursor up one page
PgDown, Ctrl-Dn Move cursor down one page
Note all these keys can be used together with Shift to define or enlarge the selection. You cannot however shrink that selection again, as in some other systems.
Other Cmd-key combinations (not available on all platforms)
Return Insert return followed by as many tabs as the previous line
(with a further adjustment for additional brackets in that line)
Space Select the current word as with double clicking
Enclose the selection in a kind of bracket. Each is a toggle.
(not available on all platforms)
Ctrl-( Enclose within ( and ), or remove enclosing ( and )
Ctrl-[ Enclose within [ and ], or remove enclosing [ and ]
Crtl-{ Enclose within { and }, or remove enclosing { and }
Ctrl-< Enclose within < and >, or remove enclosing < and >
Ctrl-' Enclose within ' and ', or remove enclosing ' and '
Ctrl-"" Enclose within "" and "", or remove enclosing "" and ""
Note also that you can double-click just inside any of the above delimiters,
or at the beginning or end of a line, to select the text enclosed.
Text Emphasis
(not available on all platforms)
Cmd-1 type the first method argument
Cmd-2 type the second method argument
Cmd-3 type the third method argument
Cmd-4 type the fourth method argument
Cmd-5 for future use
Cmd-6 color, action-on-click, link to class comment, link to method, url
Brings up a menu. To remove these properties, select
more than the active part and then use command-0.
Cmd-7 bold
Cmd-8 italic
Cmd-9 narrow (same as negative kern)
Cmd-0 plain text (resets all emphasis)
Cmd-- underlined (toggles it)
Cmd-= struck out (toggles it)
Shift-Cmd-- (aka :=) negative kern (letters 1 pixel closer)
Shift-Cmd-+ positive kern (letters 1 pixel larger spread)
Docking Bar
Ctrl-<n> opens the n-th (where n is between 0 and 7) menu if such exists, otherwise it moves the keyboard focus to the Search Bar. Currently this means:
+ Ctrl-0 Activates Search Bar
Ctrl-1 Squeak menu
Ctrl-2 Projects menu
Ctrl-3 Tools menu
+ Ctrl-4 Apps menu
+ Ctrl-5 Extras menu
+ Ctrl-6 Windows menu
+ Ctrl-7 Help menu
- Ctrl-4 Extras menu
- Ctrl-5 Windows menu
- Ctrl-6 Help menu
- Ctrl-7 Activates Search Bar
"!
Levente Uzonyi uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-ul.395.mcz
==================== Summary ====================
Name: System-ul.395
Author: ul
Time: 23 November 2010, 3:29:08.371 pm
UUID: edf05ab8-4137-db41-b757-0b90a30855f2
Ancestors: System-ul.394
- updated the contents of the keyboard shortcuts
=============== Diff against System-ul.394 ===============
Item was changed:
----- Method: Utilities class>>commandKeyMappings (in category 'support windows') -----
commandKeyMappings
^ (self class firstCommentAt: #commandKeyMappings) translated
"Lower-case command keys
(use with Cmd key on Mac and Alt key on other platforms)
a Select all
b Browse it (selection is a class name or cursor is over a class-list or message-list)
c Copy selection
d Do it (selection is a valid expression)
e Exchange selection with prior selection
f Find
g Find again
h Set selection as search string for find again
i Inspect it (selection is a valid expression, or selection is over an inspect-ilst)
j Again once (do the last text-related operation again)
k Set font
l Cancel
m Implementors of it (selection is a message selector or cursor is over a class-list or message-list)
n Senders of it (selection is a message selector or cursor is over a class-list or message-list)
o Spawn current method
p Print it (selection is a valid expression)
q Query symbol (toggle all possible completion for a given prefix)
r Recognizer
s Save (i.e. accept)
t Finds a Transcript (when cursor is over the desktop)
u Toggle alignment
v Paste
w Delete preceding word (over text); Close-window (over morphic desktop)
x Cut selection
y Swap characters
z Undo
Note: for Do it, Senders of it, etc., a null selection will be expanded to a word or to the current line in an attempt to do what you want. Also note that Senders/Implementors of it will find the outermost keyword selector in a large selection, as when you have selected a bracketed expression or an entire line. Finally note that the same cmd-m and cmd-n (and cmd-v for versions) work in the message pane of most browsers.
Upper-case command keys
(use with Shift-Cmd, or Ctrl on Mac
or Shift-Alt on other platforms; sometimes Ctrl works too)
A Advance argument
B Browse it in this same browser (in System browsers only)
C Compare argument to clipboard
D Duplicate
E Method strings containing it
F Insert 'ifFalse:'
G fileIn from it (a file name)
H cursor TopHome:
I Inspect via Object Explorer
J Again many (apply the previous text command repeatedly until the end of the text)
K Set style
L Outdent (move selection one tab-stop left)
M Select current type-in
N References to it (selection is a class name, or cursor is over a class-list or message-list)
O Open single-message browser (in message lists)
P Make project link
R Indent (move selection one tab-stap right)
S Search
T Insert 'ifTrue:'
U Convert linefeeds to carriage returns in selection
V Paste author's initials
W Selectors containing it (in text); show-world-menu (when issued with cursor over desktop)
X Force selection to lowercase
Y Force selection to uppercase
Z Capitalize all words in selection
Other special keys
Backspace Backward delete character
Del Forward delete character
Shift-Bksp Backward delete word
Shift-Del Forward delete word
Esc Pop up the Desktop Menu
\ Send top window to back
Cursor keys
left, right,
up, down Move cursor left, right, up or down
Ctrl-left Move cursor left one word
Ctrl-right Move cursor right one word
Home Move cursor to begin of line or begin of text
End Move cursor to end of line or end of text
PgUp, Ctrl-up Move cursor up one page
PgDown, Ctrl-Dn Move cursor down one page
Note all these keys can be used together with Shift to define or enlarge the selection. You cannot however shrink that selection again, as in some other systems.
Other Cmd-key combinations (not available on all platforms)
Return Insert return followed by as many tabs as the previous line
(with a further adjustment for additional brackets in that line)
Space Select the current word as with double clicking
Enclose the selection in a kind of bracket. Each is a toggle.
(not available on all platforms)
Ctrl-( Enclose within ( and ), or remove enclosing ( and )
Ctrl-[ Enclose within [ and ], or remove enclosing [ and ]
Crtl-{ Enclose within { and }, or remove enclosing { and }
Ctrl-< Enclose within < and >, or remove enclosing < and >
Ctrl-' Enclose within ' and ', or remove enclosing ' and '
Ctrl-"" Enclose within "" and "", or remove enclosing "" and ""
Note also that you can double-click just inside any of the above delimiters,
or at the beginning or end of a line, to select the text enclosed.
Text Emphasis
(not available on all platforms)
Cmd-1 type the first method argument
Cmd-2 type the second method argument
Cmd-3 type the third method argument
Cmd-4 type the fourth method argument
Cmd-5 for future use
Cmd-6 color, action-on-click, link to class comment, link to method, url
Brings up a menu. To remove these properties, select
more than the active part and then use command-0.
Cmd-7 bold
Cmd-8 italic
Cmd-9 narrow (same as negative kern)
Cmd-0 plain text (resets all emphasis)
Cmd-- underlined (toggles it)
Cmd-= struck out (toggles it)
Shift-Cmd-- (aka :=) negative kern (letters 1 pixel closer)
Shift-Cmd-+ positive kern (letters 1 pixel larger spread)
Docking Bar
Ctrl-<n> opens the n-th (where n is between 0 and 7) menu if such exists, otherwise it moves the keyboard focus to the Search Bar. Currently this means:
+ Ctrl-0 Activates Search Bar
Ctrl-1 Squeak menu
Ctrl-2 Projects menu
Ctrl-3 Tools menu
+ Ctrl-4 Apps menu
+ Ctrl-5 Extras menu
+ Ctrl-6 Windows menu
+ Ctrl-7 Help menu
- Ctrl-4 Extras menu
- Ctrl-5 Windows menu
- Ctrl-6 Help menu
- Ctrl-7 Activates Search Bar
"!