[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
|