[squeak-dev] The Trunk: Morphic-mt.2000.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Jun 8 07:50:14 UTC 2022


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

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

Name: Morphic-mt.2000
Author: mt
Time: 8 June 2022, 9:50:09.755722 am
UUID: f8f15bbc-3ee5-a04e-b53e-79771cc03972
Ancestors: Morphic-mt.1999

Tweak the preference "Legacy keyboard shortcuts (US/UK only)" to really have the old behavior, which is bracket-toggling for, e.g., CMD+SHIFT+9.

Note that that preference is disabled by default and only makes sense for US/UK keyboard layouts.

See http://lists.squeakfoundation.org/pipermail/squeak-dev/2022-June/220859.html

=============== Diff against Morphic-mt.1999 ===============

Item was changed:
  Editor subclass: #TextEditor
  	instanceVariableNames: 'model paragraph markBlock pointBlock beginTypeInIndex emphasisHere lastParenLocation otherInterval oldInterval typeAhead history'
  	classVariableNames: 'AutoEnclose AutoIndent ChangeText EncloseSelection FindText InteractivePrintIt'
+ 	poolDictionaries: 'LegacyShortcutsFilter'
- 	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>>enclose: (in category 'editing keys') -----
  enclose: aKeyboardEvent
- 	"Insert or remove bracket characters around the current selection."
  
+ 	^ self enclose: aKeyboardEvent toggleOnly: LegacyShortcutsEnabled == true!
- 	| character left right startIndex stopIndex oldSelection which closingBracket t |
- 	character := aKeyboardEvent keyCharacter.
- 	self closeTypeIn.
- 	startIndex := self startIndex.
- 	stopIndex := self stopIndex.
- 	oldSelection := self selection.
- 	closingBracket := false.
- 	which := '([<{|"''' indexOf: character ifAbsent: [
- 			closingBracket := true.
- 			')]>}|"''' indexOf: character ifAbsent: [ ^ false ]].
- 	left := '([<{|"''' at: which.
- 	right := ')]>}|"''' at: which.
- 	t := self text.
- 	((startIndex > 1 and: [stopIndex <= t size])
- 			and: [ (t at: startIndex-1) = left and: [(t at: stopIndex) = right]]
- 			and: [ closingBracket or: [left = right] ])
- 		ifTrue:
- 			["already enclosed and character is a closing bracket; strip off brackets"
- 			self selectFrom: startIndex-1 to: stopIndex.
- 			self replaceSelectionWith: oldSelection]
- 		ifFalse:
- 			["not enclosed or character is an opening bracket; enclose by matching brackets"
- 			closingBracket ifTrue: [ ^ false ] ifFalse:
- 			[ self replaceSelectionWith:
- 				(Text string: (String with: left), oldSelection string, (String with: right) attributes: emphasisHere).
- 			self selectFrom: startIndex+1 to: stopIndex] ].
- 	^true!

Item was added:
+ ----- Method: TextEditor>>enclose:toggleOnly: (in category 'editing keys') -----
+ enclose: aKeyboardEvent toggleOnly: toggleOnly
+ 	"Insert or remove bracket characters around the current selection. An opening
+ 	bracket will add a level, a closing one will remove a level. If there is no level to
+ 	remove, the current text selection will be replaced with that closing bracket. If
+ 	both opening and closing characters are identical, only one level is possible and
+ 	both states are toggled by repeated invocation. If toggleOnly is set, that also
+ 	happens for all asymmetrical characters."
+ 
+ 	| character left right startIndex stopIndex oldSelection which closingBracket t |
+ 	character := aKeyboardEvent keyCharacter.
+ 	self closeTypeIn.
+ 	startIndex := self startIndex.
+ 	stopIndex := self stopIndex.
+ 	oldSelection := self selection.
+ 	closingBracket := false.
+ 	which := '([<{|"''' indexOf: character ifAbsent: [
+ 			closingBracket := true.
+ 			')]>}|"''' indexOf: character ifAbsent: [ ^ false ]].
+ 	left := '([<{|"''' at: which.
+ 	right := ')]>}|"''' at: which.
+ 	t := self text.
+ 	((startIndex > 1 and: [stopIndex <= t size])
+ 			and: [ (t at: startIndex-1) = left and: [(t at: stopIndex) = right]]
+ 			and: [ closingBracket or: [left = right] or: [toggleOnly] ])
+ 		ifTrue:
+ 			["already enclosed and character is a closing bracket; strip off brackets"
+ 			self selectFrom: startIndex-1 to: stopIndex.
+ 			self replaceSelectionWith: oldSelection]
+ 		ifFalse:
+ 			["not enclosed or character is an opening bracket; enclose by matching brackets"
+ 			closingBracket ifTrue: [ ^ false ] ifFalse:
+ 			[ self replaceSelectionWith:
+ 				(Text string: (String with: left), oldSelection string, (String with: right) attributes: emphasisHere).
+ 			self selectFrom: startIndex+1 to: stopIndex] ].
+ 	^true!



More information about the Squeak-dev mailing list