[squeak-dev] The Trunk: Morphic-cmm.1052.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Nov 21 17:23:58 UTC 2015


Chris Muller uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-cmm.1052.mcz

==================== Summary ====================

Name: Morphic-cmm.1052
Author: cmm
Time: 21 November 2015, 11:23:10.034 am
UUID: 984e80fd-459b-467b-b350-bff00bb77b60
Ancestors: Morphic-mt.1051

- Restore the use-case "Replace Expression With A New Expression" (e.g., fix autoEnclose).
	"Connect Existing Expression To A New Expression" is already present via the Command key.
	We need to support both of those use cases.

=============== Diff against Morphic-mt.1051 ===============

Item was changed:
  ----- Method: TextEditor>>autoEncloseFor: (in category 'typing support') -----
  autoEncloseFor: typedChar 
  	"Answer whether typeChar was handled by auto-enclosure.  Caller should call normalCharacter if not."
  	| openers closers |
  	openers := '([{'.
  	closers := ')]}'.
  	(closers includes: typedChar) ifTrue:
  		[ | pos |
  		self blinkPrevParen: typedChar.
  		((pos := self indexOfNextNonwhitespaceCharacter) notNil and: [ (paragraph string at: pos) = typedChar ])
  			ifTrue:
  				[ self
  					moveCursor: [ : position | position + pos - pointBlock stringIndex + 1 ]
  					forward: true
  					select: false.
  				^ true ]
  			ifFalse: [ ^ false ] ].
+ 	(self class autoEnclose and: [ openers includes: typedChar ]) ifTrue:
+ 		[ self
+ 			 addString: (closers at: (openers indexOf: typedChar)) asString ;
+ 			 insertTypeAhead ;
- 	(openers includes: typedChar) ifTrue: [
- 		self
- 			openTypeIn;
- 			addString: typedChar asString;
- 			addString: (closers at: (openers indexOf: typedChar)) asString ;
- 			insertAndCloseTypeIn ;
  			
  			moveCursor: [ : position | position - 1 ]
  			forward: false
  			select: false.
+ 		^ false ].
- 		^ true ].
  	^ false!

Item was changed:
  ----- Method: TextEditor>>dispatchOnKeyboardEvent: (in category 'typing support') -----
  dispatchOnKeyboardEvent: aKeyboardEvent 
  	"Carry out the action associated with this character, if any. Type-ahead is passed so some routines can flush or use it."
  	
  	| honorCommandKeys typedChar |
  	typedChar := aKeyboardEvent keyCharacter.
  	
  	"Create a new command for separating characters. Do not create separate commands for consecutive separators."
  	((Character separators includes: typedChar)
  		and: [(Character separators includes: previousKeyCharacter) not])
  			ifTrue: [self closeTypeIn].
  	previousKeyCharacter := typedChar.
  	
  	"Handle one-line input fields."
  	(typedChar == Character cr and: [morph acceptOnCR])
  		ifTrue: [^ true].
  	
  	"Clear highlight for last opened parenthesis."
  	self clearParens.
  	
  	"Handle line breaks and auto indent."
  	typedChar == Character cr ifTrue: [
  		aKeyboardEvent controlKeyPressed
  			ifTrue: [^ self normalCharacter: aKeyboardEvent].
  		aKeyboardEvent shiftPressed
  			ifTrue: [^ self lf: aKeyboardEvent].
  		aKeyboardEvent commandKeyPressed
  			ifTrue: [^ self crlf: aKeyboardEvent].
  		^ self crWithIndent: aKeyboardEvent].
  
  	"Handle indent/outdent with selected text block."
  	typedChar == Character tab ifTrue: [
  		aKeyboardEvent shiftPressed
  			ifTrue: [self outdent: aKeyboardEvent. ^ true]
  			ifFalse: [self hasMultipleLinesSelected
  				ifTrue: [self indent: aKeyboardEvent. ^ true]]].
  
  	honorCommandKeys := Preferences cmdKeysInText.
  
  	(honorCommandKeys and: [typedChar == Character enter])
  		ifTrue: [^ self dispatchOnEnterWith: aKeyboardEvent].
  	
  	"Special keys overwrite crtl+key combinations - at least on Windows. To resolve this
  	conflict, assume that keys other than cursor keys aren't used together with Crtl."
  	((self class specialShiftCmdKeys includes: aKeyboardEvent keyValue)
  		and: [aKeyboardEvent keyValue < 27])
  			ifTrue: [^ aKeyboardEvent controlKeyPressed
  				ifTrue: [self
  							perform: (self class shiftCmdActions at: aKeyboardEvent keyValue + 1)
  							with: aKeyboardEvent]
  				ifFalse: [self
  							perform: (self class cmdActions at: aKeyboardEvent keyValue + 1)
  							with: aKeyboardEvent]].
  			
  	"backspace, and escape keys (ascii 8 and 27) are command keys"
  	((honorCommandKeys and: [aKeyboardEvent commandKeyPressed])
  		or: [self class specialShiftCmdKeys includes: aKeyboardEvent keyValue])
  			ifTrue: [ ^ aKeyboardEvent shiftPressed
  				ifTrue: [self
  							perform: (self class shiftCmdActions at: aKeyboardEvent keyValue + 1)
  							with: aKeyboardEvent]
  				ifFalse: [self
  							perform: (self class cmdActions at: aKeyboardEvent keyValue + 1)
  							with: aKeyboardEvent]].
  
  	"the control key can be used to invoke shift-cmd shortcuts"
  	(honorCommandKeys and: [ aKeyboardEvent controlKeyPressed ])
  		ifTrue: [^ self
  					perform: (self class shiftCmdActions at: aKeyboardEvent keyValue + 1)
  					with: aKeyboardEvent].
  
- 	"Automatically enclose paired characters such as brackets."
  	self class autoEnclose
+ 		ifTrue:
+ 			[ (self autoEncloseFor: typedChar) ifFalse: [ self normalCharacter: aKeyboardEvent ] ]
+ 		ifFalse: [ self normalCharacter: aKeyboardEvent ].
+ 
- 		ifTrue: [((self hasSelection and: [self enclose: aKeyboardEvent])
- 			or: [self autoEncloseFor: typedChar])
- 				ifTrue: [^ true]].
- 					
- 	self normalCharacter: aKeyboardEvent.
  	^ false!



More information about the Squeak-dev mailing list