The Trunk: Morphic-mt.1054.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Morphic-mt.1054.mcz

commits-2
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1054.mcz

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

Name: Morphic-mt.1054
Author: mt
Time: 24 November 2015, 9:33:49.122 am
UUID: 878e7207-e241-4d31-83ab-30ad76c71c11
Ancestors: Morphic-mt.1053

Do not create undoable commands everytime we type a separator. Having this, we can do in-place find/replace of sequences with whitespace again such as selecting "first" and replacing it with "at: 1" followed by hitting CTRL+J or CTRL+SHIFT+J to do the replacement again.

Note that commands will still end if the user changes the selection by, for example, moving the text cursor. Or when deleting things via backspace. Or when inserting stuff from the clipboard, or ... just look for senders of #closeTypeIn or #insertAndCloseTypeIn to get the idea.

=============== Diff against Morphic-mt.1053 ===============

Item was changed:
  Editor subclass: #TextEditor
+ instanceVariableNames: 'model paragraph markBlock pointBlock beginTypeInIndex emphasisHere lastParenLocation otherInterval oldInterval typeAhead history'
- instanceVariableNames: 'model paragraph markBlock pointBlock beginTypeInIndex emphasisHere lastParenLocation otherInterval oldInterval typeAhead history previousKeyCharacter'
  classVariableNames: 'AutoEnclose AutoIndent ChangeText FindText'
  poolDictionaries: ''
  category: 'Morphic-Text Support'!
  TextEditor class
  instanceVariableNames: 'cmdActions shiftCmdActions yellowButtonMenu shiftedYellowButtonMenu'!
 
  !TextEditor commentStamp: '<historical>' prior: 0!
  See comment in Editor.
 
  My instances edit Text, this is, they support multiple lines and TextAttributes.
  They have no specific facilities for editing Smalltalk code. Those are found in SmalltalkEditor.!
  TextEditor class
  instanceVariableNames: 'cmdActions shiftCmdActions yellowButtonMenu shiftedYellowButtonMenu'!

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.
 
- "Create a new command for separating characters. Do not create separate commands for consecutive separators."
- ((Character separators includes: typedChar)
- and: [(Character separators includes: previousKeyCharacter) not])
- ifTrue: [self closeTypeIn].
- previousKeyCharacter := typedChar.
-
  "Handle one-line input fields."
  (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].
 
  "Automatically enclose paired characters such as brackets."
  (self class autoEnclose and: [self autoEncloseFor: typedChar])
  ifTrue: [^ true].
 
  self normalCharacter: aKeyboardEvent.
  ^ false!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-mt.1054.mcz

Chris Muller-3
> Do not create undoable commands everytime we type a separator. Having this, we can do in-place find/replace of sequences with whitespace again such as selecting "first" and replacing it with "at: 1" followed by hitting CTRL+J or CTRL+SHIFT+J to do the replacement again.
>
> Note that commands will still end if the user changes the selection by, for example, moving the text cursor. Or when deleting things via backspace. Or when inserting stuff from the clipboard, or

This is an improvement, thanks, but one thing I don't understand is
why this function is tied to the unit-of-Undo..?   Because, in the old
S&R all of the above used to work.

Replacing a selection with [Backspace] is how I handle S&R's in which
I need to simply remove chunks of text.

Also, sometimes the replacement text is a complex String that is very
onerous to type, so pasting from the clipboard must work too.

One more case, in the old S&R, one could be typing the replacement
text and, if a typo occurred, no problem!  Backspace, correct, keep
typing, and the system was amazingly smart enough to do it right.

I don't know how it did it but it was brilliant..

> ... just look for senders of #closeTypeIn or #insertAndCloseTypeIn to get the idea.

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-mt.1054.mcz

marcel.taeumel
It was crap. The old implementation produced nightmares when reading the code. Global state. Many side effects. I think the functionality was accidential at best. --- No puns intended! :)

So you want to also do backspace for in-place find/replace? Puh... let me think...

@all: No, using a time slice for unit-of-undo is not working. It will never please both the slow and the fast typers.

Best,
Marcel
Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-mt.1054.mcz

Tobias Pape

On 25.11.2015, at 10:07, marcel.taeumel <[hidden email]> wrote:

> It was crap. The old implementation produced nightmares when reading the
> code. Global state. Many side effects. I think the functionality was
> accidential at best. --- No puns intended! :)
>
> So you want to also do backspace for in-place find/replace? Puh... let me
> think...
>

Me also want :)

> @all: No, using a time slice for unit-of-undo is not working. It will never
> please both the slow and the fast typers.
>
> Best,
> Marcel
>
>
>
> --
> View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1054-mcz-tp4862936p4863250.html
> Sent from the Squeak - Dev mailing list archive at Nabble.com.
>


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-mt.1054.mcz

Bert Freudenberg
In reply to this post by marcel.taeumel
On 25.11.2015, at 10:07, marcel.taeumel <[hidden email]> wrote:
>
> It was crap. The old implementation produced nightmares when reading the
> code. Global state. Many side effects. I think the functionality was
> accidential at best. --- No puns intended! :)

This code was really old, from a time where code

> So you want to also do backspace for in-place find/replace?

Yep.

> Puh... let me think...
>
> @all: No, using a time slice for unit-of-undo is not working. It will never
> please both the slow and the fast typers.

Agreed. But supporting backspace did not depend on timing - or did I misunderstand you?

- Bert -






smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-mt.1054.mcz

marcel.taeumel
Hi --

I think it's just about how many commands to "do again". I will try looking and the intervals edited to determine the actual find-string and replace-string.

For example: As long as the intervals overlap or are contiguous, we may condense them. This could work.

Best,
Marcel