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

Stéphane Rollandin lecteur at zogotounga.net
Tue May 19 13:20:05 UTC 2015


> It seems that "Auto Enclose" is not honored correctly. It is disabled in my
> image but still seems to be enabled. :-(
>
> Try typing "()" then move the cursor between the parentheses and type the
> closing one again. You will not end up with to closing ones...

Yes, I noticed that also, and it bothered me enough that I fixed it by 
modifying TextEditor>> #dispatchOnKeyboardEvent: as follow:

----------------------------------------------

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 openers closers result typedChar |
	((typedChar := aKeyboardEvent keyCharacter) == Character cr and: [ 
morph acceptOnCR ]) ifTrue:
		[ self closeTypeIn.
		^ true ].
	self clearParens.
	aKeyboardEvent keyValue = 13 ifTrue:
		[ aKeyboardEvent controlKeyPressed ifTrue: [ ^ self normalCharacter: 
aKeyboardEvent ].
		aKeyboardEvent shiftPressed ifTrue: [ ^ self lf: aKeyboardEvent ].
		aKeyboardEvent commandKeyPressed ifTrue: [ ^ self crlf: aKeyboardEvent ].
		^ self crWithIndent: aKeyboardEvent ].
	((honorCommandKeys := Preferences cmdKeysInText) 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 ].
	openers := '([{'.
	closers := ')]}'.
	(closers includes: typedChar)
		ifTrue:
			[ self blinkPrevParen: typedChar.
			(self class autoEnclose and: [self nextNonwhitespaceCharacter = 
typedChar])
				ifTrue:
					[ self moveCursor: [ : position | position + 1 ] forward: true 
select: false.
					^ false ]
				ifFalse: [ result := self normalCharacter: aKeyboardEvent ] ]
		ifFalse: [ result := self normalCharacter: aKeyboardEvent ].
	(self class autoEnclose and: [ openers includes: typedChar ]) ifTrue:
		[ self
			 addString: (closers at: (openers indexOf: typedChar)) asString ;
			 insertTypeAhead ;
			
			moveCursor:
				[ : position | position - 1 ]
			forward: false
			select: false ].
	^ result


----------------------------------------------

It looks like a correct fix to me.

Best,

Stef




More information about the Squeak-dev mailing list