[squeak-dev] The Inbox: Morphic-ct.1621.mcz

Thiede, Christoph Christoph.Thiede at student.hpi.uni-potsdam.de
Wed Jan 22 10:25:55 UTC 2020

The "Character lf" hack works on Windows, but I'm not sure if this behavior is officially defined by the VM. I don't know how one could detect Ctrl + Enter else ...

If you see any problems with solving this issue directly in TextMorph/Editor, we could also handle the event in FillInTheBlankMorph.


Von: Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im Auftrag von commits at source.squeak.org <commits at source.squeak.org>
Gesendet: Mittwoch, 22. Januar 2020 11:21 Uhr
An: squeak-dev at lists.squeakfoundation.org
Betreff: [squeak-dev] The Inbox: Morphic-ct.1621.mcz

Christoph Thiede uploaded a new version of Morphic to project The Inbox:

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

Name: Morphic-ct.1621
Author: ct
Time: 22 January 2020, 11:21:19.533972 am
UUID: facc9fb6-e535-c04f-967c-5f2ae09733c6
Ancestors: Morphic-cmm.1618

Proposal: Use Ctrl + Enter to accept in every textmorph, even if acceptOnCR is disabled. Useful, for example, to answer a multiline request.

=============== Diff against Morphic-cmm.1618 ===============

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.

         "Handle one-line input fields."
+        (typedChar == Character lf or: [typedChar == Character cr and: [morph acceptOnCR]])
-        (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].

         "Enclose selection with brackets etc."
         ((self class encloseSelection and: [self hasSelection]) and: [self enclose: aKeyboardEvent])
                 ifTrue: [^ true].

         "Automatically enclose paired characters such as brackets."
         (self class autoEnclose and: [self autoEncloseFor: typedChar])
                 ifTrue: [^ true].

         "Even if no enclosing feature was used, highlight the matching bracket when closing one."
         (')]}' includes: typedChar)
                 ifTrue: [self blinkPrevParen: typedChar].

         self normalCharacter: aKeyboardEvent.
         ^ false!

Item was changed:
  ----- Method: TextMorphForEditView>>keyStroke: (in category 'event handling') -----
  keyStroke: evt
         | view |

         editView deleteBalloon.
         self editor model: editView model.  "For evaluateSelection"
         view := editView.  "Copy into temp for case of a self-mutating doit"
+        (evt keyCharacter = Character lf or: [acceptOnCR and: [evt keyCharacter = Character cr]])
-        (acceptOnCR and: [evt keyCharacter = Character cr])
                 ifTrue: [^ self editor accept].

         view hasUserEdited: false.
         super keyStroke: evt.
         view scrollSelectionIntoView.

         view hasUserEdited
                 ifTrue: [       view textEdited: self contents].!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200122/4943f16c/attachment.html>

More information about the Squeak-dev mailing list