[squeak-dev] The Inbox: Morphic-Richo.583.mcz
Juan Vuletich
juan at jvuletich.org
Fri Oct 7 19:32:16 UTC 2011
Nicolas Cellier wrote:
> 2011/10/7 Levente Uzonyi <leves at elte.hu>:
>
>> On Thu, 6 Oct 2011, Ricardo Moran wrote:
>>
>>
>>> Hi guys,
>>>
>>> Please review this commit if you have the time. I don't know how many of
>>> you
>>> use OCompletion but this bug is really bothering me a lot, and programming
>>> without #smartCharacters is not as nice :)
>>>
>> These changes revert to the previous version of these methods. While it
>> works with OCompletion, it doesn't work with TextEditor anymore.
>> IMHO it's slightly better if #blinkPrevParen: receives a character, because
>> it doesn't need the KeyboardEvent at all. I wonder why Juan and Nicolas
>> decided to pass the event instead of the character.
>>
>>
>> Levente
>>
>>
>
> Ah good question.
> I didn't review this design decision.
> My goal was more to minimize the differences between Cuis-Squeak-Pharo.
> We should ask Juan. Maybe it was a spirit of homogeneity between all
> such methods: if we pass the event, we can handle shift/control
> modifiers, whether or not this will be used is not our matter as a
> framework.
> But obviously, Cuis doesn't have the same constraints, so afterward,
> this is questionnable.
>
> Nicolas
>
No, it was not on purpose. I guess it was just a historic accident. Just
pass the character. Will do the same in Cuis.
Cheers,
Juan Vuletich
>>> Thanks in advance!
>>> Richo
>>>
>>> On Thu, Oct 6, 2011 at 4:30 PM, <commits at source.squeak.org> wrote:
>>>
>>>
>>>> A new version of Morphic was added to project The Inbox:
>>>> http://source.squeak.org/inbox/Morphic-Richo.583.mcz
>>>>
>>>> ==================== Summary ====================
>>>>
>>>> Name: Morphic-Richo.583
>>>> Author: Richo
>>>> Time: 6 October 2011, 4:29:55.07 pm
>>>> UUID: 4df53f26-036e-3c4a-8a98-af5e787d3ada
>>>> Ancestors: Morphic-ul.582
>>>>
>>>> After installing OCompletion typing any of the following characters ')]}'
>>>> signals an MNU: Character>>#keyCharacter.
>>>>
>>>> This commit seems to fix the problem by making
>>>> SmalltalkEditor>>#blinkPrevParen: always receive a character instead of a
>>>> KeyboardEvent.
>>>>
>>>> I lacked the courage to change TextEditor>>#blinkPrevParen: but I think
>>>> it
>>>> should be changed as well for consistency.
>>>>
>>>> =============== Diff against Morphic-ul.582 ===============
>>>>
>>>> Item was changed:
>>>> ----- Method: SmalltalkEditor>>blinkPrevParen: (in category
>>>> 'parenblinking') -----
>>>> + blinkPrevParen: aCharacter
>>>> - blinkPrevParen: aKeyboardEvent
>>>> "Same as super, but tries to follow the Smalltalk syntax."
>>>>
>
>
>>>> | openDelimiter closeDelimiter level string here inside |
>>>> string := paragraph text string.
>>>> here := pointBlock stringIndex.
>>>> + openDelimiter := aCharacter.
>>>> - openDelimiter := aKeyboardEvent keyCharacter.
>>>> closeDelimiter := '([{' at: (')]}' indexOf: openDelimiter).
>>>> level := 1.
>>>> inside := nil. "Tricky."
>>>> (here > 1 and: [ (string at: here - 1) = $$ ]) ifTrue: [ ^self ].
>>>> "Just a character literal."
>>>> [ level > 0 and: [ here > 1 ] ] whileTrue: [
>>>> | hereChar |
>>>> hereChar := string at: (here := here - 1).
>>>> inside "Are we inside a comment or string literal?"
>>>> ifNotNil: [ "Yes."
>>>> hereChar = inside ifTrue: [
>>>> (here > 1 and: [ (string at: here -
>>>> 1) ~= inside ])
>>>> ifTrue: [ inside := nil ]
>>>> ifFalse: [ here := here - 1
>>>> ] ] ]
>>>> ifNil: [
>>>> (here > 1 and: [ (string at: here - 1) = $$
>>>> ]) "Just a character literal."
>>>> ifTrue: [ here := here - 1 ]
>>>> ifFalse: [
>>>> hereChar
>>>> caseOf: {
>>>> [
>>>> closeDelimiter ] -> [
>>>>
>>>> (level := level - 1) = 0 ifTrue: [
>>>>
>>>> ^self blinkParenAt: here ] ].
>>>> [
>>>> openDelimiter ] -> [ level := level + 1 ].
>>>> [ $" ] -> [
>>>> inside := $" ].
>>>> [ $' ] -> [
>>>> inside := $' ] }
>>>> otherwise: [] ] ]
>>>> ]!
>>>>
>>>> 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 openers closers result |
>>>> (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: [
>>>> aKeyboardEvent keyCharacter = 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 := ')]}'.
>>>> result := self normalCharacter: aKeyboardEvent.
>>>> (closers includes: aKeyboardEvent keyCharacter)
>>>> + ifTrue: [ self blinkPrevParen: aKeyboardEvent
>>>> keyCharacter].
>>>> - ifTrue: [ self blinkPrevParen: aKeyboardEvent ].
>>>> (self class autoEnclose and: [ openers includes: aKeyboardEvent
>>>> keyCharacter ])
>>>> ifTrue: [
>>>> self
>>>> addString: (closers at: (openers indexOf:
>>>> aKeyboardEvent keyCharacter)) asString;
>>>> insertTypeAhead ;
>>>>
>>>> moveCursor: [ :position | position - 1 ]
>>>> forward: false
>>>> select: false ].
>>>> ^ result!
>>>>
>>>>
>>>>
>>>>
>>
>
>
>
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 10.0.1410 / Virus Database: 1520/3943 - Release Date: 10/07/11
>
>
>
>
More information about the Squeak-dev
mailing list
|