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

Levente Uzonyi leves at elte.hu
Fri May 29 18:45:44 UTC 2015


The code is also broken, when Auto Enclose is enabled. The cause of the 
problem is that code ignores the number of whitespace characters. If you 
open a workspace and type the following line:

      ] "five spaces and a closing bracket"

and move the cursor to the beginning of the line, then you have to press ] 
seven times to make another closing bracket appear.

Levente

On Thu, 28 May 2015, karl ramberg wrote:

>
>   Stéphane Rollandins fix should be in the release image.
> 
> That bug is really annoying
> 
> Karl
> 
> On Tue, May 19, 2015 at 3:20 PM, Stéphane Rollandin <lecteur at zogotounga.net> wrote:
>             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