The Inbox: Morphic-ct.1717.mcz

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

The Inbox: Morphic-ct.1717.mcz

commits-2
A new version of Morphic was added to project The Inbox:
http://source.squeak.org/inbox/Morphic-ct.1717.mcz

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

Name: Morphic-ct.1717
Author: ct
Time: 24 January 2021, 5:04:52.512273 pm
UUID: c5d26f4c-059d-c54b-8c78-a7c9c06fc6db
Ancestors: Morphic-mt.1710

Editor: Fixes the 9-enclosing bug, the inability to enclose a text into single quotes, and cleans up the #enclose: implementation.

Pressing 9 while some text is selected now con{sist,veni}ently replaces the selection with a 9 as it is usual for every other digit key as well. If you would like to enclose the current selection within brackets, just enter the bracket (i.e. shift + 9 on a qwerty keyboard) as you would do for square brackets, quotes etc. too.

Reuploaded again to replace Morphic-ct.1588, with the following changes applied:
* Removed the entire keyboard-layout specific logic which was only needed for a VM hack from older times and apparently is not needed any longer
* Eliminated Collections-ct.860 dependency, which will not be merged
* Resolved merge conflicts
* Minor refactoring, documentation, and stability improvements to the previous version
* Compressed diff

See also: http://forum.world.st/When-did-it-become-a-good-idea-for-selected-text-to-be-enclosed-by-instead-of-replaced-by-9-td4936276.html | http://forum.world.st/The-Inbox-Morphic-ct-1588-mcz-td5106961.html.

Depends on Collections-ct.921. Please review! I'm really looking forward to see this in a Trunk soon because the Nine Bug bothers me every time I make some experiments in a fresh image ... ;-)

=============== Diff against Morphic-mt.1710 ===============

Item was changed:
  Object subclass: #Editor
  instanceVariableNames: 'morph'
+ classVariableNames: 'BlinkingCursor DestructiveBackWord DumbbellCursor EnclosingCharacterMap KeystrokeActions SelectionsMayShrink'
- classVariableNames: 'BlinkingCursor DestructiveBackWord DumbbellCursor KeystrokeActions SelectionsMayShrink'
  poolDictionaries: ''
  category: 'Morphic-Text Support'!
 
  !Editor commentStamp: 'hjh 9/28/2017 11:37' prior: 0!
  New text editors.
  TextEditor provides most of the functionality that used to be in TextMorphEditor.
  SmalltalkEditor is has Smalltalk code specific features.
  !

Item was added:
+ ----- Method: Editor class>>enclosingCharacterMap (in category 'keyboard shortcut tables') -----
+ enclosingCharacterMap
+ "Maps opening bracket characters to their closing equivalent. Used for encloseSelection preference. See senders."
+
+ ^ EnclosingCharacterMap ifNil: [EnclosingCharacterMap :=
+ Dictionary newFromKeys: '([<{|"''' values: ')]>}|"''']!

Item was added:
+ ----- Method: Editor>>enclosingCharacterFor:ifNone: (in category 'private') -----
+ enclosingCharacterFor: openingCharacter ifNone: aBlock
+
+ ^ self enclosingCharacterMap
+ at: openingCharacter
+ ifAbsent: aBlock!

Item was added:
+ ----- Method: Editor>>enclosingCharacterMap (in category 'accessing') -----
+ enclosingCharacterMap
+
+ ^ self class enclosingCharacterMap!

Item was changed:
  ----- Method: TextEditor>>enclose: (in category 'editing keys') -----
  enclose: aKeyboardEvent
  "Insert or remove bracket characters around the current selection."
 
+ | character left right startIndex stopIndex oldSelection text |
- | character left right startIndex stopIndex oldSelection which t |
- character := aKeyboardEvent shiftPressed
- ifTrue: ['{}|"<>' at: ('[]\'',.' indexOf: aKeyboardEvent keyCharacter) ifAbsent: [aKeyboardEvent keyCharacter]]
- ifFalse: [aKeyboardEvent keyCharacter].
  self closeTypeIn.
+
+ character := aKeyboardEvent keyCharacter.
  startIndex := self startIndex.
  stopIndex := self stopIndex.
  oldSelection := self selection.
+ left := character.
+ right := self enclosingCharacterFor: left ifNone: [^ false].
+
+ text := self text.
+ ((startIndex > 1 and: [stopIndex <= text size])
+ and: [ (text at: startIndex - 1) = left and: [(text at: stopIndex) = right]])
- which := '([<{|"''9' indexOf: character ifAbsent: [ ^ false ].
- "Allow Control key in lieu of Alt+Shift for (, {, and double-quote."
- left := ((Preferences cmdKeysInText and: [ aKeyboardEvent controlKeyPressed ])
- ifTrue: [ '({<{|""(' ]
- ifFalse: ['([<{|"''(']) at: which.
- right := ((Preferences cmdKeysInText and: [ aKeyboardEvent controlKeyPressed ])
- ifTrue: [ ')}>}|"")' ]
- ifFalse: [')]>}|"'')']) at: which.
- t := self text.
- ((startIndex > 1 and: [stopIndex <= t size])
- and: [ (t at: startIndex-1) = left and: [(t at: stopIndex) = right]])
  ifTrue:
  ["already enclosed; strip off brackets"
  self selectFrom: startIndex-1 to: stopIndex.
  self replaceSelectionWith: oldSelection]
  ifFalse:
  ["not enclosed; enclose by matching brackets"
  self replaceSelectionWith:
  (Text string: (String with: left), oldSelection string, (String with: right) attributes: emphasisHere).
  self selectFrom: startIndex+1 to: stopIndex].
  ^true!