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!
Thank you!
On Wed, Jun 8, 2022 at 2:50 AM commits@source.squeak.org wrote:
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'
TextEditor class instanceVariableNames: 'cmdActions shiftCmdActionspoolDictionaries: '' category: 'Morphic-Text Support'!
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!
squeak-dev@lists.squeakfoundation.org