From lewis at mail.msen.com Sun Nov 1 15:28:19 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Nov 1 15:28:20 2015 Subject: [squeak-dev] Storing objects in Monticello (was: The Trunk: Morphic-kfr.1022.mcz) In-Reply-To: <1446307242067-4858794.post@n4.nabble.com> References: <1446190945320-4858595.post@n4.nabble.com> <1446307242067-4858794.post@n4.nabble.com> Message-ID: <20151101152819.GA66207@shell.msen.com> On Sat, Oct 31, 2015 at 09:00:42AM -0700, marcel.taeumel wrote: > Nice. :) > > We might want to think about Monticello and Code from time to time. At the > moment, there is no feasible way to version real objects (morphs etc.) with > it. [Which is not a limitation of MCZ files storing binary versions of > MCMethodAddtions already in the snapshot.bin] > Edgar De Cleene has provided a working implementation that is worth review. The changes would need to be merged into trunk, but that should not be hard to do. The MCZ with Edgar's changes is Monticello-edc.534.mcz in the repository http://www.squeaksource.com/Ladrillos. Edgar also provided a video that shows how use this to load an MCZ with resources for a morphic puzzle, similar to the way this might otherwise be done with a SAR archive. https://www.youtube.com/watch?v=EZucdZZCdYY&feature=youtu.be The original discussion of this was in the 'Updating SAR builder tool' thread on squeak-dev last August. http://lists.squeakfoundation.org/pipermail/squeak-dev/2015-August/185739.html I tried this myself in a 5.0 image and it worked well. Unfortunately I didn't find the time to follow up by extracting the changes and putting them into the inbox, which I guess would be the best way to proceed if we have an interest in this approach. Dave From commits at source.squeak.org Sun Nov 1 20:20:51 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Nov 1 20:20:53 2015 Subject: [squeak-dev] The Trunk: Morphic-kfr.1023.mcz Message-ID: Karl Ramberg uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-kfr.1023.mcz ==================== Summary ==================== Name: Morphic-kfr.1023 Author: kfr Time: 1 November 2015, 9:20:03.104 pm UUID: 3f59454c-b3fb-44ac-a78a-29c653670044 Ancestors: Morphic-kfr.1022 Adding a code pane for reading/editing of the color ramp =============== Diff against Morphic-kfr.1022 =============== Item was changed: ----- Method: GradientEditor>>addHandles (in category 'change reporting') ----- addHandles | handle colorRamp | rampMorphs := OrderedCollection new. + colorRamp := gradientDisplay colorRamp asOrderedCollection. - colorRamp := self gradientDisplay colorRamp asOrderedCollection. handle := self handle. colorRamp do: [:i | self addHandleForColor: i value position: i key ]. self changed.! Item was changed: ----- Method: GradientEditor>>colorRamp (in category 'accessing') ----- colorRamp + ^gradientDisplay fillStyle colorRamp asArray printString. + ! - | i string | - string := gradientDisplay fillStyle colorRamp asOrderedCollection printString. - i := string indexOf:$(. - ^string copyFrom: i to: string size! Item was changed: ----- Method: GradientEditor>>colorRamp: (in category 'accessing') ----- colorRamp: aColorRamp - - "rampMorphs do:[ :i | rampMorphs remove:i. row removeMorph: i . ]. - self changed." gradientDisplay colorRamp: aColorRamp. + self changed: #colorRamp. + self changed + - self addHandles. ! Item was added: + ----- Method: GradientEditor>>colorRampExpression: (in category 'accessing') ----- + colorRampExpression: aString + "Set my color by evaluating aString, a Smalltalk expression which results in a Color instance." + | col | + + {aString.} + detect: + [ : each | ([ col := Compiler evaluate: each ] + on: Error + do: + [ : err | nil ]) notNil ] + ifNone: [ nil ]. + col ifNotNil: [ self colorRamp: col. + rampMorphs do:[ :each| each delete]. + self addHandles; updateColorRamp. ]! Item was added: + ----- Method: GradientEditor>>colorRampExpressionMorph (in category 'initialization') ----- + colorRampExpressionMorph + | inputField builder | + builder := ToolBuilder default. + inputField := (builder build: (builder pluggableInputFieldSpec new + model: self; + getText: #colorRamp; + setText: #colorRampExpression:; + softLineWrap: true)). + inputField + hResizing: #spaceFill ; + vResizing: #spaceFill ; + + height: (Preferences standardDefaultTextFont height * 3/2). + ^ inputField! Item was changed: ----- Method: GradientEditor>>eventHandler:target: (in category 'event handling') ----- + eventHandler: anInstance target: aTarget + (anInstance isKindOf: SketchMorph) + ifTrue: [anInstance + on: #mouseUp - eventHandler: anInstance target: aTarget - (anInstance isKindOf: SketchMorph) - ifTrue:[anInstance on: #mouseUp send: #changeColor:event:target: + to: self + withValue: aTarget] + ifFalse: [anInstance + on: #mouseDown - to: self withValue: aTarget] - ifFalse:[anInstance on: #mouseDown send: #limitHandleMove:event:from: + to: self + withValue: aTarget. + anInstance + on: #mouseMove - to: self withValue: aTarget. - anInstance on: #mouseMove send: #limitHandleMove:event:from: + to: self + withValue: aTarget]! - to: self withValue: aTarget]! Item was removed: - ----- Method: GradientEditor>>gradientDisplay (in category 'accessing') ----- - gradientDisplay - ^gradientDisplay! Item was changed: ----- Method: GradientEditor>>handle (in category 'initialization') ----- handle + | handle | + handle := PolygonMorph - | handle | - handle := PolygonMorph vertices: (Array with: 0 @ 0 with: 16 @ 0 with: 8 @ 16) + color: Color white darker - color: (Color white darker) borderWidth: 1 borderColor: Color black. + ^ handle - ^handle addMorph: ((RectangleMorph newBounds: (8 @ 18 extent: 1 @ (gradientDisplay height - 2)) color: Color orange) + borderWidth: 0)! - borderWidth: 0).! Item was changed: ----- Method: GradientEditor>>initialize (in category 'initialization') ----- initialize - super initialize. self myLayout. + self extent: 500 @ 200. + row := RectangleMorph new extent: self width @ 100; + color: Color transparent; + borderColor: #inset. - self extent: 600 @ 150. - row := RectangleMorph new extent: self width @ 100; color: Color transparent; borderColor: #inset. - row addMorph: (gradientDisplay := GradientDisplayMorph new position: 20 @ 20; extent: self width - 40 @ 40). gradientDisplay fillStyle direction: gradientDisplay width @ 0. - self addMorph: row. self addButtonRow. + self addMorph: self colorRampExpressionMorph! - "text := PluggableTextMorph - on: self - text: #colorRamp - accept: nil - readSelection: nil - menu: nil. - text color: Color white; - width: self width; - height: 50. - self addMorph: text." - ! Item was changed: ----- Method: GradientEditor>>setTarget:selector:forMorph:colorRamp: (in category 'initialization') ----- setTarget: aTarget selector: aSelector forMorph:aMorph colorRamp: aColorRamp + self target: aTarget; selector: aSelector; morph: aMorph; colorRamp: aColorRamp; addHandles - self target: aTarget. - self selector: aSelector. - self morph: aMorph. - self colorRamp: aColorRamp. ! Item was changed: ----- Method: GradientEditor>>updateColorRamp (in category 'change reporting') ----- updateColorRamp | newAssociation newKey newColor sketch colorRamp | self updateRampMorphs. colorRamp := OrderedCollection new. rampMorphs do: [:i | newKey := ((i position x - gradientDisplay left / gradientDisplay width) asFloat roundUpTo: 0.01) min: 1.0 max: 0.0. sketch := i findA: SketchMorph. newColor := sketch rotatedForm colorAt: sketch rotatedForm center. newAssociation := newKey -> newColor. colorRamp addLast: newAssociation]. colorRamp := colorRamp sorted. gradientDisplay colorRamp: colorRamp. gradientDisplay fillStyle direction: gradientDisplay extent x @ 0. self changed. target ifNotNil:[ target perform: selector with: colorRamp with: morph]. + self changed: #colorRamp! - "text setText: self colorRamp"! From commits at source.squeak.org Sun Nov 1 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Nov 1 22:55:06 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151101225502.18721.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009089.html Name: Morphic-kfr.1023 Ancestors: Morphic-kfr.1022 Adding a code pane for reading/editing of the color ramp ============================================= From commits at source.squeak.org Mon Nov 2 00:02:40 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 00:02:42 2015 Subject: [squeak-dev] The Trunk: Network-ul.167.mcz Message-ID: Levente Uzonyi uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-ul.167.mcz ==================== Summary ==================== Name: Network-ul.167 Author: ul Time: 2 November 2015, 2:02:21.822 am UUID: cc1e8b01-d960-40ff-b466-54e7bcb73cb7 Ancestors: Network-topa.166 Now that #primMakeUUID is not being used anymore, we can change its behaviour to return nil when the plugin is not available. Added accessors for UUID variant and version. =============== Diff against Network-topa.166 =============== Item was changed: ----- Method: UUID>>primMakeUUID (in category 'system primitives') ----- primMakeUUID + + ^nil! - self makeUUID! Item was added: + ----- Method: UUID>>variant (in category 'accessing') ----- + variant + + ^(self at: 9) bitShift: -6! Item was added: + ----- Method: UUID>>version (in category 'accessing') ----- + version + + ^(self at: 7) bitShift: -4! From commits at source.squeak.org Mon Nov 2 00:03:16 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 00:03:18 2015 Subject: [squeak-dev] The Trunk: Collections-ul.669.mcz Message-ID: Levente Uzonyi uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-ul.669.mcz ==================== Summary ==================== Name: Collections-ul.669 Author: ul Time: 2 November 2015, 2:00:09.732 am UUID: 01e30af9-3dd4-4b5e-ab40-89ce43884565 Ancestors: Collections-ul.668 Changed Set >> #= and Dictionary >> #= to check the species of the receiver and the argument. PluggableDictionary and PluggableSet also check hashBlock and equalBlock. WeakSet and friends will work once we start using ephemerons. =============== Diff against Collections-ul.668 =============== Item was changed: ----- Method: Dictionary>>= (in category 'comparing') ----- = anObject "Two dictionaries are equal if (a) they are the same 'kind' of thing. (b) they have the same set of keys. (c) for each (common) key, they have the same value" self == anObject ifTrue: [ ^true ]. + self species == anObject species ifFalse: [ ^false ]. - anObject isDictionary ifFalse: [ ^false ]. self size = anObject size ifFalse: [ ^false ]. self associationsDo: [ :association | (anObject at: association key ifAbsent: [ ^false ]) = association value ifFalse: [ ^false ] ]. - "The two dictionaries may have different ideas about equal keys, so check both ways to avoid any inconsistency." - anObject associationsDo: [ :association | - (self at: association key ifAbsent: [ ^false ]) = association value - ifFalse: [ ^false ] ]. ^true! Item was added: + ----- Method: PluggableDictionary>>= (in category 'comparing') ----- + = anObject + "Two dictionaries are equal if + (a) they are the same 'kind' of thing. + (b) they have the same set of keys. + (c) for each (common) key, they have the same value" + + self == anObject ifTrue: [ ^true ]. + self species == anObject species ifFalse: [ ^false ]. + hashBlock = anObject hashBlock ifFalse: [ ^false ]. + equalBlock = anObject equalBlock ifFalse: [ ^false ]. + self size = anObject size ifFalse: [ ^false ]. + self associationsDo: [ :association | + (anObject at: association key ifAbsent: [ ^false ]) = association value + ifFalse: [ ^false ] ]. + ^true! Item was added: + ----- Method: PluggableSet>>= (in category 'as yet unclassified') ----- + = anObject + "Two sets are equal if + (a) they are the same 'kind' of thing. + (b) they have the same set of keys. + (c) for each (common) key, they have the same value" + + self == anObject ifTrue: [ ^true ]. + self species == anObject species ifFalse: [ ^false ]. + hashBlock = anObject hashBlock ifFalse: [ ^false ]. + equalBlock = anObject equalBlock ifFalse: [ ^false ]. + self size = anObject size ifFalse: [ ^false ]. + ^self allSatisfy: [ :each | anObject includes: each ]! Item was changed: ----- Method: Set>>= (in category 'comparing') ----- + = anObject + "Two sets are equal if + (a) they are the same 'kind' of thing. + (b) they have the same set of keys. + (c) for each (common) key, they have the same value" + + self == anObject ifTrue: [ ^true ]. + self species == anObject species ifFalse: [ ^false ]. + self size = anObject size ifFalse: [ ^false ]. + ^self allSatisfy: [ :each | anObject includes: each ]! - = aSet - self == aSet ifTrue: [^ true]. "stop recursion" - (aSet isKindOf: Set) ifFalse: [^ false]. - self size = aSet size ifFalse: [^ false]. - self do: [:each | (aSet includes: each) ifFalse: [^ false]]. - ^ true! From commits at source.squeak.org Mon Nov 2 01:58:23 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 01:58:26 2015 Subject: [squeak-dev] The Trunk: KernelTests-ul.299.mcz Message-ID: Levente Uzonyi uploaded a new version of KernelTests to project The Trunk: http://source.squeak.org/trunk/KernelTests-ul.299.mcz ==================== Summary ==================== Name: KernelTests-ul.299 Author: ul Time: 2 November 2015, 3:58:12.772 am UUID: 03be01bc-e815-42ed-be0b-dde3d1fc603a Ancestors: KernelTests-nice.298 - fixed typo =============== Diff against KernelTests-nice.298 =============== Item was changed: ----- Method: SmallIntegerTest>>testPrintString (in category 'testing - printing') ----- testPrintString self assert: 1 printString = '1'. self assert: -1 printString = '-1'. self assert: SmallInteger minVal printString = (Smalltalk wordSize = 8 ifTrue: [ '-1152921504606846976'] ifFalse: ['-1073741824']). + self assert: SmallInteger maxVal printString = (Smalltalk wordSize = 8 ifTrue: [ '1152921504606846975'] ifFalse: ['1073741823']). - self assert: SmallInteger maxVal printString = (Smalltalk wordSize = 8 ifTrue: [ '1152921504606846975'] ifFalse: ['-1073741823']). self assert: 12345 printString = '12345'. self assert: -54321 printString = '-54321'. self assert: 0 decimalDigitLength = 1. self assert: 4 decimalDigitLength = 1. self assert: 12 decimalDigitLength = 2. self assert: 123 decimalDigitLength = 3. self assert: 1234 decimalDigitLength = 4. self assert: 56789 decimalDigitLength = 5. self assert: 657483 decimalDigitLength = 6. self assert: 6571483 decimalDigitLength = 7. self assert: 65174383 decimalDigitLength = 8. self assert: 625744831 decimalDigitLength = 9. self assert: 1000001111 decimalDigitLength = 10. self assert: SmallInteger maxVal decimalDigitLength = (Smalltalk wordSize = 8 ifTrue: [19] ifFalse: [10]).! From commits at source.squeak.org Mon Nov 2 02:10:42 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 02:10:44 2015 Subject: [squeak-dev] The Trunk: CollectionsTests-ul.256.mcz Message-ID: Levente Uzonyi uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-ul.256.mcz ==================== Summary ==================== Name: CollectionsTests-ul.256 Author: ul Time: 2 November 2015, 4:10:24.284 am UUID: 3605a07c-4484-44ae-ba91-f5be4d7da842 Ancestors: CollectionsTests-nice.255 Set >> #collect: returns a Set, so compare the result of it with a Set in SetWithNilTest >> #runSetWithNilTestOf:. =============== Diff against CollectionsTests-nice.255 =============== Item was changed: ----- Method: SetWithNilTest>>runSetWithNilTestOf: (in category 'tests') ----- runSetWithNilTestOf: newSet "Run the common tests for the given set class" self assert: (newSet value add: nil; yourself) size = 1. self assert: (newSet value addAll: #(nil nil nil); yourself) size = 1. self assert: ((newSet value add: nil; yourself) includes: nil). self assert: ((newSet value addAll: #(nil nil nil); yourself) includes: nil). self assert: (newSet value add: nil; yourself) anyOne = nil. self assert: ((newSet value add: nil; yourself) remove: nil) == nil. self assert: ((newSet value add: nil; yourself) remove: nil; yourself) isEmpty. self assert: (newSet value addAll: #(1 nil foo); yourself) size = 3. self assert: ((newSet value addAll: #(1 nil foo); yourself) remove: nil; yourself) size = 2. + self assert: ((newSet value add: nil; yourself) collect:[:x| x]) = (Set with: nil). - self assert: ((newSet value add: nil; yourself) collect:[:x| x]) = (newSet value add: nil; yourself). self assert: ((newSet value add: nil; yourself) collect:[:x| x] as: Array) = #(nil). self deny: ((newSet value) includes: nil). self deny: ((newSet value add: 3; yourself) includes: nil). self deny: ((newSet value add: 3; remove: 3; yourself) includes: nil). ! From commits at source.squeak.org Mon Nov 2 02:52:55 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 02:52:56 2015 Subject: [squeak-dev] The Trunk: CollectionsTests-ul.257.mcz Message-ID: Levente Uzonyi uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-ul.257.mcz ==================== Summary ==================== Name: CollectionsTests-ul.257 Author: ul Time: 2 November 2015, 4:52:42.874 am UUID: d6f5337b-2240-4afd-974b-21358e2f00b0 Ancestors: CollectionsTests-ul.256 WeakSet is an exception. =============== Diff against CollectionsTests-ul.256 =============== Item was changed: ----- Method: SetWithNilTest>>runSetWithNilTestOf: (in category 'tests') ----- runSetWithNilTestOf: newSet "Run the common tests for the given set class" + + | class collectClass | + class := newSet value class. + collectClass := class == WeakSet + ifTrue: [ WeakSet ] + ifFalse: [ Set ]. self assert: (newSet value add: nil; yourself) size = 1. self assert: (newSet value addAll: #(nil nil nil); yourself) size = 1. self assert: ((newSet value add: nil; yourself) includes: nil). self assert: ((newSet value addAll: #(nil nil nil); yourself) includes: nil). self assert: (newSet value add: nil; yourself) anyOne = nil. self assert: ((newSet value add: nil; yourself) remove: nil) == nil. self assert: ((newSet value add: nil; yourself) remove: nil; yourself) isEmpty. self assert: (newSet value addAll: #(1 nil foo); yourself) size = 3. self assert: ((newSet value addAll: #(1 nil foo); yourself) remove: nil; yourself) size = 2. + self assert: ((newSet value add: nil; yourself) collect:[:x| x]) = (collectClass with: nil). - self assert: ((newSet value add: nil; yourself) collect:[:x| x]) = (Set with: nil). self assert: ((newSet value add: nil; yourself) collect:[:x| x] as: Array) = #(nil). self deny: ((newSet value) includes: nil). self deny: ((newSet value add: 3; yourself) includes: nil). self deny: ((newSet value add: 3; remove: 3; yourself) includes: nil). ! From commits at source.squeak.org Mon Nov 2 02:54:49 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 02:54:50 2015 Subject: [squeak-dev] The Trunk: Tests-ul.337.mcz Message-ID: Levente Uzonyi uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-ul.337.mcz ==================== Summary ==================== Name: Tests-ul.337 Author: ul Time: 2 November 2015, 4:54:37.744 am UUID: 125ed088-9fca-483e-b8e9-7bb02e1f58a0 Ancestors: Tests-dtl.336 Sets are not equal to IdentitySets anymore, so we have to create instances of the right classes to make some tests pass. =============== Diff against Tests-dtl.336 =============== Item was changed: ----- Method: SystemNavigationTest>>testAllImplementedMessagesWithout (in category 'as yet unclassified') ----- testAllImplementedMessagesWithout + + self assert: #(bar baz classFoo) asIdentitySet - self assert: #(bar baz classFoo) asSet equals: (sysNav allImplementedMessagesWithout: {{env at: #Griffle}. {#foo}}).! Item was changed: ----- Method: SystemNavigationTest>>testAllSentMessagesWithout (in category 'as yet unclassified') ----- testAllSentMessagesWithout + + self + assert: (#(foo bar) asIdentitySet + addAll: Smalltalk presumedSentMessages; + addAll: Smalltalk specialSelectors; + yourself) - self assert: #(foo bar) asSet , Smalltalk presumedSentMessages , Smalltalk specialSelectors equals: (sysNav allSentMessagesWithout: {{env at: #Griffle}. {#+}}).! From commits at source.squeak.org Mon Nov 2 02:57:06 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 02:57:07 2015 Subject: [squeak-dev] The Trunk: Kernel-ul.964.mcz Message-ID: Levente Uzonyi uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-ul.964.mcz ==================== Summary ==================== Name: Kernel-ul.964 Author: ul Time: 2 November 2015, 4:56:32.76 am UUID: 5dbe95ce-96e3-4f4d-bdb1-520c50def26c Ancestors: Kernel-nice.963 Spur-compatible Object >> #inboundPointersExcluding:. =============== Diff against Kernel-nice.963 =============== Item was changed: ----- Method: Object>>inboundPointersExcluding: (in category 'tracing') ----- inboundPointersExcluding: objectsToExclude "Answer a list of all objects in the system that hold a reference to me, excluding those in the collection of objectsToExclude." | pointers object objectsToAlwaysExclude | Smalltalk garbageCollect. pointers := OrderedCollection new. + self systemNavigation allObjectsOrNil ifNotNil: [ :allObjects | + objectsToAlwaysExclude := { + allObjects. + thisContext. + thisContext sender. + thisContext sender sender. + objectsToExclude. + }. + 1 to: allObjects size do: [ :index | + object := allObjects at: index. + (object pointsTo: self) ifTrue: [ + ((objectsToAlwaysExclude identityIncludes: object) + or: [ objectsToExclude identityIncludes: object ]) + ifFalse: [ pointers add: object ] ] ]. + ^pointers ]. "SystemNavigation >> #allObjectsDo: is inlined here with a slight modification: the marker object is pointers. This gives better results, because the value of pointers, it's inner objects and transient method contexts will not be iterated over." object := self someObject. [ object == pointers ] whileFalse: [ (object isInMemory and: [ object pointsTo: self ]) ifTrue: [ pointers add: object ]. object := object nextObject ]. objectsToAlwaysExclude := { thisContext. thisContext sender. thisContext sender sender. objectsToExclude. }. ^pointers removeAllSuchThat: [ :ea | (objectsToAlwaysExclude identityIncludes: ea) or: [ objectsToExclude identityIncludes: ea ] ]! From commits at source.squeak.org Mon Nov 2 02:58:16 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 02:58:18 2015 Subject: [squeak-dev] The Inbox: Kernel-ul.965.mcz Message-ID: Levente Uzonyi uploaded a new version of Kernel to project The Inbox: http://source.squeak.org/inbox/Kernel-ul.965.mcz ==================== Summary ==================== Name: Kernel-ul.965 Author: ul Time: 2 November 2015, 4:57:55.804 am UUID: d1932681-6382-4a22-bbb8-f0dd6df8b029 Ancestors: Kernel-ul.964 To be able to compare PluggableSets and PluggableDictionaries, we have to provide BlockClosure >> #=. =============== Diff against Kernel-ul.964 =============== Item was added: + ----- Method: BlockClosure>>= (in category 'comparing') ----- + = anObject + + anObject == self ifTrue: [ ^true ]. + anObject class == self class ifFalse: [ ^false ]. + anObject outerContext method = outerContext method ifFalse: [ ^false ]. + anObject outerContext receiver = outerContext receiver ifFalse: [ ^false ]. + anObject startpc = startpc ifFalse: [ ^false ]. + ^anObject numArgs = numArgs! Item was added: + ----- Method: BlockClosure>>hash (in category 'comparing') ----- + hash + + ^((self class hash + bitXor: outerContext method hash) + bitXor: outerContext receiver hash) + bitXor: ((startpc bitShift: 8) + numArgs) hashMultiply! From tim at rowledge.org Mon Nov 2 04:10:28 2015 From: tim at rowledge.org (tim Rowledge) Date: Mon Nov 2 04:10:32 2015 Subject: [squeak-dev] Camp Smalltalk Nanaimo Nov 6-8 2015 reminder Message-ID: <69AD0D91-5AAC-4367-887A-0711FB45F8B3@rowledge.org> This is the final call for passengers wishing to take the chance to enjoy a weekend of Smalltalky goodness in Nanaimo. See https://www.picatic.com/event14133068326629 for info. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Calm down -- it's only ones and zeros. From commits at source.squeak.org Mon Nov 2 09:10:18 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 09:10:19 2015 Subject: [squeak-dev] The Trunk: Morphic-topa.1024.mcz Message-ID: Tobias Pape uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-topa.1024.mcz ==================== Summary ==================== Name: Morphic-topa.1024 Author: topa Time: 2 November 2015, 10:09:39.152 am UUID: 4751f1ce-2b2c-465c-9a03-b10e2260993c Ancestors: Morphic-kfr.1023 Try directories before files when handling dropped items. (Because on Unix, we'll get a file for a directory but obviously not vice versa) =============== Diff against Morphic-kfr.1023 =============== Item was changed: ----- Method: PasteUpMorph>>dropFiles: (in category 'event handling') ----- dropFiles: anEvent "Handle a number of dropped files from the OS. TODO: - use a more general mechanism for figuring out what to do with the file (perhaps even offering a choice from a menu) - remember the resource location or (when in browser) even the actual file handle " | numFiles | numFiles := anEvent contents. 1 to: numFiles do: [ :i | + (FileDirectory requestDropDirectory: i) + ifNotNil: [:directory | self handleDroppedItem: directory event: anEvent] + ifNil: [(FileStream requestDropStream: i) ifNotNil: [:stream | + [self handleDroppedItem: stream event: anEvent] ensure: [stream close]]]]. + ! - (FileStream requestDropStream: i) - ifNotNil: [:stream | - [ (ExternalDropHandler lookupExternalDropHandler: stream) ifNotNil: [:handler | - handler handle: stream in: self dropEvent: anEvent ] ] - ensure: [ stream close ] ] - ifNil: [(FileDirectory requestDropDirectory: i) ifNotNil: [:directory | - (ExternalDropHandler lookupExternalDropHandler: directory) ifNotNil: [:handler | - handler handle: directory in: self dropEvent: anEvent]]]].! Item was added: + ----- Method: PasteUpMorph>>handleDroppedItem:event: (in category 'event handling') ----- + handleDroppedItem: anItem event: anEvent + + (ExternalDropHandler lookupExternalDropHandler: anItem) + ifNotNil: [:handler | handler handle: anItem in: self dropEvent: anEvent].! From commits at source.squeak.org Mon Nov 2 09:14:26 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 09:14:26 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1025.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1025.mcz ==================== Summary ==================== Name: Morphic-mt.1025 Author: mt Time: 2 November 2015, 10:13:48.49 am UUID: 73bdc916-19b9-4404-a219-778bcd470402 Ancestors: Morphic-topa.1024 Fixes description of scratch pad preference. See DockingBarMorph >> #handleListenEvent:. It is the control-key, not the command-key. =============== Diff against Morphic-topa.1024 =============== Item was changed: ----- Method: SearchBar class>>useScratchPad (in category 'preferences') ----- useScratchPad + ^ UseScratchPad ifNil: [ false ]! From Marcel.Taeumel at hpi.de Mon Nov 2 12:10:47 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 2 12:23:43 2015 Subject: [squeak-dev] Squeak 5.0 Strange Commit Behavior Message-ID: <1446466247177-4858951.post@n4.nabble.com> Hi there! I just wanted to commit the regression fixes for the debugger (warnings etc.) as it is currently fixed in trunk only. Turn out, that I get strange warnings about "[...] to serialize an empty MCZ") ... blah. Now, everything looks changed! (See screenshot) What's going on? How to proceed? Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lewis at mail.msen.com Mon Nov 2 13:33:06 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Mon Nov 2 13:33:09 2015 Subject: [squeak-dev] Squeak 5.0 Strange Commit Behavior In-Reply-To: <1446466247177-4858951.post@n4.nabble.com> References: <1446466247177-4858951.post@n4.nabble.com> Message-ID: <20151102133306.GA98005@shell.msen.com> On Mon, Nov 02, 2015 at 04:10:47AM -0800, marcel.taeumel wrote: > Hi there! > > I just wanted to commit the regression fixes for the debugger (warnings > etc.) as it is currently fixed in trunk only. > > Turn out, that I get strange warnings about "[...] to serialize an empty > MCZ") ... blah. > > Now, everything looks changed! (See screenshot) > > > > What's going on? How to proceed? > > Best, > Marcel > I think you are working in a 4.6 image, right? The squeak46 repository had quite a few bad MCZ files in it, presumably damaged due to some bug that existed at the time of the 4.6 release. I think that I have replaced all of the damaged MCZ files with good copies from trunk. You may have copies of some of those bad MCZ files in your local package cache. It may be necessary to do "MCFileBasedRepository flushAllCaches" and reopen your MC browsers in order to fully clear the problem. You may also be interested in http://www.squeaksource.com/TrunkUpdateStreamV3. I have been tracking trunk in a 4.6 image there, and it may be easier to view the kernel diffs there. Dave From eliot.miranda at gmail.com Mon Nov 2 16:04:26 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Nov 2 16:04:32 2015 Subject: [squeak-dev] The Trunk: Network-topa.165.mcz In-Reply-To: <56288200.07b3c20a.e0bfd.3355SMTPIN_ADDED_MISSING@mx.google.com> References: <56288200.07b3c20a.e0bfd.3355SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <80D35AA2-DE28-4E03-85D0-1E4663AC01FE@gmail.com> Bravo! _,,,^..^,,,_ (phone) > On Oct 24, 2015, at 7:29 AM, commits@source.squeak.org wrote: > > Tobias Pape uploaded a new version of Network to project The Trunk: > http://source.squeak.org/trunk/Network-topa.165.mcz > > ==================== Summary ==================== > > Name: Network-topa.165 > Author: topa > Time: 19 October 2015, 11:28:20.052 pm > UUID: b4b1febc-df00-4213-b76f-c007b06bb2e2 > Ancestors: Network-ul.164 > > Simplify and speed up non-primitive UUID generation (hat-tip to Martin McClure ) > > Instead of generating all parts of the UUID separately, we generate > a single, 128-bit number and modify it slightly to match the UUID definition. > This complies with RFC 4122, Sec. 4.4. > > This approach is 2500 times faster than the old method and only about 3 times > slower than the primitive. Hence, we disable the primitive and no longer need > to rely on the UUIDPlugin to be present. > > Informational: The Timings: > > { > 'Pure allocation' -> [UUID basicNew: 16] bench. > 'Primitive + alloc' -> [(UUID basicNew: 16) primMakeUUID] bench. > 'Old + alloc' -> [|u| u := (UUID basicNew: 16). UUIDGeneratorOld new generateBytes: u forVersion: 4] bench. > 'New + alloc' -> [|u| u := (UUID basicNew: 16). UUIDGeneratorNew new generateBytes: u forVersion: 4] bench. > }. > "{ > 'Pure allocation'->'56,500,000 per second. 17.7 nanoseconds per run.' . > 'Primitive + alloc'->'1,510,000 per second. 663 nanoseconds per run.' . > 'Old + alloc'->'202 per second. 4.95 milliseconds per run.' . > 'New + alloc'->'519,000 per second. 1.93 microseconds per run.' > }." > > =============== Diff against Network-ul.164 =============== > > Item was changed: > ----- Method: String>>asAlphaNumeric:extraChars:mergeUID: (in category '*network-uuid') ----- > asAlphaNumeric: totalSize extraChars: additionallyAllowed mergeUID: minimalSizeOfRandomPart > "Generates a String with unique identifier ( UID ) qualities, the difference to a > UUID is that its beginning is derived from the receiver, so that it has a meaning > for a human reader. > > Answers a String of totalSize, which consists of 3 parts > 1.part: the beginning of the receiver only consisting of > a-z, A-Z, 0-9 and extraChars in Collection additionallyAllowed ( which can be nil ) > 2.part: a single _ > 3.part: a ( random ) UID of size >= minimalSizeOfRandomPart consisting of > a-z, A-Z, 0-9 > > Starting letters are capitalized. > TotalSize must be at least 1. > Exactly 1 occurrence of $_ is guaranteed ( unless additionallyAllowed includes $_ ). > The random part has even for small sizes good UID qualitites for many practical purposes. > If only lower- or uppercase letters are demanded, simply convert the answer with > say #asLowercase. The probability of a duplicate will rise only moderately ( see below ). > > Example: > size of random part = 10 > in n generated UIDs the chance p of having non-unique UIDs is > n = 10000 -> p < 1e-10 if answer is reduced to lowerCase: p < 1.4 e-8 > n = 100000 -> p < 1e-8 > at the bottom is a snippet for your own calculations > Note: the calculated propabilites are theoretical, > for the actually used random generator they may be much worse" > > | stream out sizeOfFirstPart index ascii ch skip array random | > totalSize > minimalSizeOfRandomPart > ifFalse: [ self errorOutOfBounds ]. > stream := ReadStream on: self. > out := WriteStream on: ( String new: totalSize ). > index := 0. > skip := true. > sizeOfFirstPart := totalSize - minimalSizeOfRandomPart - 1. > [ stream atEnd or: [ index >= sizeOfFirstPart ]] > whileFalse: [ > ((( ascii := ( ch := stream next ) asciiValue ) >= 65 and: [ ascii <= 90 ]) or: [ > ( ascii >= 97 and: [ ascii <= 122 ]) or: [ > ch isDigit or: [ > additionallyAllowed notNil and: [ additionallyAllowed includes: ch ]]]]) > ifTrue: [ > skip > ifTrue: [ out nextPut: ch asUppercase ] > ifFalse: [ out nextPut: ch ]. > index := index + 1. > skip := false ] > ifFalse: [ skip := true ]]. > out nextPut: $_. > array := Array new: 62. > 1 to: 26 do: [ :i | > array at: i put: ( i + 64 ) asCharacter. > array at: i + 26 put: ( i + 96 ) asCharacter ]. > 53 to: 62 do: [ :i | > array at: i put: ( i - 5 ) asCharacter ]. > + random := ThreadSafeRandom value. > - random := UUIDGenerator default randomGenerator. > totalSize - index - 1 timesRepeat: [ > out nextPut: ( array atRandom: random )]. > ^out contents > > " calculation of probability p for failure of uniqueness in n UIDs > Note: if answer will be converted to upper or lower case replace 62 with 36 > | n i p all | > all := 62 raisedTo: sizeOfRandomPart. > i := 1. > p := 0.0 . > n := 10000. > [ i <= n ] > whileTrue: [ > p := p + (( i - 1 ) / all ). > i := i + 1 ]. > p > > approximation formula: n squared / ( 62.0 raisedTo: sizeOfRandomPart ) / 2 > " > > "'Crop SketchMorphs and Grab Screen Rect to JPG' > asAlphaNumeric: 31 extraChars: nil mergeUID: 10 > 'CropSketchMorphsAndG_iOw94jquN6' > 'Monticello' > asAlphaNumeric: 31 extraChars: nil mergeUID: 10 > 'Monticello_kp6aV2l0IZK9uBULGOeG' > 'version-', ( '1.1.2' replaceAll: $. with: $- ) > asAlphaNumeric: 31 extraChars: #( $- ) mergeUID: 10 > 'Version-1-1-2_kuz2tMg2xX9iRLDVR'" > ! > > Item was changed: > ----- Method: UUID>>initialize (in category 'initalize-release') ----- > initialize > + self makeUUID.! > - self primMakeUUID.! > > Item was added: > + ----- Method: UUID>>makeUUID (in category 'as yet unclassified') ----- > + makeUUID > + UUIDGenerator default generateBytes: self forVersion: 4.! > > Item was changed: > ----- Method: UUID>>primMakeUUID (in category 'system primitives') ----- > primMakeUUID > > + self makeUUID! > - UUIDGenerator default generateBytes: self forVersion: 4.! > > Item was changed: > Object subclass: #UUIDGenerator > + instanceVariableNames: 'bits' > + classVariableNames: 'Default TheRandom TheSemaphore' > - instanceVariableNames: 'timeLow timeMid timeHiAndVersion clockSeqHiAndReserved clockSeqLow node randomCounter randomGenerator semaphoreForGenerator' > - classVariableNames: 'Default' > poolDictionaries: '' > category: 'Network-UUID'! > > + !UUIDGenerator commentStamp: 'topa 10/19/2015 23:23:19' prior: 0! > + I generate a pseudo-random UUID by asking Random for a 128 bit value. > - !UUIDGenerator commentStamp: '' prior: 0! > - This class generates a pseudo-random UUID > - by John M McIntosh johnmci@smalltalkconsulting.com > > + See https://tools.ietf.org/html/rfc4122.html#section-4.4 for reference.! > - See http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt! > > Item was changed: > ----- Method: UUIDGenerator class>>initialize (in category 'class initialization') ----- > initialize > + TheRandom := Random new. > + TheSemaphore := Semaphore forMutualExclusion. > Smalltalk addToStartUpList: self after: nil.! > > Item was changed: > ----- Method: UUIDGenerator>>generateFieldsVersion4 (in category 'instance creation') ----- > generateFieldsVersion4 > + > + TheSemaphore critical: [ > + bits := 16rffffffffffffffffffffffffffffffff atRandom: TheRandom. "128 bit"].! > - > - timeLow := self generateRandomBitsOfLength: 32. > - timeMid := self generateRandomBitsOfLength: 16. > - timeHiAndVersion := 16r4000 bitOr: (self generateRandomBitsOfLength: 12). > - clockSeqHiAndReserved := 16r80 bitOr: (self generateRandomBitsOfLength: 6). > - clockSeqLow := self generateRandomBitsOfLength: 8. > - node := self generateRandomBitsOfLength: 48. > - ! > > Item was removed: > - ----- Method: UUIDGenerator>>generateOneOrZero (in category 'generator') ----- > - generateOneOrZero > - ^self semaphoreForGenerator > - critical: [| value | > - value := self randomGenerator next. > - self randomCounter: self randomCounter + 1. > - self randomCounter > 100000 > - ifTrue: [self setupRandom]. > - value < 0.5 > - ifTrue: [0] > - ifFalse: [1]].! > > Item was removed: > - ----- Method: UUIDGenerator>>generateRandomBitsOfLength: (in category 'generator') ----- > - generateRandomBitsOfLength: aNumberOfBits > - | target | > - target := 0. > - aNumberOfBits isZero ifTrue: [^target]. > - target := self generateOneOrZero. > - (aNumberOfBits - 1) timesRepeat: > - [target := (target bitShift: 1) bitOr: self generateOneOrZero]. > - ^target! > > Item was removed: > - ----- Method: UUIDGenerator>>initialize (in category 'instance creation') ----- > - initialize > - self setupRandom. > - semaphoreForGenerator := Semaphore forMutualExclusion. > - ! > > Item was removed: > - ----- Method: UUIDGenerator>>makeSeed (in category 'random seed') ----- > - makeSeed > - "Try various methods of getting good seeds" > - | seed | > - seed := self makeUnixSeed. > - seed ifNotNil: [^seed]. > - > - "not sure if this is reliably random... commented out for now. -dew" > - "seed := self makeSeedFromSound. > - seed ifNotNil: [^seed]." > - > - "default" > - [seed := (Time millisecondClockValue bitAnd: 16r3FFFFFFF) bitXor: self hash. > - seed := seed bitXor: (Time totalSeconds bitAnd: 16r3FFFFFFF). > - seed = 0] whileTrue: ["Try again if ever get a seed = 0"]. > - > - ^seed > - ! > > Item was removed: > - ----- Method: UUIDGenerator>>makeSeedFromSound (in category 'random seed') ----- > - makeSeedFromSound > - ^[SoundService default randomBitsFromSoundInput: 32] > - ifError: [nil].! > > Item was removed: > - ----- Method: UUIDGenerator>>makeUnixSeed (in category 'random seed') ----- > - makeUnixSeed > - > - ^[ > - StandardFileStream readOnlyFileNamed: '/dev/urandom' do: [ :stream | > - stream binary. > - (Integer > - byte1: stream next > - byte2: stream next > - byte3: stream next > - byte4: stream next) ] ] > - on: Error > - do: [ nil ]! > > Item was changed: > ----- Method: UUIDGenerator>>placeFields: (in category 'instance creation') ----- > placeFields: aByteArray > > + | version fixed | > + bits isLarge > + ifTrue: [ aByteArray replaceFrom: 1 to: bits size with: bits] > + ifFalse: [aByteArray unsignedLongAt: 1 put: bits bigEndian: false]. > + > + version := ((aByteArray at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4" > + fixed := ((aByteArray at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value" > + aByteArray > + at: 7 put: version; > + at: 9 put: fixed.! > - aByteArray at: 1 put: ((timeLow bitShift: -24) bitAnd: 16rFF). > - aByteArray at: 2 put: ((timeLow bitShift: -16) bitAnd: 16rFF). > - aByteArray at: 3 put: ((timeLow bitShift: -8) bitAnd: 16rFF). > - aByteArray at: 4 put: (timeLow bitAnd: 16rFF). > - aByteArray at: 5 put: ((timeMid bitShift: -8) bitAnd: 16rFF). > - aByteArray at: 6 put: (timeMid bitAnd: 16rFF). > - aByteArray at: 7 put: ((timeHiAndVersion bitShift: -8) bitAnd: 16rFF). > - aByteArray at: 8 put: (timeHiAndVersion bitAnd: 16rFF). > - aByteArray at: 9 put: clockSeqHiAndReserved. > - aByteArray at: 10 put: clockSeqLow. > - 0 to: 5 do: [:i | > - aByteArray at: 11 + i put: ((node bitShift: (-8*i)) bitAnd: 16rFF)] > - ! > > Item was removed: > - ----- Method: UUIDGenerator>>randomCounter (in category 'accessors and mutators') ----- > - randomCounter > - ^randomCounter! > > Item was removed: > - ----- Method: UUIDGenerator>>randomCounter: (in category 'accessors and mutators') ----- > - randomCounter: aNumber > - randomCounter := aNumber > - ! > > Item was removed: > - ----- Method: UUIDGenerator>>randomGenerator (in category 'accessors and mutators') ----- > - randomGenerator > - ^randomGenerator > - ! > > Item was removed: > - ----- Method: UUIDGenerator>>randomGenerator: (in category 'accessors and mutators') ----- > - randomGenerator: aGenerator > - randomGenerator := aGenerator > - ! > > Item was removed: > - ----- Method: UUIDGenerator>>semaphoreForGenerator (in category 'accessors and mutators') ----- > - semaphoreForGenerator > - ^semaphoreForGenerator! > > Item was removed: > - ----- Method: UUIDGenerator>>semaphoreForGenerator: (in category 'accessors and mutators') ----- > - semaphoreForGenerator: aSema > - semaphoreForGenerator := aSema > - ! > > Item was removed: > - ----- Method: UUIDGenerator>>setupRandom (in category 'instance creation') ----- > - setupRandom > - randomCounter := 0. > - randomGenerator := Random seed: self makeSeed.! > > From Das.Linux at gmx.de Mon Nov 2 16:22:34 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon Nov 2 16:22:37 2015 Subject: [squeak-dev] The Trunk: Network-topa.165.mcz In-Reply-To: <80D35AA2-DE28-4E03-85D0-1E4663AC01FE@gmail.com> References: <56288200.07b3c20a.e0bfd.3355SMTPIN_ADDED_MISSING@mx.google.com> <80D35AA2-DE28-4E03-85D0-1E4663AC01FE@gmail.com> Message-ID: <2925BF74-44CF-47F0-AD5B-0CB8007A1685@gmx.de> On 02.11.2015, at 17:04, Eliot Miranda wrote: > Bravo! Thanks, but most of the credit should go to Martin and Levente :) Best regards -Tobias > > _,,,^..^,,,_ (phone) > >> On Oct 24, 2015, at 7:29 AM, commits@source.squeak.org wrote: >> >> Tobias Pape uploaded a new version of Network to project The Trunk: >> http://source.squeak.org/trunk/Network-topa.165.mcz >> >> ==================== Summary ==================== >> >> Name: Network-topa.165 >> Author: topa >> Time: 19 October 2015, 11:28:20.052 pm >> UUID: b4b1febc-df00-4213-b76f-c007b06bb2e2 >> Ancestors: Network-ul.164 >> >> Simplify and speed up non-primitive UUID generation (hat-tip to Martin McClure ) >> >> Instead of generating all parts of the UUID separately, we generate >> a single, 128-bit number and modify it slightly to match the UUID definition. >> This complies with RFC 4122, Sec. 4.4. >> >> This approach is 2500 times faster than the old method and only about 3 times >> slower than the primitive. Hence, we disable the primitive and no longer need >> to rely on the UUIDPlugin to be present. >> >> Informational: The Timings: >> >> { >> 'Pure allocation' -> [UUID basicNew: 16] bench. >> 'Primitive + alloc' -> [(UUID basicNew: 16) primMakeUUID] bench. >> 'Old + alloc' -> [|u| u := (UUID basicNew: 16). UUIDGeneratorOld new generateBytes: u forVersion: 4] bench. >> 'New + alloc' -> [|u| u := (UUID basicNew: 16). UUIDGeneratorNew new generateBytes: u forVersion: 4] bench. >> }. >> "{ >> 'Pure allocation'->'56,500,000 per second. 17.7 nanoseconds per run.' . >> 'Primitive + alloc'->'1,510,000 per second. 663 nanoseconds per run.' . >> 'Old + alloc'->'202 per second. 4.95 milliseconds per run.' . >> 'New + alloc'->'519,000 per second. 1.93 microseconds per run.' >> }." >> >> =============== Diff against Network-ul.164 =============== >> >> Item was changed: >> ----- Method: String>>asAlphaNumeric:extraChars:mergeUID: (in category '*network-uuid') ----- >> asAlphaNumeric: totalSize extraChars: additionallyAllowed mergeUID: minimalSizeOfRandomPart >> "Generates a String with unique identifier ( UID ) qualities, the difference to a >> UUID is that its beginning is derived from the receiver, so that it has a meaning >> for a human reader. >> >> Answers a String of totalSize, which consists of 3 parts >> 1.part: the beginning of the receiver only consisting of >> a-z, A-Z, 0-9 and extraChars in Collection additionallyAllowed ( which can be nil ) >> 2.part: a single _ >> 3.part: a ( random ) UID of size >= minimalSizeOfRandomPart consisting of >> a-z, A-Z, 0-9 >> >> Starting letters are capitalized. >> TotalSize must be at least 1. >> Exactly 1 occurrence of $_ is guaranteed ( unless additionallyAllowed includes $_ ). >> The random part has even for small sizes good UID qualitites for many practical purposes. >> If only lower- or uppercase letters are demanded, simply convert the answer with >> say #asLowercase. The probability of a duplicate will rise only moderately ( see below ). >> >> Example: >> size of random part = 10 >> in n generated UIDs the chance p of having non-unique UIDs is >> n = 10000 -> p < 1e-10 if answer is reduced to lowerCase: p < 1.4 e-8 >> n = 100000 -> p < 1e-8 >> at the bottom is a snippet for your own calculations >> Note: the calculated propabilites are theoretical, >> for the actually used random generator they may be much worse" >> >> | stream out sizeOfFirstPart index ascii ch skip array random | >> totalSize > minimalSizeOfRandomPart >> ifFalse: [ self errorOutOfBounds ]. >> stream := ReadStream on: self. >> out := WriteStream on: ( String new: totalSize ). >> index := 0. >> skip := true. >> sizeOfFirstPart := totalSize - minimalSizeOfRandomPart - 1. >> [ stream atEnd or: [ index >= sizeOfFirstPart ]] >> whileFalse: [ >> ((( ascii := ( ch := stream next ) asciiValue ) >= 65 and: [ ascii <= 90 ]) or: [ >> ( ascii >= 97 and: [ ascii <= 122 ]) or: [ >> ch isDigit or: [ >> additionallyAllowed notNil and: [ additionallyAllowed includes: ch ]]]]) >> ifTrue: [ >> skip >> ifTrue: [ out nextPut: ch asUppercase ] >> ifFalse: [ out nextPut: ch ]. >> index := index + 1. >> skip := false ] >> ifFalse: [ skip := true ]]. >> out nextPut: $_. >> array := Array new: 62. >> 1 to: 26 do: [ :i | >> array at: i put: ( i + 64 ) asCharacter. >> array at: i + 26 put: ( i + 96 ) asCharacter ]. >> 53 to: 62 do: [ :i | >> array at: i put: ( i - 5 ) asCharacter ]. >> + random := ThreadSafeRandom value. >> - random := UUIDGenerator default randomGenerator. >> totalSize - index - 1 timesRepeat: [ >> out nextPut: ( array atRandom: random )]. >> ^out contents >> >> " calculation of probability p for failure of uniqueness in n UIDs >> Note: if answer will be converted to upper or lower case replace 62 with 36 >> | n i p all | >> all := 62 raisedTo: sizeOfRandomPart. >> i := 1. >> p := 0.0 . >> n := 10000. >> [ i <= n ] >> whileTrue: [ >> p := p + (( i - 1 ) / all ). >> i := i + 1 ]. >> p >> >> approximation formula: n squared / ( 62.0 raisedTo: sizeOfRandomPart ) / 2 >> " >> >> "'Crop SketchMorphs and Grab Screen Rect to JPG' >> asAlphaNumeric: 31 extraChars: nil mergeUID: 10 >> 'CropSketchMorphsAndG_iOw94jquN6' >> 'Monticello' >> asAlphaNumeric: 31 extraChars: nil mergeUID: 10 >> 'Monticello_kp6aV2l0IZK9uBULGOeG' >> 'version-', ( '1.1.2' replaceAll: $. with: $- ) >> asAlphaNumeric: 31 extraChars: #( $- ) mergeUID: 10 >> 'Version-1-1-2_kuz2tMg2xX9iRLDVR'" >> ! >> >> Item was changed: >> ----- Method: UUID>>initialize (in category 'initalize-release') ----- >> initialize >> + self makeUUID.! >> - self primMakeUUID.! >> >> Item was added: >> + ----- Method: UUID>>makeUUID (in category 'as yet unclassified') ----- >> + makeUUID >> + UUIDGenerator default generateBytes: self forVersion: 4.! >> >> Item was changed: >> ----- Method: UUID>>primMakeUUID (in category 'system primitives') ----- >> primMakeUUID >> >> + self makeUUID! >> - UUIDGenerator default generateBytes: self forVersion: 4.! >> >> Item was changed: >> Object subclass: #UUIDGenerator >> + instanceVariableNames: 'bits' >> + classVariableNames: 'Default TheRandom TheSemaphore' >> - instanceVariableNames: 'timeLow timeMid timeHiAndVersion clockSeqHiAndReserved clockSeqLow node randomCounter randomGenerator semaphoreForGenerator' >> - classVariableNames: 'Default' >> poolDictionaries: '' >> category: 'Network-UUID'! >> >> + !UUIDGenerator commentStamp: 'topa 10/19/2015 23:23:19' prior: 0! >> + I generate a pseudo-random UUID by asking Random for a 128 bit value. >> - !UUIDGenerator commentStamp: '' prior: 0! >> - This class generates a pseudo-random UUID >> - by John M McIntosh johnmci@smalltalkconsulting.com >> >> + See https://tools.ietf.org/html/rfc4122.html#section-4.4 for reference.! >> - See http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt! >> >> Item was changed: >> ----- Method: UUIDGenerator class>>initialize (in category 'class initialization') ----- >> initialize >> + TheRandom := Random new. >> + TheSemaphore := Semaphore forMutualExclusion. >> Smalltalk addToStartUpList: self after: nil.! >> >> Item was changed: >> ----- Method: UUIDGenerator>>generateFieldsVersion4 (in category 'instance creation') ----- >> generateFieldsVersion4 >> + >> + TheSemaphore critical: [ >> + bits := 16rffffffffffffffffffffffffffffffff atRandom: TheRandom. "128 bit"].! >> - >> - timeLow := self generateRandomBitsOfLength: 32. >> - timeMid := self generateRandomBitsOfLength: 16. >> - timeHiAndVersion := 16r4000 bitOr: (self generateRandomBitsOfLength: 12). >> - clockSeqHiAndReserved := 16r80 bitOr: (self generateRandomBitsOfLength: 6). >> - clockSeqLow := self generateRandomBitsOfLength: 8. >> - node := self generateRandomBitsOfLength: 48. >> - ! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>generateOneOrZero (in category 'generator') ----- >> - generateOneOrZero >> - ^self semaphoreForGenerator >> - critical: [| value | >> - value := self randomGenerator next. >> - self randomCounter: self randomCounter + 1. >> - self randomCounter > 100000 >> - ifTrue: [self setupRandom]. >> - value < 0.5 >> - ifTrue: [0] >> - ifFalse: [1]].! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>generateRandomBitsOfLength: (in category 'generator') ----- >> - generateRandomBitsOfLength: aNumberOfBits >> - | target | >> - target := 0. >> - aNumberOfBits isZero ifTrue: [^target]. >> - target := self generateOneOrZero. >> - (aNumberOfBits - 1) timesRepeat: >> - [target := (target bitShift: 1) bitOr: self generateOneOrZero]. >> - ^target! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>initialize (in category 'instance creation') ----- >> - initialize >> - self setupRandom. >> - semaphoreForGenerator := Semaphore forMutualExclusion. >> - ! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>makeSeed (in category 'random seed') ----- >> - makeSeed >> - "Try various methods of getting good seeds" >> - | seed | >> - seed := self makeUnixSeed. >> - seed ifNotNil: [^seed]. >> - >> - "not sure if this is reliably random... commented out for now. -dew" >> - "seed := self makeSeedFromSound. >> - seed ifNotNil: [^seed]." >> - >> - "default" >> - [seed := (Time millisecondClockValue bitAnd: 16r3FFFFFFF) bitXor: self hash. >> - seed := seed bitXor: (Time totalSeconds bitAnd: 16r3FFFFFFF). >> - seed = 0] whileTrue: ["Try again if ever get a seed = 0"]. >> - >> - ^seed >> - ! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>makeSeedFromSound (in category 'random seed') ----- >> - makeSeedFromSound >> - ^[SoundService default randomBitsFromSoundInput: 32] >> - ifError: [nil].! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>makeUnixSeed (in category 'random seed') ----- >> - makeUnixSeed >> - >> - ^[ >> - StandardFileStream readOnlyFileNamed: '/dev/urandom' do: [ :stream | >> - stream binary. >> - (Integer >> - byte1: stream next >> - byte2: stream next >> - byte3: stream next >> - byte4: stream next) ] ] >> - on: Error >> - do: [ nil ]! >> >> Item was changed: >> ----- Method: UUIDGenerator>>placeFields: (in category 'instance creation') ----- >> placeFields: aByteArray >> >> + | version fixed | >> + bits isLarge >> + ifTrue: [ aByteArray replaceFrom: 1 to: bits size with: bits] >> + ifFalse: [aByteArray unsignedLongAt: 1 put: bits bigEndian: false]. >> + >> + version := ((aByteArray at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4" >> + fixed := ((aByteArray at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value" >> + aByteArray >> + at: 7 put: version; >> + at: 9 put: fixed.! >> - aByteArray at: 1 put: ((timeLow bitShift: -24) bitAnd: 16rFF). >> - aByteArray at: 2 put: ((timeLow bitShift: -16) bitAnd: 16rFF). >> - aByteArray at: 3 put: ((timeLow bitShift: -8) bitAnd: 16rFF). >> - aByteArray at: 4 put: (timeLow bitAnd: 16rFF). >> - aByteArray at: 5 put: ((timeMid bitShift: -8) bitAnd: 16rFF). >> - aByteArray at: 6 put: (timeMid bitAnd: 16rFF). >> - aByteArray at: 7 put: ((timeHiAndVersion bitShift: -8) bitAnd: 16rFF). >> - aByteArray at: 8 put: (timeHiAndVersion bitAnd: 16rFF). >> - aByteArray at: 9 put: clockSeqHiAndReserved. >> - aByteArray at: 10 put: clockSeqLow. >> - 0 to: 5 do: [:i | >> - aByteArray at: 11 + i put: ((node bitShift: (-8*i)) bitAnd: 16rFF)] >> - ! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>randomCounter (in category 'accessors and mutators') ----- >> - randomCounter >> - ^randomCounter! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>randomCounter: (in category 'accessors and mutators') ----- >> - randomCounter: aNumber >> - randomCounter := aNumber >> - ! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>randomGenerator (in category 'accessors and mutators') ----- >> - randomGenerator >> - ^randomGenerator >> - ! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>randomGenerator: (in category 'accessors and mutators') ----- >> - randomGenerator: aGenerator >> - randomGenerator := aGenerator >> - ! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>semaphoreForGenerator (in category 'accessors and mutators') ----- >> - semaphoreForGenerator >> - ^semaphoreForGenerator! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>semaphoreForGenerator: (in category 'accessors and mutators') ----- >> - semaphoreForGenerator: aSema >> - semaphoreForGenerator := aSema >> - ! >> >> Item was removed: >> - ----- Method: UUIDGenerator>>setupRandom (in category 'instance creation') ----- >> - setupRandom >> - randomCounter := 0. >> - randomGenerator := Random seed: self makeSeed.! From Marcel.Taeumel at hpi.de Mon Nov 2 17:05:55 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 2 17:18:53 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: <20151102133306.GA98005@shell.msen.com> References: <1446466247177-4858951.post@n4.nabble.com> <20151102133306.GA98005@shell.msen.com> Message-ID: <1446483955612-4859001.post@n4.nabble.com> Hi David, this is a fresh all-in-one 5.0 image. Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859001.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From brasspen at gmail.com Mon Nov 2 17:29:35 2015 From: brasspen at gmail.com (Chris Cunnington) Date: Mon Nov 2 17:29:39 2015 Subject: [squeak-dev] [ANN] OopluCon 2016, San Francisco, April Message-ID: <56379D7F.50805@gmail.com> OopluCon 2016 A Day for the Smalltalk Programming Language and its Friends Sunday 10 April 2016 8am - 4pm The Box SF 1069 Howard Street (between 6th and 7th) three blocks from Moscone Center, SoMa San Francisco, USA http://www.theboxsf.com/ The event is free A request for presentations will be announced in a future month A presentation called An Introduction To Smalltalk will promoted to the Ruby, Python and Objective C communities The latest details will be available at http://www.ooplu.com From asqueaker at gmail.com Mon Nov 2 18:23:25 2015 From: asqueaker at gmail.com (Chris Muller) Date: Mon Nov 2 18:23:27 2015 Subject: [squeak-dev] Squeak 5.0 Strange Commit Behavior In-Reply-To: <1446466247177-4858951.post@n4.nabble.com> References: <1446466247177-4858951.post@n4.nabble.com> Message-ID: I'm not positive, but I suspect the bug is related to when trying to save a mcz file with the an existing name in that repository that is already used by a different version. Maybe the error-handling of that scenario causes the one in the package-cache to be saved empty? Not sure, but the blah warning was intended to help us track down the root cause of empty mcz's getting saved. If you're hitting it, we probably want to know why. On Mon, Nov 2, 2015 at 6:10 AM, marcel.taeumel wrote: > Hi there! > > I just wanted to commit the regression fixes for the debugger (warnings > etc.) as it is currently fixed in trunk only. > > Turn out, that I get strange warnings about "[...] to serialize an empty > MCZ") ... blah. > > Now, everything looks changed! (See screenshot) > > > > What's going on? How to proceed? > > Best, > Marcel > > > > > -- > View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From tim at rowledge.org Mon Nov 2 22:16:43 2015 From: tim at rowledge.org (tim Rowledge) Date: Mon Nov 2 22:16:48 2015 Subject: [squeak-dev] [ANN] OopluCon 2016, San Francisco, April In-Reply-To: <56379D7F.50805@gmail.com> References: <56379D7F.50805@gmail.com> Message-ID: <9581E6BB-2D81-4CB3-ACF7-0A29251E9CD7@rowledge.org> > On 02-11-2015, at 9:29 AM, Chris Cunnington wrote: > > OopluCon 2016 > A Day for the Smalltalk Programming Language and its Friends > > Sunday 10 April 2016 Excellent idea. We?ll take care not to schedule the spring CampNanaimo at the same time! tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Fractured Idiom:- VENI, VIDI, VISA - I came, I saw, I bought From brasspen at gmail.com Mon Nov 2 22:22:27 2015 From: brasspen at gmail.com (Chris Cunnington) Date: Mon Nov 2 22:22:31 2015 Subject: [squeak-dev] [ANN] OopluCon 2016, San Francisco, April In-Reply-To: <9581E6BB-2D81-4CB3-ACF7-0A29251E9CD7@rowledge.org> References: <56379D7F.50805@gmail.com> <9581E6BB-2D81-4CB3-ACF7-0A29251E9CD7@rowledge.org> Message-ID: <5637E223.1080106@gmail.com> *sigh of relief* I'm really pleased to hear you say that. I was feeling queasy about how you might process this. If I might make a suggestion, the sooner you choose a Spring date for CampNanaimo (**cough**cough** before Christmas) the easier it will be to plan around. Chris On 2015-11-02 5:16 PM, tim Rowledge wrote: >> On 02-11-2015, at 9:29 AM, Chris Cunnington wrote: >> >> OopluCon 2016 >> A Day for the Smalltalk Programming Language and its Friends >> >> Sunday 10 April 2016 > Excellent idea. We?ll take care not to schedule the spring CampNanaimo at the same time! > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Fractured Idiom:- VENI, VIDI, VISA - I came, I saw, I bought > > > From commits at source.squeak.org Mon Nov 2 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 2 22:55:03 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151102225502.20735.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009090.html Name: Network-ul.167 Ancestors: Network-topa.166 Now that #primMakeUUID is not being used anymore, we can change its behaviour to return nil when the plugin is not available. Added accessors for UUID variant and version. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009091.html Name: Collections-ul.669 Ancestors: Collections-ul.668 Changed Set >> #= and Dictionary >> #= to check the species of the receiver and the argument. PluggableDictionary and PluggableSet also check hashBlock and equalBlock. WeakSet and friends will work once we start using ephemerons. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009092.html Name: KernelTests-ul.299 Ancestors: KernelTests-nice.298 - fixed typo ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009093.html Name: CollectionsTests-ul.256 Ancestors: CollectionsTests-nice.255 Set >> #collect: returns a Set, so compare the result of it with a Set in SetWithNilTest >> #runSetWithNilTestOf:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009094.html Name: CollectionsTests-ul.257 Ancestors: CollectionsTests-ul.256 WeakSet is an exception. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009095.html Name: Tests-ul.337 Ancestors: Tests-dtl.336 Sets are not equal to IdentitySets anymore, so we have to create instances of the right classes to make some tests pass. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009096.html Name: Kernel-ul.964 Ancestors: Kernel-nice.963 Spur-compatible Object >> #inboundPointersExcluding:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009097.html Name: Morphic-topa.1024 Ancestors: Morphic-kfr.1023 Try directories before files when handling dropped items. (Because on Unix, we'll get a file for a directory but obviously not vice versa) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009098.html Name: Morphic-mt.1025 Ancestors: Morphic-topa.1024 Fixes description of scratch pad preference. See DockingBarMorph >> #handleListenEvent:. It is the control-key, not the command-key. ============================================= From leves at elte.hu Tue Nov 3 00:32:52 2015 From: leves at elte.hu (Levente Uzonyi) Date: Tue Nov 3 00:32:56 2015 Subject: [squeak-dev] Seeding instances of Random Message-ID: Hi All, With the recent UUID changes, we're facing the problem of properly seeding a Random instance. The current method provides only 2^32 different initial states, with which the chance for two images to have the same values on startup is way too high (~9300 startups for 1% chance of collision). To avoid the collisions we need a reliable source of random bytes. Currently we have the following sources: 1. /dev/urandom: fast, reliable, but not available on all platforms (e.g. windows). 2. UUIDPlugin: fast, but this is what we wanted to get rid of in the first place, so it may not be available. 3. Audio recorded through SoundSystem: slow, unreliable, and it may not be available. 4. Time primUTCMicrosecondClock. On its own it has way too little entropy. We can still use it to initalize the PRNG by using additional sources of entropy (image name, path, vm version, whatever). We can use SHA1 to get "more random" bits from out entropy sources. But this is more like a last resort than a solution to rely on. So I suggest we should create a new primitive, which can fill a given indexable object (bytes and optionally words) with random values - the same way Random >> #nextBytes:into:startingAt: works. It could use CryptGenRandom on Windows, and /dev/urandom on other unix-like platforms. As fallback mechanisms, I'd implement 1. 2. and optionally 4., and use them in the given order. The drawback of these mechanisms is that they create unwanted package dependencies, because Random is in Kernel, while most potetial sources of entropy, along with SHA1, are in other packages. Opinions, ideas? Levente From Marcel.Taeumel at hpi.de Tue Nov 3 09:34:15 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 3 09:47:18 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: References: <1446466247177-4858951.post@n4.nabble.com> Message-ID: <1446543255157-4859057.post@n4.nabble.com> Hi Chris, it seems that Kernel-cmm.937 and System-cmm.756 are "broken". The diff from my changes to Kernel-cmm.936 and System-cmm.755, which are the previous versions, looks fine. Considering that MCZs save the full snapshot anyway ... should I just commit? =) The Tools-cmm.629 looks fine and diffs fine. I touched all packages with this code: repo := MCRepositoryGroup default repositories detect: [:repo | repo description endsWith: 'squeak50']. PackageOrganizer default packages do: [:pkg | [(pkg mcPackage workingCopy changesRelativeToRepository: repo) isEmpty ifFalse: [pkg mcPackage workingCopy modified: true]] on: Warning do: [:warning | Transcript showln: pkg name; showln: warning messageText. warning resume]]. This is what I got: Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859057.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at elte.hu Tue Nov 3 11:10:07 2015 From: leves at elte.hu (Levente Uzonyi) Date: Tue Nov 3 11:10:16 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: <1446543255157-4859057.post@n4.nabble.com> References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> Message-ID: If Dave has fixed all packages in the 4.6 repository, and the packages in the 4.6 and the 5.0 repositories are meant to be the same, then wouldn't it be easier to just copy over these packages from the 4.6 repository? Levente On Tue, 3 Nov 2015, marcel.taeumel wrote: > Hi Chris, > > it seems that Kernel-cmm.937 and System-cmm.756 are "broken". The diff from > my changes to Kernel-cmm.936 and System-cmm.755, which are the previous > versions, looks fine. > > Considering that MCZs save the full snapshot anyway ... should I just > commit? =) > > The Tools-cmm.629 looks fine and diffs fine. > > I touched all packages with this code: > > repo := MCRepositoryGroup default repositories detect: [:repo | repo > description endsWith: 'squeak50']. > > PackageOrganizer default packages do: [:pkg | > [(pkg mcPackage workingCopy changesRelativeToRepository: repo) > isEmpty ifFalse: [pkg mcPackage workingCopy modified: true]] > on: Warning do: [:warning | > Transcript showln: pkg name; showln: warning messageText. > warning resume]]. > > This is what I got: > > > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859057.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From eliot.miranda at gmail.com Tue Nov 3 11:14:40 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Nov 3 11:14:45 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> Message-ID: <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> Hi Levente, > On Nov 3, 2015, at 3:10 AM, Levente Uzonyi wrote: > > If Dave has fixed all packages in the 4.6 repository, and the packages in the 4.6 and the 5.0 repositories are meant to be the same, then wouldn't it be easier to just copy over these packages from the 4.6 repository? Remember that Collections, Compiler, Kernel and System are the four packages that are definitely different between Spur/5.0 and V3/4.6. So can people check their package caches and find non-empty versions? I'll do this first thing. I expect I have ok versions because I've not used 4.6 yet. > > Levente > >> On Tue, 3 Nov 2015, marcel.taeumel wrote: >> >> Hi Chris, >> >> it seems that Kernel-cmm.937 and System-cmm.756 are "broken". The diff from >> my changes to Kernel-cmm.936 and System-cmm.755, which are the previous >> versions, looks fine. >> >> Considering that MCZs save the full snapshot anyway ... should I just >> commit? =) >> >> The Tools-cmm.629 looks fine and diffs fine. >> >> I touched all packages with this code: >> >> repo := MCRepositoryGroup default repositories detect: [:repo | repo >> description endsWith: 'squeak50']. >> >> PackageOrganizer default packages do: [:pkg | >> [(pkg mcPackage workingCopy changesRelativeToRepository: repo) >> isEmpty ifFalse: [pkg mcPackage workingCopy modified: true]] >> on: Warning do: [:warning | >> Transcript showln: pkg name; showln: warning messageText. >> warning resume]]. >> >> This is what I got: >> >> >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859057.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > From leves at elte.hu Tue Nov 3 12:08:01 2015 From: leves at elte.hu (Levente Uzonyi) Date: Tue Nov 3 12:08:05 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> Message-ID: My bad. It's still too early in the morning. Levente On Tue, 3 Nov 2015, Eliot Miranda wrote: > Hi Levente, > >> On Nov 3, 2015, at 3:10 AM, Levente Uzonyi wrote: >> >> If Dave has fixed all packages in the 4.6 repository, and the packages in the 4.6 and the 5.0 repositories are meant to be the same, then wouldn't it be easier to just copy over these packages from the 4.6 repository? > > Remember that Collections, Compiler, Kernel and System are the four packages that are definitely different between Spur/5.0 and V3/4.6. So can people check their package caches and find non-empty versions? I'll do this first thing. I expect I have ok versions because I've not used 4.6 yet. > >> >> Levente >> >>> On Tue, 3 Nov 2015, marcel.taeumel wrote: >>> >>> Hi Chris, >>> >>> it seems that Kernel-cmm.937 and System-cmm.756 are "broken". The diff from >>> my changes to Kernel-cmm.936 and System-cmm.755, which are the previous >>> versions, looks fine. >>> >>> Considering that MCZs save the full snapshot anyway ... should I just >>> commit? =) >>> >>> The Tools-cmm.629 looks fine and diffs fine. >>> >>> I touched all packages with this code: >>> >>> repo := MCRepositoryGroup default repositories detect: [:repo | repo >>> description endsWith: 'squeak50']. >>> >>> PackageOrganizer default packages do: [:pkg | >>> [(pkg mcPackage workingCopy changesRelativeToRepository: repo) >>> isEmpty ifFalse: [pkg mcPackage workingCopy modified: true]] >>> on: Warning do: [:warning | >>> Transcript showln: pkg name; showln: warning messageText. >>> warning resume]]. >>> >>> This is what I got: >>> >>> >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859057.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> > > From lewis at mail.msen.com Tue Nov 3 13:11:34 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Nov 3 13:11:36 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: <1446543255157-4859057.post@n4.nabble.com> References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> Message-ID: <20151103131134.GA49648@shell.msen.com> On Tue, Nov 03, 2015 at 01:34:15AM -0800, marcel.taeumel wrote: > Hi Chris, > > it seems that Kernel-cmm.937 and System-cmm.756 are "broken". The diff from > my changes to Kernel-cmm.936 and System-cmm.755, which are the previous > versions, looks fine. > > Considering that MCZs save the full snapshot anyway ... should I just > commit? =) I expect you can commit without problems. To be extra safe, you can commit to your own package-cache, then copy the result from package-cache to trunk if you are happy with the result. Dave > > The Tools-cmm.629 looks fine and diffs fine. > > I touched all packages with this code: > > repo := MCRepositoryGroup default repositories detect: [:repo | repo > description endsWith: 'squeak50']. > > PackageOrganizer default packages do: [:pkg | > [(pkg mcPackage workingCopy changesRelativeToRepository: repo) > isEmpty ifFalse: [pkg mcPackage workingCopy modified: true]] > on: Warning do: [:warning | > Transcript showln: pkg name; showln: warning messageText. > warning resume]]. > > This is what I got: > > > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859057.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. From btc at openinworld.com Tue Nov 3 15:24:53 2015 From: btc at openinworld.com (Ben Coman) Date: Tue Nov 3 15:25:38 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: References: Message-ID: On Tue, Nov 3, 2015 at 8:32 AM, Levente Uzonyi wrote: > Hi All, > > With the recent UUID changes, we're facing the problem of properly seeding a > Random instance. The current method provides only 2^32 different initial > states, with which the chance for two images to have the same values on > startup is way too high (~9300 startups for 1% chance of collision). > To avoid the collisions we need a reliable source of random bytes. > Currently we have the following sources: > 1. /dev/urandom: fast, reliable, but not available on all platforms (e.g. > windows). > 2. UUIDPlugin: fast, but this is what we wanted to get rid of in the first > place, so it may not be available. > 3. Audio recorded through SoundSystem: slow, unreliable, and it may not be > available. > 4. Time primUTCMicrosecondClock. On its own it has way too little entropy. > We can still use it to initalize the PRNG by using additional sources of > entropy (image name, path, vm version, whatever). We can use SHA1 to get > "more random" bits from out entropy sources. But this is more like a last > resort than a solution to rely on. > > So I suggest we should create a new primitive, which can fill a given > indexable object (bytes and optionally words) with random values - the same > way Random >> #nextBytes:into:startingAt: works. It could use CryptGenRandom > on Windows, and /dev/urandom on other unix-like platforms. > > As fallback mechanisms, I'd implement 1. 2. and optionally 4., and use them > in the given order. The drawback of these mechanisms is that they create > unwanted package dependencies, because Random is in Kernel, while most > potential sources of entropy, along with SHA1, are in other packages. > > Opinions, ideas? > > Levente > This snagged my interest so I had a poke around, from which maybe getrandom() seems a better choice [1] [2] - if available. Linux earlier than Oct-2014 may not have it, and on OpenBSD and (maybe) FreeBSD it is getentropy() [3]. [1] http://djalil.chafai.net/blog/2014/10/13/linux-kernel-3-17/ [2] http://man7.org/linux/man-pages/man2/getrandom.2.html [3] http://www.2uo.de/myths-about-urandom/ Also I found discussion [4] interesting about mixing additional entropy with OS supplied randomness, and discussion [5] is a very interesting method that might provide that -- but is it worth the additional effort ? [4] http://security.stackexchange.com/questions/43344/open-source-alternative-for-cryptgenrandom [5] http://www.chronox.de/jent/doc/CPU-Jitter-NPTRNG.html cheers -ben From Marcel.Taeumel at hpi.de Tue Nov 3 17:20:15 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 3 17:33:20 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> Message-ID: <1446571215511-4859096.post@n4.nabble.com> Thanks for looking! Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859096.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From colin at wiresong.com Tue Nov 3 17:38:49 2015 From: colin at wiresong.com (Colin Putney) Date: Tue Nov 3 17:38:51 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: References: Message-ID: On Mon, Nov 2, 2015 at 4:32 PM, Levente Uzonyi wrote: > Hi All, > > With the recent UUID changes, we're facing the problem of properly seeding > a Random instance. The current method provides only 2^32 different initial > states, with which the chance for two images to have the same values on > startup is way too high (~9300 startups for 1% chance of collision). > To avoid the collisions we need a reliable source of random bytes. > Currently we have the following sources: > 1. /dev/urandom: fast, reliable, but not available on all platforms (e.g. > windows). > 2. UUIDPlugin: fast, but this is what we wanted to get rid of in the first > place, so it may not be available. > 3. Audio recorded through SoundSystem: slow, unreliable, and it may not be > available. > 4. Time primUTCMicrosecondClock. On its own it has way too little entropy. > We can still use it to initalize the PRNG by using additional sources of > entropy (image name, path, vm version, whatever). We can use SHA1 to get > "more random" bits from out entropy sources. But this is more like a last > resort than a solution to rely on. > > So I suggest we should create a new primitive, which can fill a given > indexable object (bytes and optionally words) with random values - the same > way Random >> #nextBytes:into:startingAt: works. It could use > CryptGenRandom on Windows, and /dev/urandom on other unix-like platforms. > > As fallback mechanisms, I'd implement 1. 2. and optionally 4., and use > them in the given order. The drawback of these mechanisms is that they > create unwanted package dependencies, because Random is in Kernel, while > most potetial sources of entropy, along with SHA1, are in other packages. > Why do we want to get rid of UUIDPlugin? Is it just because fewer plugins is better, or is there a problem with this one in particular? Also, if we're going to have a primitive that supplies fast, high-quality, random bytes, shouldn't Random just call that for random values, rather than seeding a PRNG? That said, I think I'd do seeding using 1. the primitive, if available 2. UUIDPlugin, if available 3. The current method Most VMs will have either the primitive or the plugin, so the current method will be used rarely, and thus collisions will be very rare. Keep it simple. Colin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151103/1e8d31e5/attachment.htm From leves at elte.hu Tue Nov 3 18:00:24 2015 From: leves at elte.hu (Levente Uzonyi) Date: Tue Nov 3 18:00:33 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: References: Message-ID: On Tue, 3 Nov 2015, Colin Putney wrote: > > > On Mon, Nov 2, 2015 at 4:32 PM, Levente Uzonyi wrote: > Hi All, > > With the recent UUID changes, we're facing the problem of properly seeding a Random instance. The current method provides only 2^32 different initial states, with which the chance for two images to have the > same values on startup is way too high (~9300 startups for 1% chance of collision). > To avoid the collisions we need a reliable source of random bytes. > Currently we have the following sources: > 1. /dev/urandom: fast, reliable, but not available on all platforms (e.g. windows). > 2. UUIDPlugin: fast, but this is what we wanted to get rid of in the first place, so it may not be available. > 3. Audio recorded through SoundSystem: slow, unreliable, and it may not be available. > 4. Time primUTCMicrosecondClock. On its own it has way too little entropy. We can still use it to initalize the PRNG by using additional sources of entropy (image name, path, vm version, whatever). We can use > SHA1 to get "more random" bits from out entropy sources. But this is more like a last resort than a solution to rely on. > > So I suggest we should create a new primitive, which can fill a given indexable object (bytes and optionally words) with random values - the same way Random >> #nextBytes:into:startingAt: works. It could use > CryptGenRandom on Windows, and /dev/urandom on other unix-like platforms. > > As fallback mechanisms, I'd implement 1. 2. and optionally 4., and use them in the given order. The drawback of these mechanisms is that they create unwanted package dependencies, because Random is in Kernel, > while most potetial sources of entropy, along with SHA1, are in other packages. > > > Why do we want to get rid of UUIDPlugin? Is it just because fewer plugins is better, or is there a problem with this one in particular? UUIDPlugin has both compilation and dynmic linking issues on some platforms. I'd still use it if it's available, unless we have a primitive to provide random bytes, because 16 random bytes make a V4 UUID (-6 bits). > > Also, if we're going to have a primitive that supplies fast, high-quality, random bytes, shouldn't Random just call that for random values, rather than seeding a PRNG?? You still need a way to convert those bytes to numbers. And stateful PRNGs better for testing. When there's a test failure, you can generate the same "random" input to reproduce it. > > That said, I think I'd do seeding using > > 1. the primitive, if available > 2. UUIDPlugin, if available > 3. The current method > > Most VMs will have either the primitive or the plugin, so the current method will be used rarely, and thus collisions will be very rare. Keep it simple.? What do you mean by "current method"? Levente > > Colin > > From asqueaker at gmail.com Tue Nov 3 19:05:40 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 3 19:05:43 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: References: Message-ID: > We can still use it to initalize the PRNG by using additional sources of > entropy (image name, path, vm version, whatever). We can use SHA1 to get > "more random" bits from out entropy sources. But this is more like a last > resort than a solution to rely on. I always thought a good list of hard-to-guess attributes injected in sequence with SHA1 feedback should be sufficiently hard to guess. millisecondClockValue, primUTCMicrosecondClock, timezone, Locale, available memory, consumed memory, vmpath, localpath, Display extent, Display imageForm, Sensor mouseX / mouseY, OS string, millisecondsToRun this I'm not against the new primitive idea, just have always been curious about digital security.. From Marcel.Taeumel at hpi.de Tue Nov 3 19:49:33 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 3 20:02:39 2015 Subject: [squeak-dev] Re: Seeding instances of Random In-Reply-To: References: Message-ID: <1446580173713-4859103.post@n4.nabble.com> ...and add the current/latest key presses or mouse movements. :-) Best, Marcel -- View this message in context: http://forum.world.st/Seeding-instances-of-Random-tp4859041p4859103.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Das.Linux at gmx.de Tue Nov 3 20:30:03 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Nov 3 20:30:07 2015 Subject: [squeak-dev] Re: Seeding instances of Random In-Reply-To: <1446580173713-4859103.post@n4.nabble.com> References: <1446580173713-4859103.post@n4.nabble.com> Message-ID: ?all of which _might_ be pretty similar at image start up On 03.11.2015, at 20:49, marcel.taeumel wrote: > ...and add the current/latest key presses or mouse movements. :-) > > Best, > Marcel From tim at rowledge.org Tue Nov 3 20:33:37 2015 From: tim at rowledge.org (tim Rowledge) Date: Tue Nov 3 20:33:42 2015 Subject: [squeak-dev] Re: Seeding instances of Random In-Reply-To: <1446580173713-4859103.post@n4.nabble.com> References: <1446580173713-4859103.post@n4.nabble.com> Message-ID: <37D30199-22D2-41F9-BF81-3B11CC9C3116@rowledge.org> > On 03-11-2015, at 11:49 AM, marcel.taeumel wrote: > > ...and add the current/latest key presses or mouse movements. :-) And a really hot cup of tea tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim May the bugs of many programs nest on your hard drive. From bert at freudenbergs.de Tue Nov 3 20:37:05 2015 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Nov 3 20:37:08 2015 Subject: [squeak-dev] Re: Seeding instances of Random In-Reply-To: <37D30199-22D2-41F9-BF81-3B11CC9C3116@rowledge.org> References: <1446580173713-4859103.post@n4.nabble.com> <37D30199-22D2-41F9-BF81-3B11CC9C3116@rowledge.org> Message-ID: <44AB5FEB-6E0D-4AA7-A9AE-B805CFF56AF1@freudenbergs.de> > On 03.11.2015, at 21:33, tim Rowledge wrote: > > >> On 03-11-2015, at 11:49 AM, marcel.taeumel wrote: >> >> ...and add the current/latest key presses or mouse movements. :-) > > And a really hot cup of tea That might add too much improbability. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4115 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151103/d9921a22/smime.bin From nicolas.cellier.aka.nice at gmail.com Tue Nov 3 20:59:08 2015 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue Nov 3 20:59:10 2015 Subject: [squeak-dev] CrLfFileStream Message-ID: Hi, I sea that CrLfFileStream is deprecated, but it has a subclass HtmlFileStream which is not... Nicolas -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151103/e4c2e076/attachment.htm From commits at source.squeak.org Tue Nov 3 21:16:39 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 3 21:16:41 2015 Subject: [squeak-dev] The Trunk: Monticello-nice.620.mcz Message-ID: Nicolas Cellier uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-nice.620.mcz ==================== Summary ==================== Name: Monticello-nice.620 Author: nice Time: 3 November 2015, 10:16:21.298 pm UUID: 028f7fc4-b668-413d-9416-24f828fc76ba Ancestors: Monticello-cmm.619 Remove the unsent/sole implementor lineEndingConvention: which make MC depends on a deprecated class... =============== Diff against Monticello-cmm.619 =============== Item was removed: - ----- Method: CrLfFileStream>>lineEndingConvention: (in category '*monticello') ----- - lineEndingConvention: aSymbol - lineEndConvention := aSymbol! From eliot.miranda at gmail.com Tue Nov 3 21:41:22 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Nov 3 21:41:25 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> Message-ID: On Tue, Nov 3, 2015 at 7:08 AM, Levente Uzonyi wrote: > My bad. It's still too early in the morning. :) I can join you. Today I put my freshly ground coffee into my mug, not the caffetiere :-/ > > Levente > > > On Tue, 3 Nov 2015, Eliot Miranda wrote: > > Hi Levente, >> >> On Nov 3, 2015, at 3:10 AM, Levente Uzonyi wrote: >>> >>> If Dave has fixed all packages in the 4.6 repository, and the packages >>> in the 4.6 and the 5.0 repositories are meant to be the same, then wouldn't >>> it be easier to just copy over these packages from the 4.6 repository? >>> >> >> Remember that Collections, Compiler, Kernel and System are the four >> packages that are definitely different between Spur/5.0 and V3/4.6. So can >> people check their package caches and find non-empty versions? I'll do >> this first thing. I expect I have ok versions because I've not used 4.6 >> yet. >> >> >>> Levente >>> >>> On Tue, 3 Nov 2015, marcel.taeumel wrote: >>>> >>>> Hi Chris, >>>> >>>> it seems that Kernel-cmm.937 and System-cmm.756 are "broken". The diff >>>> from >>>> my changes to Kernel-cmm.936 and System-cmm.755, which are the previous >>>> versions, looks fine. >>>> >>>> Considering that MCZs save the full snapshot anyway ... should I just >>>> commit? =) >>>> >>>> The Tools-cmm.629 looks fine and diffs fine. >>>> >>>> I touched all packages with this code: >>>> >>>> repo := MCRepositoryGroup default repositories detect: [:repo | repo >>>> description endsWith: 'squeak50']. >>>> >>>> PackageOrganizer default packages do: [:pkg | >>>> [(pkg mcPackage workingCopy changesRelativeToRepository: repo) >>>> isEmpty ifFalse: [pkg mcPackage workingCopy modified: true]] >>>> on: Warning do: [:warning | >>>> Transcript showln: pkg name; showln: warning messageText. >>>> warning resume]]. >>>> >>>> This is what I got: >>>> >>>> >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859057.html >>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>> >>> >>> >> >> > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151103/c0d1544b/attachment.htm From eliot.miranda at gmail.com Tue Nov 3 21:41:48 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Nov 3 21:41:51 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: <1446571215511-4859096.post@n4.nabble.com> References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> <1446571215511-4859096.post@n4.nabble.com> Message-ID: On Tue, Nov 3, 2015 at 12:20 PM, marcel.taeumel wrote: > Thanks for looking! > No luck :-( Nothing on either of my machines. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859096.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151103/85b5ce45/attachment.htm From commits at source.squeak.org Tue Nov 3 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 3 22:55:05 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151103225502.12541.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009099.html Name: Monticello-nice.620 Ancestors: Monticello-cmm.619 Remove the unsent/sole implementor lineEndingConvention: which make MC depends on a deprecated class... ============================================= From nicolas.cellier.aka.nice at gmail.com Tue Nov 3 23:13:25 2015 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue Nov 3 23:13:26 2015 Subject: [squeak-dev] Fwd: Problem while updating SecureHashAlgorithm In-Reply-To: References: Message-ID: Oops! wrong list... ---------- Forwarded message ---------- From: Nicolas Cellier Date: 2015-10-31 21:56 GMT+01:00 Subject: Problem while updating SecureHashAlgorithm To: Squeak Virtual Machine Development Discussion < vm-dev@lists.squeakfoundation.org> Hi, anyone else got a problem while updating SecureHashAlgorithm? The symptom is a SyntaxError window telling we cannot store into TA. TA is a new class variable, so we normally should be able to write into it. But the compiler fails because the classPool contains a ClassBinding instead of an Association for #TA... If I recompile SecureHashAlgorithm without the new class vars, then compile with the class vars again via the Browser, then I correctly get a classPool populated with Association only and I can proceed from the SyntaxError. Any idea where these ClassBinding came from? Nicolas -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151104/a48d10d9/attachment.htm From Marcel.Taeumel at hpi.de Wed Nov 4 06:53:57 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 4 07:07:06 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> <1446571215511-4859096.post@n4.nabble.com> Message-ID: <1446620037507-4859132.post@n4.nabble.com> There seem to be good versions in the trunk. I will try copying them over (again). Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859132.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Nov 4 07:11:44 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 4 07:24:52 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: <1446620037507-4859132.post@n4.nabble.com> References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> <1446571215511-4859096.post@n4.nabble.com> <1446620037507-4859132.post@n4.nabble.com> Message-ID: <1446621104112-4859134.post@n4.nabble.com> Success! Well, almost... ;-) Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859134.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Das.Linux at gmx.de Wed Nov 4 08:21:00 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Nov 4 08:21:03 2015 Subject: [squeak-dev] CrLfFileStream In-Reply-To: References: Message-ID: On 03.11.2015, at 21:59, Nicolas Cellier wrote: > Hi, > I sea that CrLfFileStream is deprecated, but it has a subclass HtmlFileStream which is not... > > Nicolas Odd? From Marcel.Taeumel at hpi.de Wed Nov 4 08:55:05 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 4 09:08:15 2015 Subject: [squeak-dev] Re: CrLfFileStream In-Reply-To: References: Message-ID: <1446627305047-4859139.post@n4.nabble.com> We could use the HtmlReadWriter for #asHtml instead and deprecate the HtmlFileStream? Best, Marcel -- View this message in context: http://forum.world.st/CrLfFileStream-tp4859110p4859139.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Nov 4 09:32:58 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 09:33:00 2015 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.92.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.92.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.92 Author: mt Time: 4 November 2015, 10:32:50.512 am UUID: b16fa7cb-f1cd-40b0-bf3f-29948e2e66e6 Ancestors: ToolBuilder-Kernel-topa.91 Updates message categories in list spec and tree spec. Adds possibility to override scroll bar policies in trees like it works in lists or scroll panes. =============== Diff against ToolBuilder-Kernel-topa.91 =============== Item was changed: + ----- Method: PluggableListSpec>>autoDeselect (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>autoDeselect (in category 'accessing') ----- autoDeselect "Answer whether this tree can be automatically deselected" ^autoDeselect ifNil:[true]! Item was changed: + ----- Method: PluggableListSpec>>autoDeselect: (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>autoDeselect: (in category 'accessing') ----- autoDeselect: aBool "Indicate whether this tree can be automatically deselected" autoDeselect := aBool! Item was changed: + ----- Method: PluggableListSpec>>dragItem (in category 'accessing - drag and drop') ----- - ----- Method: PluggableListSpec>>dragItem (in category 'accessing') ----- dragItem "Answer the selector for dragging an item" ^dragItem! Item was changed: + ----- Method: PluggableListSpec>>dragItem: (in category 'accessing - drag and drop') ----- - ----- Method: PluggableListSpec>>dragItem: (in category 'accessing') ----- dragItem: aSymbol "Set the selector for dragging an item" dragItem := aSymbol! Item was changed: + ----- Method: PluggableListSpec>>dropAccept (in category 'accessing - drag and drop') ----- - ----- Method: PluggableListSpec>>dropAccept (in category 'accessing') ----- dropAccept "Answer the selector to determine whether a drop would be accepted" ^dropAccept! Item was changed: + ----- Method: PluggableListSpec>>dropAccept: (in category 'accessing - drag and drop') ----- - ----- Method: PluggableListSpec>>dropAccept: (in category 'accessing') ----- dropAccept: aSymbol "Answer the selector to determine whether a drop would be accepted" dropAccept := aSymbol.! Item was changed: + ----- Method: PluggableListSpec>>dropItem (in category 'accessing - drag and drop') ----- - ----- Method: PluggableListSpec>>dropItem (in category 'accessing') ----- dropItem "Answer the selector for dropping an item" ^dropItem! Item was changed: + ----- Method: PluggableListSpec>>dropItem: (in category 'accessing - drag and drop') ----- - ----- Method: PluggableListSpec>>dropItem: (in category 'accessing') ----- dropItem: aSymbol "Set the selector for dropping an item" dropItem := aSymbol! Item was changed: + ----- Method: PluggableListSpec>>getIndex (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>getIndex (in category 'accessing') ----- getIndex "Answer the selector for retrieving the list's selection index" ^getIndex! Item was changed: + ----- Method: PluggableListSpec>>getIndex: (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>getIndex: (in category 'accessing') ----- getIndex: aSymbol "Indicate the selector for retrieving the list's selection index" getIndex := aSymbol! Item was changed: + ----- Method: PluggableListSpec>>getSelected (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>getSelected (in category 'accessing') ----- getSelected "Answer the selector for retrieving the list selection" ^getSelected! Item was changed: + ----- Method: PluggableListSpec>>getSelected: (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>getSelected: (in category 'accessing') ----- getSelected: aSymbol "Indicate the selector for retrieving the list selection" getSelected := aSymbol! Item was changed: + ----- Method: PluggableListSpec>>list (in category 'accessing - list') ----- - ----- Method: PluggableListSpec>>list (in category 'accessing') ----- list "Answer the selector for retrieving the list contents" ^list! Item was changed: + ----- Method: PluggableListSpec>>list: (in category 'accessing - list') ----- - ----- Method: PluggableListSpec>>list: (in category 'accessing') ----- list: aSymbol "Indicate the selector for retrieving the list contents" list := aSymbol.! Item was changed: + ----- Method: PluggableListSpec>>listItem (in category 'accessing - list') ----- - ----- Method: PluggableListSpec>>listItem (in category 'accessing') ----- listItem "Answer the selector for retrieving the list element" ^listItem! Item was changed: + ----- Method: PluggableListSpec>>listItem: (in category 'accessing - list') ----- - ----- Method: PluggableListSpec>>listItem: (in category 'accessing') ----- listItem: aSymbol "Indicate the selector for retrieving the list element" listItem := aSymbol.! Item was changed: + ----- Method: PluggableListSpec>>listSize (in category 'accessing - list') ----- - ----- Method: PluggableListSpec>>listSize (in category 'accessing') ----- listSize "Answer the selector for retrieving the list size" ^listSize! Item was changed: + ----- Method: PluggableListSpec>>listSize: (in category 'accessing - list') ----- - ----- Method: PluggableListSpec>>listSize: (in category 'accessing') ----- listSize: aSymbol "Indicate the selector for retrieving the list size" listSize := aSymbol.! Item was changed: + ----- Method: PluggableListSpec>>setIndex (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>setIndex (in category 'accessing') ----- setIndex "Answer the selector for setting the list's selection index" ^setIndex! Item was changed: + ----- Method: PluggableListSpec>>setIndex: (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>setIndex: (in category 'accessing') ----- setIndex: aSymbol "Answer the selector for setting the list's selection index" setIndex := aSymbol! Item was changed: + ----- Method: PluggableListSpec>>setSelected (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>setSelected (in category 'accessing') ----- setSelected "Answer the selector for setting the list selection" ^setSelected! Item was changed: + ----- Method: PluggableListSpec>>setSelected: (in category 'accessing - selection') ----- - ----- Method: PluggableListSpec>>setSelected: (in category 'accessing') ----- setSelected: aSymbol "Indicate the selector for setting the list selection" setSelected := aSymbol! Item was changed: PluggableWidgetSpec subclass: #PluggableTreeSpec + instanceVariableNames: 'roots getSelectedPath setSelected getSelected setSelectedParent getChildren hasChildren label icon unusedVar menu keyPress wantsDrop dropItem dropAccept autoDeselect dragItem nodeClass columns vScrollBarPolicy hScrollBarPolicy' - instanceVariableNames: 'roots getSelectedPath setSelected getSelected setSelectedParent getChildren hasChildren label icon unusedVar menu keyPress wantsDrop dropItem dropAccept autoDeselect dragItem nodeClass columns' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableTreeSpec commentStamp: 'mvdg 3/21/2008 20:59' prior: 0! A pluggable tree widget. PluggableTrees are slightly different from lists in such that they ALWAYS store the actual objects and use the label selector to query for the label of the item. PluggableTrees also behave somewhat differently in such that they do not have a "getSelected" message but only a getSelectedPath message. The difference is that getSelectedPath is used to indicate by the model that the tree should select the appropriate path. This allows disambiguation of items. Because of this, implementations of PluggableTrees must always set their internal selection directly, e.g., rather than sending the model a setSelected message and wait for an update of the #getSelected the implementation must set the selection before sending the #setSelected message. If a client doesn't want this, it can always just signal a change of getSelectedPath to revert to whatever is needed. Instance variables: roots The message to retrieve the roots of the tree. getSelectedPath The message to retrieve the selected path in the tree. setSelected The message to set the selected item in the tree. getChildren The message to retrieve the children of an item hasChildren The message to query for children of an item label The message to query for the label of an item. icon The message to query for the icon of an item. help The message to query for the help of an item. menu The message to query for the tree's menu keyPress The message to process a keystroke. wantsDrop The message to query whether a drop might be accepted. dropItem The message to drop an item. enableDrag Enable dragging from this tree. autoDeselect Whether the tree should allow automatic deselection or not. unusedVar (unused) This variable is a placeholder to fix problems with loading packages in 3.10.! Item was changed: + ----- Method: PluggableTreeSpec>>autoDeselect (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>autoDeselect (in category 'accessing') ----- autoDeselect "Answer whether this tree can be automatically deselected" ^autoDeselect ifNil:[true]! Item was changed: + ----- Method: PluggableTreeSpec>>autoDeselect: (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>autoDeselect: (in category 'accessing') ----- autoDeselect: aBool "Indicate whether this tree can be automatically deselected" autoDeselect := aBool.! Item was changed: + ----- Method: PluggableTreeSpec>>dragItem (in category 'accessing - drag and drop') ----- - ----- Method: PluggableTreeSpec>>dragItem (in category 'accessing') ----- dragItem ^ dragItem.! Item was changed: + ----- Method: PluggableTreeSpec>>dragItem: (in category 'accessing - drag and drop') ----- - ----- Method: PluggableTreeSpec>>dragItem: (in category 'accessing') ----- dragItem: aSymbol "Set the selector for dragging an item" dragItem := aSymbol! Item was changed: + ----- Method: PluggableTreeSpec>>dropAccept (in category 'accessing - drag and drop') ----- - ----- Method: PluggableTreeSpec>>dropAccept (in category 'accessing') ----- dropAccept "Answer the selector for querying the receiver about accepting drops" ^dropAccept! Item was changed: + ----- Method: PluggableTreeSpec>>dropAccept: (in category 'accessing - drag and drop') ----- - ----- Method: PluggableTreeSpec>>dropAccept: (in category 'accessing') ----- dropAccept: aSymbol "Set the selector for querying the receiver about accepting drops" dropAccept := aSymbol! Item was changed: + ----- Method: PluggableTreeSpec>>dropItem (in category 'accessing - drag and drop') ----- - ----- Method: PluggableTreeSpec>>dropItem (in category 'accessing') ----- dropItem "Answer the selector for invoking the tree's dragDrop handler" ^dropItem! Item was changed: + ----- Method: PluggableTreeSpec>>dropItem: (in category 'accessing - drag and drop') ----- - ----- Method: PluggableTreeSpec>>dropItem: (in category 'accessing') ----- dropItem: aSymbol "Indicate the selector for invoking the tree's dragDrop handler" dropItem := aSymbol! Item was changed: + ----- Method: PluggableTreeSpec>>getChildren (in category 'accessing - hierarchy') ----- - ----- Method: PluggableTreeSpec>>getChildren (in category 'accessing') ----- getChildren "Answer the message to get the children of this tree" ^getChildren! Item was changed: + ----- Method: PluggableTreeSpec>>getChildren: (in category 'accessing - hierarchy') ----- - ----- Method: PluggableTreeSpec>>getChildren: (in category 'accessing') ----- getChildren: aSymbol "Indicate the message to retrieve the children of this tree" getChildren := aSymbol! Item was changed: + ----- Method: PluggableTreeSpec>>getSelected (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>getSelected (in category 'accessing') ----- getSelected ^ getSelected! Item was changed: + ----- Method: PluggableTreeSpec>>getSelected: (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>getSelected: (in category 'accessing') ----- getSelected: aSymbol "Indicate a single node in the tree. Only works if that node is visible, too. Use #getSelectedPath otherwise." getSelected := aSymbol.! Item was changed: + ----- Method: PluggableTreeSpec>>getSelectedPath (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>getSelectedPath (in category 'accessing') ----- getSelectedPath "Answer the message to retrieve the selection of this tree" ^getSelectedPath! Item was changed: + ----- Method: PluggableTreeSpec>>getSelectedPath: (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>getSelectedPath: (in category 'accessing') ----- getSelectedPath: aSymbol "Indicate the message to retrieve the selection of this tree" getSelectedPath := aSymbol! Item was added: + ----- Method: PluggableTreeSpec>>hScrollBarPolicy (in category 'accessing') ----- + hScrollBarPolicy + + ^ hScrollBarPolicy! Item was added: + ----- Method: PluggableTreeSpec>>hScrollBarPolicy: (in category 'accessing') ----- + hScrollBarPolicy: aSymbol + "#always, #never, #whenNeeded" + + hScrollBarPolicy := aSymbol.! Item was changed: + ----- Method: PluggableTreeSpec>>hasChildren (in category 'accessing - hierarchy') ----- - ----- Method: PluggableTreeSpec>>hasChildren (in category 'accessing') ----- hasChildren "Answer the message to get the existence of children in this tree" ^hasChildren! Item was changed: + ----- Method: PluggableTreeSpec>>hasChildren: (in category 'accessing - hierarchy') ----- - ----- Method: PluggableTreeSpec>>hasChildren: (in category 'accessing') ----- hasChildren: aSymbol "Indicate the message to retrieve the existence children in this tree" hasChildren := aSymbol! Item was changed: + ----- Method: PluggableTreeSpec>>roots (in category 'accessing - hierarchy') ----- - ----- Method: PluggableTreeSpec>>roots (in category 'accessing') ----- roots "Answer the message to retrieve the roots of this tree" ^roots! Item was changed: + ----- Method: PluggableTreeSpec>>roots: (in category 'accessing - hierarchy') ----- - ----- Method: PluggableTreeSpec>>roots: (in category 'accessing') ----- roots: aSymbol "Indicate the message to retrieve the roots of this tree" roots := aSymbol! Item was changed: + ----- Method: PluggableTreeSpec>>setSelected (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>setSelected (in category 'accessing') ----- setSelected "Answer the message to set the selection of this tree" ^setSelected! Item was changed: + ----- Method: PluggableTreeSpec>>setSelected: (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>setSelected: (in category 'accessing') ----- setSelected: aSymbol "Indicate the message to set the selection of this tree" setSelected := aSymbol! Item was changed: + ----- Method: PluggableTreeSpec>>setSelectedParent (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>setSelectedParent (in category 'accessing') ----- setSelectedParent ^ setSelectedParent! Item was changed: + ----- Method: PluggableTreeSpec>>setSelectedParent: (in category 'accessing - selection') ----- - ----- Method: PluggableTreeSpec>>setSelectedParent: (in category 'accessing') ----- setSelectedParent: aSymbol setSelectedParent := aSymbol! Item was added: + ----- Method: PluggableTreeSpec>>vScrollBarPolicy (in category 'accessing') ----- + vScrollBarPolicy + + ^ vScrollBarPolicy! Item was added: + ----- Method: PluggableTreeSpec>>vScrollBarPolicy: (in category 'accessing') ----- + vScrollBarPolicy: aSymbol + "#always, #never, #whenNeeded" + + vScrollBarPolicy := aSymbol.! Item was changed: + ----- Method: PluggableTreeSpec>>wantsDrop (in category 'accessing - drag and drop') ----- - ----- Method: PluggableTreeSpec>>wantsDrop (in category 'accessing') ----- wantsDrop "Answer the selector for invoking the tree's wantsDrop handler" ^wantsDrop! Item was changed: + ----- Method: PluggableTreeSpec>>wantsDrop: (in category 'accessing - drag and drop') ----- - ----- Method: PluggableTreeSpec>>wantsDrop: (in category 'accessing') ----- wantsDrop: aSymbol "Indicate the selector for invoking the tree's wantsDrop handler" wantsDrop := aSymbol! From commits at source.squeak.org Wed Nov 4 09:33:59 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 09:34:02 2015 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.150.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.150.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.150 Author: mt Time: 4 November 2015, 10:33:51.502 am UUID: 4df461c0-47b8-4cda-a915-4277646038fb Ancestors: ToolBuilder-Morphic-mt.149 Adds support for overriding scrollbar policies in trees. =============== Diff against ToolBuilder-Morphic-mt.149 =============== Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableTree: (in category 'widgets required') ----- buildPluggableTree: aSpec | widget | widget := self treeClass new. self register: widget id: aSpec name. widget model: aSpec model. widget getSelectedPathSelector: aSpec getSelectedPath. widget setSelectedSelector: aSpec setSelected. widget getSelectedSelector: aSpec getSelected. widget setSelectedParentSelector: aSpec setSelectedParent. widget getChildrenSelector: aSpec getChildren. widget hasChildrenSelector: aSpec hasChildren. widget getLabelSelector: aSpec label. widget getIconSelector: aSpec icon. widget getHelpSelector: aSpec help. widget getMenuSelector: aSpec menu. widget keystrokeActionSelector: aSpec keyPress. widget nodeClass: aSpec nodeClass. widget getRootsSelector: aSpec roots. widget autoDeselect: aSpec autoDeselect. widget dropItemSelector: aSpec dropItem. widget wantsDropSelector: aSpec dropAccept. widget dragItemSelector: aSpec dragItem. widget columns: aSpec columns. + "Override default scroll bar policies if needed. Widget will use preference values otherwise." + aSpec hScrollBarPolicy ifNotNil: [:policy | + policy caseOf: { + [#always] -> [widget alwaysShowHScrollBar]. + [#never] -> [widget hideHScrollBarIndefinitely]. + [#whenNeeded] -> [widget showHScrollBarOnlyWhenNeeded]. } ]. + aSpec vScrollBarPolicy ifNotNil: [:policy | + policy caseOf: { + [#always] -> [widget alwaysShowVScrollBar]. + [#never] -> [widget hideVScrollBarIndefinitely]. + [#whenNeeded] -> [widget showVScrollBarOnlyWhenNeeded]. } ]. + self setFrame: aSpec frame in: widget. self setLayoutHintsFor: widget spec: aSpec. parent ifNotNil:[self add: widget to: parent]. " panes ifNotNil:[ aSpec roots ifNotNil:[panes add: aSpec roots]. ]. " ^widget! From commits at source.squeak.org Wed Nov 4 09:41:27 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 09:41:29 2015 Subject: [squeak-dev] The Trunk: SMLoader-mt.86.mcz Message-ID: Marcel Taeumel uploaded a new version of SMLoader to project The Trunk: http://source.squeak.org/trunk/SMLoader-mt.86.mcz ==================== Summary ==================== Name: SMLoader-mt.86 Author: mt Time: 4 November 2015, 10:41:19.319 am UUID: 235be22c-ca32-4ff4-b87c-73a6a8a58862 Ancestors: SMLoader-cmm.85 Code clean-up. =============== Diff against SMLoader-cmm.85 =============== Item was changed: ----- Method: SMLoaderCategoricalPlus>>buildInstalledPackagesListWith: (in category 'DEPRECATED') ----- buildInstalledPackagesListWith: aBuilder ^ aBuilder pluggableTreeSpec new model: self; roots: #installedPackageList; getSelectedPath: #selectedItemPath; getSelected: #selectedItem; setSelected: #selectedItem:; menu: #packagesMenu:; label: #itemLabel:; getChildren: #itemChildren:; hasChildren: #itemHasChildren:; autoDeselect: true; - wantsDrop: true; yourself! Item was changed: ----- Method: SMLoaderCategoricalPlus>>buildNotInstalledPackagesListWith: (in category 'DEPRECATED') ----- buildNotInstalledPackagesListWith: aBuilder ^ aBuilder pluggableTreeSpec new model: self; roots: #notInstalledPackageList; getSelectedPath: #selectedItemPath; getSelected: #selectedItem; setSelected: #selectedItem:; menu: #packagesMenu:; label: #itemLabel:; getChildren: #itemChildren:; hasChildren: #itemHasChildren:; autoDeselect: true; - wantsDrop: true; yourself! Item was changed: ----- Method: SMLoaderPlus>>buildCategoriesListWith: (in category 'interface') ----- buildCategoriesListWith: aBuilder "Create the hierarchical list holding the category tree." ^ aBuilder pluggableTreeSpec new model: self; roots: #categoryList; getSelectedPath: #selectedCategoryPath; getChildren: #categoryChildren:; hasChildren: #categoryHasChildren:; setSelected: #selectedCategory:; getSelected: #selectedCategory; menu: #categoriesMenu:; label: #categoryLabel:; autoDeselect: true; - wantsDrop: true; name: #categoriesList; yourself! Item was changed: ----- Method: SMLoaderPlus>>buildPackagesListWith: (in category 'interface') ----- buildPackagesListWith: aBuilder "Create the hierarchical list holding the packages and releases." ^ aBuilder pluggableTreeSpec new model: self; roots: #packageList; getSelectedPath: #selectedItemPath; getSelected: #selectedItem; setSelected: #selectedItem:; menu: #packagesMenu:; label: #itemLabel:; getChildren: #itemChildren:; hasChildren: #itemHasChildren:; autoDeselect: true; - wantsDrop: true; name: #packagesList; yourself! From commits at source.squeak.org Wed Nov 4 09:42:46 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 09:42:48 2015 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.93.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.93.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.93 Author: mt Time: 4 November 2015, 10:42:39.831 am UUID: 7641f554-712a-4031-ad7f-986f3aa658b0 Ancestors: ToolBuilder-Kernel-mt.92 Removes unused and obsolete #wantsDrop accessors and instVar. We have #dropAccept for that. =============== Diff against ToolBuilder-Kernel-mt.92 =============== Item was changed: PluggableWidgetSpec subclass: #PluggableTreeSpec + instanceVariableNames: 'roots getSelectedPath setSelected getSelected setSelectedParent getChildren hasChildren label icon unusedVar menu keyPress dropItem dropAccept autoDeselect dragItem nodeClass columns vScrollBarPolicy hScrollBarPolicy' - instanceVariableNames: 'roots getSelectedPath setSelected getSelected setSelectedParent getChildren hasChildren label icon unusedVar menu keyPress wantsDrop dropItem dropAccept autoDeselect dragItem nodeClass columns vScrollBarPolicy hScrollBarPolicy' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableTreeSpec commentStamp: 'mvdg 3/21/2008 20:59' prior: 0! A pluggable tree widget. PluggableTrees are slightly different from lists in such that they ALWAYS store the actual objects and use the label selector to query for the label of the item. PluggableTrees also behave somewhat differently in such that they do not have a "getSelected" message but only a getSelectedPath message. The difference is that getSelectedPath is used to indicate by the model that the tree should select the appropriate path. This allows disambiguation of items. Because of this, implementations of PluggableTrees must always set their internal selection directly, e.g., rather than sending the model a setSelected message and wait for an update of the #getSelected the implementation must set the selection before sending the #setSelected message. If a client doesn't want this, it can always just signal a change of getSelectedPath to revert to whatever is needed. Instance variables: roots The message to retrieve the roots of the tree. getSelectedPath The message to retrieve the selected path in the tree. setSelected The message to set the selected item in the tree. getChildren The message to retrieve the children of an item hasChildren The message to query for children of an item label The message to query for the label of an item. icon The message to query for the icon of an item. help The message to query for the help of an item. menu The message to query for the tree's menu keyPress The message to process a keystroke. wantsDrop The message to query whether a drop might be accepted. dropItem The message to drop an item. enableDrag Enable dragging from this tree. autoDeselect Whether the tree should allow automatic deselection or not. unusedVar (unused) This variable is a placeholder to fix problems with loading packages in 3.10.! Item was removed: - ----- Method: PluggableTreeSpec>>wantsDrop (in category 'accessing - drag and drop') ----- - wantsDrop - "Answer the selector for invoking the tree's wantsDrop handler" - ^wantsDrop! Item was removed: - ----- Method: PluggableTreeSpec>>wantsDrop: (in category 'accessing - drag and drop') ----- - wantsDrop: aSymbol - "Indicate the selector for invoking the tree's wantsDrop handler" - wantsDrop := aSymbol! From asqueaker at gmail.com Wed Nov 4 16:28:19 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 4 16:28:22 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: <1446621104112-4859134.post@n4.nabble.com> References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> <1446571215511-4859096.post@n4.nabble.com> <1446620037507-4859132.post@n4.nabble.com> <1446621104112-4859134.post@n4.nabble.com> Message-ID: Did you try clearing your package-cache of the offending versions? When I tried your script, it worked fine for me.. On Wed, Nov 4, 2015 at 1:11 AM, marcel.taeumel wrote: > Success! Well, almost... ;-) > > > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859134.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From btc at openinworld.com Wed Nov 4 16:55:06 2015 From: btc at openinworld.com (Ben Coman) Date: Wed Nov 4 16:55:48 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: References: Message-ID: On Wed, Nov 4, 2015 at 1:38 AM, Colin Putney wrote: > > > On Mon, Nov 2, 2015 at 4:32 PM, Levente Uzonyi wrote: >> >> Hi All, >> >> With the recent UUID changes, we're facing the problem of properly seeding >> a Random instance. The current method provides only 2^32 different initial >> states, with which the chance for two images to have the same values on >> startup is way too high (~9300 startups for 1% chance of collision). >> To avoid the collisions we need a reliable source of random bytes. >> Currently we have the following sources: >> 1. /dev/urandom: fast, reliable, but not available on all platforms (e.g. >> windows). >> 2. UUIDPlugin: fast, but this is what we wanted to get rid of in the first >> place, so it may not be available. >> 3. Audio recorded through SoundSystem: slow, unreliable, and it may not be >> available. >> 4. Time primUTCMicrosecondClock. On its own it has way too little entropy. >> We can still use it to initalize the PRNG by using additional sources of >> entropy (image name, path, vm version, whatever). We can use SHA1 to get >> "more random" bits from out entropy sources. But this is more like a last >> resort than a solution to rely on. >> >> So I suggest we should create a new primitive, which can fill a given >> indexable object (bytes and optionally words) with random values - the same >> way Random >> #nextBytes:into:startingAt: works. It could use CryptGenRandom >> on Windows, and /dev/urandom on other unix-like platforms. >> >> As fallback mechanisms, I'd implement 1. 2. and optionally 4., and use >> them in the given order. The drawback of these mechanisms is that they >> create unwanted package dependencies, because Random is in Kernel, while >> most potetial sources of entropy, along with SHA1, are in other packages. > > > Why do we want to get rid of UUIDPlugin? Is it just because fewer plugins is > better, or is there a problem with this one in particular? > > Also, if we're going to have a primitive that supplies fast, high-quality, > random bytes, shouldn't Random just call that for random values, rather than > seeding a PRNG? If I properly understood my recent reading on this, every time you take a number from a True-RNG, you reduce its entropy pool, which may only refill slowly on a remote server. >From http://linux.die.net/man/4/urandom ... "The kernel random-number generator is designed to produce a small amount of high-quality seed material to seed a cryptographic pseudo-random number generator (CPRNG). It is designed for security, not speed, and is poorly suited to generating large amounts of random data. Users should be very economical in the amount of seed material that they read from /dev/urandom (and /dev/random); unnecessarily reading large quantities of data from this device will have a negative impact on other users of the device" cheers -ben From Das.Linux at gmx.de Wed Nov 4 17:11:11 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Nov 4 17:11:15 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: References: Message-ID: <25A73B64-795F-41BA-B809-70DD4066D9AD@gmx.de> On 04.11.2015, at 17:55, Ben Coman wrote: > On Wed, Nov 4, 2015 at 1:38 AM, Colin Putney wrote: >> >> >> On Mon, Nov 2, 2015 at 4:32 PM, Levente Uzonyi wrote: >>> >>> Hi All, >>> >>> With the recent UUID changes, we're facing the problem of properly seeding >>> a Random instance. The current method provides only 2^32 different initial >>> states, with which the chance for two images to have the same values on >>> startup is way too high (~9300 startups for 1% chance of collision). >>> To avoid the collisions we need a reliable source of random bytes. >>> Currently we have the following sources: >>> 1. /dev/urandom: fast, reliable, but not available on all platforms (e.g. >>> windows). >>> 2. UUIDPlugin: fast, but this is what we wanted to get rid of in the first >>> place, so it may not be available. >>> 3. Audio recorded through SoundSystem: slow, unreliable, and it may not be >>> available. >>> 4. Time primUTCMicrosecondClock. On its own it has way too little entropy. >>> We can still use it to initalize the PRNG by using additional sources of >>> entropy (image name, path, vm version, whatever). We can use SHA1 to get >>> "more random" bits from out entropy sources. But this is more like a last >>> resort than a solution to rely on. >>> >>> So I suggest we should create a new primitive, which can fill a given >>> indexable object (bytes and optionally words) with random values - the same >>> way Random >> #nextBytes:into:startingAt: works. It could use CryptGenRandom >>> on Windows, and /dev/urandom on other unix-like platforms. >>> >>> As fallback mechanisms, I'd implement 1. 2. and optionally 4., and use >>> them in the given order. The drawback of these mechanisms is that they >>> create unwanted package dependencies, because Random is in Kernel, while >>> most potetial sources of entropy, along with SHA1, are in other packages. >> >> >> Why do we want to get rid of UUIDPlugin? Is it just because fewer plugins is >> better, or is there a problem with this one in particular? >> >> Also, if we're going to have a primitive that supplies fast, high-quality, >> random bytes, shouldn't Random just call that for random values, rather than >> seeding a PRNG? > > If I properly understood my recent reading on this, every time you > take a number from a True-RNG, you reduce its entropy pool, which may > only refill slowly on a remote server. > >> From http://linux.die.net/man/4/urandom ... > "The kernel random-number generator is designed to produce a small > amount of high-quality seed material to seed a cryptographic > pseudo-random number generator (CPRNG). It is designed for security, > not speed, and is poorly suited to generating large amounts of random > data. Users should be very economical in the amount of seed material > that they read from /dev/urandom (and /dev/random); unnecessarily > reading large quantities of data from this device will have a negative > impact on other users of the device" Yes. but there's more platforms than Linux to care about :) How'd we do it on, say, RiscOS or FreeBSD? Best regards -Tobias PS: FreeBSD is not hypothetical, we've got a student working with Squeak on FreeBSD? From commits at source.squeak.org Wed Nov 4 17:47:49 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 17:47:51 2015 Subject: [squeak-dev] The Trunk: Kernel-mt.965.mcz Message-ID: Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.965.mcz ==================== Summary ==================== Name: Kernel-mt.965 Author: mt Time: 4 November 2015, 6:47:19.492 pm UUID: bc2a01d5-b9c9-4111-bfd0-a2a19ae61e88 Ancestors: Kernel-ul.964 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. =============== Diff against Kernel-ul.964 =============== Item was removed: - ----- Method: Object>>dragAnimationFor:transferMorph: (in category 'drag and drop') ----- - dragAnimationFor: item transferMorph: transferMorph - "Default do nothing"! Item was added: + ----- Method: Object>>dragStartedFor:transferMorph: (in category 'drag and drop') ----- + dragStartedFor: anItemMorph transferMorph: aTransferMorph + "Give the model a chance to respond to a started drag operation. Could be used to give a notification or play an animation. Do nothing by default."! Item was removed: - ----- Method: Object>>dragTransferType (in category 'drag and drop') ----- - dragTransferType - ^nil! From commits at source.squeak.org Wed Nov 4 17:50:06 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 17:50:08 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1026.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1026.mcz ==================== Summary ==================== Name: Morphic-mt.1026 Author: mt Time: 4 November 2015, 6:49:25.917 pm UUID: a15f3e14-7c49-4d00-988f-ab69d4a499f8 Ancestors: Morphic-mt.1025 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. =============== Diff against Morphic-mt.1025 =============== Item was changed: ----- Method: PluggableListMorph>>startDrag: (in category 'drag and drop') ----- startDrag: evt + + | item itemMorph | + evt hand hasSubmorphs ifTrue: [^ self]. + self model okToChange ifFalse: [^ self]. + + item := self selection ifNil: [^ self]. + itemMorph := StringMorph contents: item asStringOrText. + [ "Initiate drag." + (self model dragPassengerFor: itemMorph inMorph: self) ifNotNil: [:passenger | | ddm | + ddm := (self valueOfProperty: #dragTransferClass ifAbsent: [TransferMorph]) withPassenger: passenger from: self. + ddm dragTransferType: (self model dragTransferTypeForMorph: self). + ddm updateFromUserInputEvent: evt. + self model dragStartedFor: itemMorph transferMorph: ddm. + evt hand grabMorph: ddm] + ] ensure: [ + Cursor normal show. + evt hand releaseMouseFocus: self].! - evt hand hasSubmorphs - ifTrue: [^ self]. - [ | draggedItem draggedItemMorph passenger ddm | - (self dragEnabled and: [model okToChange]) - ifFalse: [^ self]. - (draggedItem := self selection) - ifNil: [^ self]. - draggedItemMorph := StringMorph contents: draggedItem asStringOrText. - passenger := self model dragPassengerFor: draggedItemMorph inMorph: self. - passenger - ifNil: [^ self]. - ddm := TransferMorph withPassenger: passenger from: self. - ddm - dragTransferType: (self model dragTransferTypeForMorph: self). - Preferences dragNDropWithAnimation - ifTrue: [self model dragAnimationFor: draggedItemMorph transferMorph: ddm]. - evt hand grabMorph: ddm] - ensure: [Cursor normal show. - evt hand releaseMouseFocus: self]! Item was changed: + ----- Method: PluggableListMorph>>wantsDroppedMorph:event: (in category 'drag and drop') ----- - ----- Method: PluggableListMorph>>wantsDroppedMorph:event: (in category 'dropping/grabbing') ----- wantsDroppedMorph: aMorph event: anEvent ^ self model wantsDroppedMorph: aMorph event: anEvent inMorph: self! Item was changed: + ----- Method: SimpleHierarchicalListMorph>>acceptDroppingMorph:event: (in category 'drag and drop') ----- - ----- Method: SimpleHierarchicalListMorph>>acceptDroppingMorph:event: (in category 'dropping/grabbing') ----- acceptDroppingMorph: aMorph event: evt self model acceptDroppingMorph: aMorph event: evt inMorph: self. self resetPotentialDropMorph. evt hand releaseMouseFocus: self. Cursor normal show. ! Item was changed: + ----- Method: SimpleHierarchicalListMorph>>potentialDropMorph (in category 'drag and drop') ----- - ----- Method: SimpleHierarchicalListMorph>>potentialDropMorph (in category 'dropping/grabbing') ----- potentialDropMorph ^potentialDropMorph! Item was changed: + ----- Method: SimpleHierarchicalListMorph>>potentialDropMorph: (in category 'drag and drop') ----- - ----- Method: SimpleHierarchicalListMorph>>potentialDropMorph: (in category 'dropping/grabbing') ----- potentialDropMorph: aMorph potentialDropMorph := aMorph. aMorph highlightForDrop! Item was changed: + ----- Method: SimpleHierarchicalListMorph>>resetPotentialDropMorph (in category 'drag and drop') ----- - ----- Method: SimpleHierarchicalListMorph>>resetPotentialDropMorph (in category 'dropping/grabbing') ----- resetPotentialDropMorph potentialDropMorph ifNotNil: [ potentialDropMorph resetHighlightForDrop. potentialDropMorph := nil] ! Item was changed: ----- Method: SimpleHierarchicalListMorph>>setSelectedMorph: (in category 'selection') ----- setSelectedMorph: aMorph + "Avoid unnecessary model callbacks." + self selectedMorph == aMorph ifTrue: [^ self]. + model perform: (setSelectionSelector ifNil: [^self]) with: aMorph complexContents "leave last wrapper in place" ! Item was changed: + ----- Method: SimpleHierarchicalListMorph>>startDrag: (in category 'drag and drop') ----- - ----- Method: SimpleHierarchicalListMorph>>startDrag: (in category 'event handling') ----- startDrag: evt + + | itemMorph | + evt hand hasSubmorphs ifTrue: [^ self]. + self model okToChange ifFalse: [^ self]. + + itemMorph := scroller submorphs + detect: [:any | any highlightedForMouseDown] + ifNone: [^ self]. + + "Prepare visuals." - | ddm itemMorph passenger | - self dragEnabled - ifTrue: [itemMorph := scroller submorphs - detect: [:any | any highlightedForMouseDown] - ifNone: []]. - (itemMorph isNil - or: [evt hand hasSubmorphs]) - ifTrue: [^ self]. itemMorph highlightForMouseDown: false. + self setSelectedMorph: itemMorph. + + [ "Initiate drag." + (self model dragPassengerFor: itemMorph inMorph: self) ifNotNil: [:passenger | | ddm | + ddm := (self valueOfProperty: #dragTransferClass ifAbsent: [TransferMorph]) withPassenger: passenger from: self. + ddm dragTransferType: (self model dragTransferTypeForMorph: self). + ddm updateFromUserInputEvent: evt. + self model dragStartedFor: itemMorph transferMorph: ddm. - itemMorph ~= self selectedMorph - ifTrue: [self setSelectedMorph: itemMorph]. - passenger := self model dragPassengerFor: itemMorph inMorph: self. - passenger - ifNotNil: [ddm := TransferMorph withPassenger: passenger from: self. - ddm - dragTransferType: (self model dragTransferTypeForMorph: self). - Preferences dragNDropWithAnimation - ifTrue: [self model dragAnimationFor: itemMorph transferMorph: ddm]. evt hand grabMorph: ddm]. + ] ensure: [ + Cursor normal show. + evt hand releaseMouseFocus: self].! - evt hand releaseMouseFocus: self! Item was changed: + ----- Method: SimpleHierarchicalListMorph>>wantsDroppedMorph:event: (in category 'drag and drop') ----- - ----- Method: SimpleHierarchicalListMorph>>wantsDroppedMorph:event: (in category 'dropping/grabbing') ----- wantsDroppedMorph: aMorph event: anEvent ^ self model wantsDroppedMorph: aMorph event: anEvent inMorph: self! Item was changed: ----- Method: TransferMorph class>>withPassenger: (in category 'instance creation') ----- withPassenger: anObject + + ^ self + withPassenger: anObject + from: nil! - ^ self withPassenger: anObject from: nil! Item was changed: ----- Method: TransferMorph class>>withPassenger:from: (in category 'instance creation') ----- withPassenger: anObject from: source + + ^ self new + passenger: anObject; + source: source; + yourself! - | ddm | - ddm := self new. - ddm passenger: anObject. - ddm source: source. - Sensor shiftPressed ifTrue: [ddm shouldCopy: true]. - ^ ddm! Item was changed: ----- Method: TransferMorph>>aboutToBeGrabbedBy: (in category 'dropping/grabbing') ----- aboutToBeGrabbedBy: aHand "The receiver is being grabbed by a hand. Perform necessary adjustments (if any) and return the actual morph that should be added to the hand." "Since this morph has been initialized automatically with bounds origin 0@0, we have to move it to aHand position." super aboutToBeGrabbedBy: aHand. + + self align: self fullBounds bottomLeft with: aHand position. - self draggedMorph. - self align: self bottomLeft with: aHand position. aHand newKeyboardFocus: self.! Item was removed: - ----- Method: TransferMorph>>delete (in category 'submorphs-add/remove') ----- - delete - "See also >>justDroppedInto:event:." - self changed: #deleted. - self breakDependents. - super delete! Item was added: + ----- Method: TransferMorph>>doCopy (in category 'event handling') ----- + doCopy + + copy := true. + self updateCopyIcon.! Item was added: + ----- Method: TransferMorph>>doMove (in category 'event handling') ----- + doMove + + copy := false. + self updateCopyIcon.! Item was changed: + ----- Method: TransferMorph>>dragTransferType (in category 'accessing') ----- - ----- Method: TransferMorph>>dragTransferType (in category 'drag and drop') ----- dragTransferType ^transferType! Item was removed: - ----- Method: TransferMorph>>draggedMorph (in category 'accessing') ----- - draggedMorph - draggedMorph ifNil: [self initDraggedMorph]. - ^draggedMorph! Item was removed: - ----- Method: TransferMorph>>draggedMorph: (in category 'accessing') ----- - draggedMorph: aMorph - draggedMorph := aMorph! Item was removed: - ----- Method: TransferMorph>>initDraggedMorph (in category 'private') ----- - initDraggedMorph - draggedMorph ifNotNil: [^self]. - draggedMorph := self passenger asDraggableMorph. - self addMorphBack: draggedMorph. - self updateCopyIcon. - self changed; fullBounds! Item was changed: ----- Method: TransferMorph>>initialize (in category 'initialization') ----- initialize + - "initialize the state of the receiver" super initialize. + + self + changeTableLayout; + listDirection: #leftToRight; - self layoutPolicy: TableLayout new. - self listDirection: #leftToRight; hResizing: #shrinkWrap; vResizing: #shrinkWrap; layoutInset: 3; + cellInset: 3; wrapCentering: #center; + cellPositioning: #leftCenter; + setProperty: #indicateKeyboardFocus toValue: #never. + + self doMove. + + self on: #keyStroke send: #keyStroke: to: self. + self on: #keyUp send: #updateFromUserInputEvent: to: self. + self on: #keyDown send: #updateFromUserInputEvent: to: self.! - cellPositioning: #leftCenter. - copy := false. - self on: #keyStroke send: #keyStroke: to: self! Item was changed: ----- Method: TransferMorph>>keyStroke: (in category 'event handling') ----- keyStroke: evt "Abort the drag on an escape" + + evt keyCharacter = Character escape ifTrue: [self delete].! - evt keyCharacter ~= Character escape ifTrue: [ ^self ]. - self delete.! Item was removed: - ----- Method: TransferMorph>>move (in category 'accessing') ----- - move - copy := false! Item was changed: ----- Method: TransferMorph>>passenger: (in category 'accessing') ----- passenger: anObject + + passenger := anObject. + + self + removeAllMorphs; + addMorph: passenger asDraggableMorph; + updateCopyIcon.! - passenger := anObject! Item was removed: - ----- Method: TransferMorph>>privateFullMoveBy: (in category 'private') ----- - privateFullMoveBy: delta - super privateFullMoveBy: delta. - self changed: #position! Item was removed: - ----- Method: TransferMorph>>shouldCopy: (in category 'accessing') ----- - shouldCopy: aBoolean - copy := aBoolean.! Item was added: + ----- Method: TransferMorph>>shouldMove (in category 'accessing') ----- + shouldMove + ^ self shouldCopy not! Item was removed: - ----- Method: TransferMorph>>step (in category 'stepping and presenter') ----- - step - self shouldCopy: self primaryHand lastEvent shiftPressed. - self updateCopyIcon! Item was removed: - ----- Method: TransferMorph>>stepTime (in category 'stepping and presenter') ----- - stepTime - ^100! Item was changed: ----- Method: TransferMorph>>updateCopyIcon (in category 'private') ----- updateCopyIcon + + (self submorphNamed: #tmCopyIcon) + ifNil: [self shouldCopy ifTrue: [ + self addMorphFront: (ImageMorph new image: CopyPlusIcon; name: #tmCopyIcon; yourself)]] + ifNotNil: [:copyIcon | self shouldCopy ifFalse: [ + copyIcon delete]]! - | copyIcon | - copyIcon := self submorphWithProperty: #tmCopyIcon. - (self shouldCopy and: [ copyIcon isNil ]) ifTrue: [ - ^self addMorphFront: ((ImageMorph new image: CopyPlusIcon) setProperty: #tmCopyIcon toValue: true) - ]. - (self shouldCopy not and: [ copyIcon notNil ]) ifTrue: [ - copyIcon delete - ]! Item was added: + ----- Method: TransferMorph>>updateFromUserInputEvent: (in category 'event handling') ----- + updateFromUserInputEvent: evt + + evt shiftPressed + ifTrue: [self doCopy] + ifFalse: [self doMove].! Item was removed: - Morph subclass: #TransferMorphAnimation - instanceVariableNames: 'transferMorph' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Support'! Item was removed: - ----- Method: TransferMorphAnimation class>>on: (in category 'instance creation') ----- - on: aTransferMorph - ^self new on: aTransferMorph! Item was removed: - ----- Method: TransferMorphAnimation>>on: (in category 'initialization') ----- - on: aTransferMorph - - self flag: #bob. "there was a reference to World, but the class seems to be unused" - - self color: Color transparent. - transferMorph := aTransferMorph. - transferMorph addDependent: self. - ActiveWorld addMorph: self "or perhaps aTransferMorph world"! Item was removed: - ----- Method: TransferMorphAnimation>>transferMorph (in category 'accessing') ----- - transferMorph - ^transferMorph! Item was removed: - ----- Method: TransferMorphAnimation>>update: (in category 'updating') ----- - update: aSymbol - aSymbol == #deleted - ifTrue: [self delete]. - aSymbol == #position - ifTrue: [self updateAnimation]. - self changed! Item was removed: - ----- Method: TransferMorphAnimation>>updateAnimation (in category 'update') ----- - updateAnimation! Item was removed: - TransferMorphAnimation subclass: #TransferMorphLineAnimation - instanceVariableNames: 'polygon' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Support'! Item was removed: - ----- Method: TransferMorphLineAnimation>>initPolygon (in category 'initialization') ----- - initPolygon - polygon := (LineMorph from: self transferMorph source bounds center - to: self transferMorph bounds center - color: Color black width: 2) - dashedBorder: {10. 10. Color white}. - self addMorph: polygon - ! Item was removed: - ----- Method: TransferMorphLineAnimation>>on: (in category 'initialization') ----- - on: aTransferMorph - super on: aTransferMorph. - self initPolygon! Item was removed: - ----- Method: TransferMorphLineAnimation>>updateAnimation (in category 'update') ----- - updateAnimation - polygon verticesAt: 2 put: self transferMorph center! From commits at source.squeak.org Wed Nov 4 17:50:27 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 17:50:28 2015 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.94.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.94.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.94 Author: mt Time: 4 November 2015, 6:50:15.546 pm UUID: 58fe2a54-1973-41df-84a2-12393598991a Ancestors: ToolBuilder-Kernel-mt.93 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. =============== Diff against ToolBuilder-Kernel-mt.93 =============== Item was changed: PluggableWidgetSpec subclass: #PluggableListSpec + instanceVariableNames: 'list getIndex setIndex getSelected setSelected menu keyPress autoDeselect dragItem dropItem dropAccept doubleClick listSize listItem keystrokePreview icon vScrollBarPolicy hScrollBarPolicy dragStarted' - instanceVariableNames: 'list getIndex setIndex getSelected setSelected menu keyPress autoDeselect dragItem dropItem dropAccept doubleClick listSize listItem keystrokePreview icon vScrollBarPolicy hScrollBarPolicy' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableListSpec commentStamp: 'ar 7/15/2005 11:54' prior: 0! A single selection list element. Instance variables: list The selector to retrieve the list elements. getIndex The selector to retrieve the list selection index. setIndex The selector to set the list selection index. getSelected The selector to retrieve the list selection. setSelected The selector to set the list selection. menu The selector to offer (to retrieve?) the context menu. keyPress The selector to invoke for handling keyboard shortcuts. autoDeselect Whether the list should allow automatic deselection or not. dragItem Selector to initiate a drag action on an item dropItem Selector to initiate a drop action of an item dropAccept Selector to determine whether a drop would be accepted! Item was added: + ----- Method: PluggableListSpec>>dragStarted (in category 'accessing - drag and drop') ----- + dragStarted + ^ dragStarted! Item was added: + ----- Method: PluggableListSpec>>dragStarted: (in category 'accessing - drag and drop') ----- + dragStarted: symbol + dragStarted := symbol.! Item was changed: PluggableWidgetSpec subclass: #PluggableTreeSpec + instanceVariableNames: 'roots getSelectedPath setSelected getSelected setSelectedParent getChildren hasChildren label icon unusedVar menu keyPress dropItem dropAccept autoDeselect dragItem nodeClass columns vScrollBarPolicy hScrollBarPolicy dragStarted' - instanceVariableNames: 'roots getSelectedPath setSelected getSelected setSelectedParent getChildren hasChildren label icon unusedVar menu keyPress dropItem dropAccept autoDeselect dragItem nodeClass columns vScrollBarPolicy hScrollBarPolicy' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableTreeSpec commentStamp: 'mvdg 3/21/2008 20:59' prior: 0! A pluggable tree widget. PluggableTrees are slightly different from lists in such that they ALWAYS store the actual objects and use the label selector to query for the label of the item. PluggableTrees also behave somewhat differently in such that they do not have a "getSelected" message but only a getSelectedPath message. The difference is that getSelectedPath is used to indicate by the model that the tree should select the appropriate path. This allows disambiguation of items. Because of this, implementations of PluggableTrees must always set their internal selection directly, e.g., rather than sending the model a setSelected message and wait for an update of the #getSelected the implementation must set the selection before sending the #setSelected message. If a client doesn't want this, it can always just signal a change of getSelectedPath to revert to whatever is needed. Instance variables: roots The message to retrieve the roots of the tree. getSelectedPath The message to retrieve the selected path in the tree. setSelected The message to set the selected item in the tree. getChildren The message to retrieve the children of an item hasChildren The message to query for children of an item label The message to query for the label of an item. icon The message to query for the icon of an item. help The message to query for the help of an item. menu The message to query for the tree's menu keyPress The message to process a keystroke. wantsDrop The message to query whether a drop might be accepted. dropItem The message to drop an item. enableDrag Enable dragging from this tree. autoDeselect Whether the tree should allow automatic deselection or not. unusedVar (unused) This variable is a placeholder to fix problems with loading packages in 3.10.! Item was added: + ----- Method: PluggableTreeSpec>>dragStarted (in category 'accessing - drag and drop') ----- + dragStarted + ^ dragStarted! Item was added: + ----- Method: PluggableTreeSpec>>dragStarted: (in category 'accessing - drag and drop') ----- + dragStarted: symbol + dragStarted := symbol.! From commits at source.squeak.org Wed Nov 4 17:51:26 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 17:51:29 2015 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.151.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.151.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.151 Author: mt Time: 4 November 2015, 6:51:17.408 pm UUID: 047b0821-03ce-4921-bc87-6e2e8b216fe6 Ancestors: ToolBuilder-Morphic-mt.150 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. =============== Diff against ToolBuilder-Morphic-mt.150 =============== Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableList: (in category 'widgets required') ----- buildPluggableList: aSpec | widget listClass getIndex setIndex | aSpec getSelected ifNil:[ listClass := self listClass. getIndex := aSpec getIndex. setIndex := aSpec setIndex. ] ifNotNil:[ listClass := self listByItemClass. getIndex := aSpec getSelected. setIndex := aSpec setSelected. ]. widget := listClass on: aSpec model list: aSpec list selected: getIndex changeSelected: setIndex menu: aSpec menu keystroke: aSpec keyPress. self register: widget id: aSpec name. "Override default scroll bar policies if needed. Widget will use preference values otherwise." aSpec hScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowHScrollBar]. [#never] -> [widget hideHScrollBarIndefinitely]. [#whenNeeded] -> [widget showHScrollBarOnlyWhenNeeded]. } ]. aSpec vScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowVScrollBar]. [#never] -> [widget hideVScrollBarIndefinitely]. [#whenNeeded] -> [widget showVScrollBarOnlyWhenNeeded]. } ]. widget getListElementSelector: aSpec listItem. widget getListSizeSelector: aSpec listSize. widget getIconSelector: aSpec icon. widget getHelpSelector: aSpec help. widget doubleClickSelector: aSpec doubleClick. widget dragItemSelector: aSpec dragItem. widget dropItemSelector: aSpec dropItem. widget wantsDropSelector: aSpec dropAccept. + widget dragStartedSelector: aSpec dragStarted. widget autoDeselect: aSpec autoDeselect. widget keystrokePreviewSelector: aSpec keystrokePreview. widget borderWidth: 1; borderColor: Color lightGray; color: (aSpec color ifNil: [Color white] ifNotNil: [aSpec color]). self setFrame: aSpec frame in: widget. self setLayoutHintsFor: widget spec: aSpec. parent ifNotNil:[self add: widget to: parent]. panes ifNotNil:[ aSpec list ifNotNil:[panes add: aSpec list]. ]. ^widget! Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableTree: (in category 'widgets required') ----- buildPluggableTree: aSpec | widget | widget := self treeClass new. self register: widget id: aSpec name. widget model: aSpec model. widget getSelectedPathSelector: aSpec getSelectedPath. widget setSelectedSelector: aSpec setSelected. widget getSelectedSelector: aSpec getSelected. widget setSelectedParentSelector: aSpec setSelectedParent. widget getChildrenSelector: aSpec getChildren. widget hasChildrenSelector: aSpec hasChildren. widget getLabelSelector: aSpec label. widget getIconSelector: aSpec icon. widget getHelpSelector: aSpec help. widget getMenuSelector: aSpec menu. widget keystrokeActionSelector: aSpec keyPress. widget nodeClass: aSpec nodeClass. widget getRootsSelector: aSpec roots. widget autoDeselect: aSpec autoDeselect. + widget dropItemSelector: aSpec dropItem. widget wantsDropSelector: aSpec dropAccept. widget dragItemSelector: aSpec dragItem. + widget dragStartedSelector: aSpec dragStarted. + widget columns: aSpec columns. "Override default scroll bar policies if needed. Widget will use preference values otherwise." aSpec hScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowHScrollBar]. [#never] -> [widget hideHScrollBarIndefinitely]. [#whenNeeded] -> [widget showHScrollBarOnlyWhenNeeded]. } ]. aSpec vScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowVScrollBar]. [#never] -> [widget hideVScrollBarIndefinitely]. [#whenNeeded] -> [widget showVScrollBarOnlyWhenNeeded]. } ]. self setFrame: aSpec frame in: widget. self setLayoutHintsFor: widget spec: aSpec. parent ifNotNil:[self add: widget to: parent]. " panes ifNotNil:[ aSpec roots ifNotNil:[panes add: aSpec roots]. ]. " ^widget! Item was changed: PluggableListMorph subclass: #PluggableListMorphPlus + instanceVariableNames: 'dragItemSelector dropItemSelector wantsDropSelector getHelpSelector dragTypeSelector dragStartedSelector' - instanceVariableNames: 'dragItemSelector dropItemSelector wantsDropSelector getHelpSelector dragTypeSelector' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Morphic'! !PluggableListMorphPlus commentStamp: 'ar 7/15/2005 11:10' prior: 0! Extensions for PluggableListMorph needed by ToolBuilder! Item was changed: ----- Method: PluggableListMorphPlus>>acceptDroppingMorph:event: (in category 'drag and drop') ----- + acceptDroppingMorph: aTransferMorph event: evt + + dropItemSelector ifNil: [^ self]. + potentialDropRow ifNil: [^ self]. + + model + perform: dropItemSelector + withEnoughArguments: { + aTransferMorph passenger. + potentialDropRow. + aTransferMorph shouldCopy. + aTransferMorph}. + - acceptDroppingMorph: aMorph event: evt - | item | - dropItemSelector isNil | potentialDropRow isNil ifTrue: [^self]. - item := aMorph passenger. - model perform: dropItemSelector with: item with: potentialDropRow. self resetPotentialDropRow. evt hand releaseMouseFocus: self. Cursor normal show. ! Item was added: + ----- Method: PluggableListMorphPlus>>dragStartedSelector (in category 'accessing') ----- + dragStartedSelector + ^ dragStartedSelector! Item was added: + ----- Method: PluggableListMorphPlus>>dragStartedSelector: (in category 'accessing') ----- + dragStartedSelector: symbol + dragStartedSelector := symbol.! Item was changed: ----- Method: PluggableListMorphPlus>>startDrag: (in category 'drag and drop') ----- startDrag: evt + + | item itemMorph modelIndex | - dragItemSelector ifNil:[^self]. evt hand hasSubmorphs ifTrue: [^ self]. + self model okToChange ifFalse: [^ self]. + + item := self selection ifNil: [^ self]. + itemMorph := StringMorph contents: item asStringOrText. + modelIndex := self modelIndexFor: self selectionIndex. + + [ "Initiate drag." + (self model perform: dragItemSelector with: modelIndex) ifNotNil: [:passenger | | ddm | + ddm := (self valueOfProperty: #dragTransferClass ifAbsent: [TransferMorph]) withPassenger: passenger from: self. + ddm dragTransferType: (self dragTypeSelector ifNotNil: [:s | self model perform: s with: modelIndex]). + ddm updateFromUserInputEvent: evt. + self dragStartedSelector ifNotNil: [:s | self model perform: s with: itemMorph with: ddm]. + evt hand grabMorph: ddm]. + ] ensure: [ + Cursor normal show. + evt hand releaseMouseFocus: self]! - [ | dragIndex draggedItem ddm | - (self dragEnabled and: [model okToChange]) ifFalse: [^ self]. - dragIndex := self rowAtLocation: evt position. - dragIndex = 0 ifTrue:[^self]. - draggedItem := model perform: dragItemSelector with: (self modelIndexFor: dragIndex). - draggedItem ifNil:[^self]. - ddm := TransferMorph withPassenger: draggedItem from: self. - ddm dragTransferType: (self dragTypeSelector - ifNil: [#dragTransferPlus] - ifNotNil: [:s | self model perform: s with: (self modelIndexFor: dragIndex)]). - evt hand grabMorph: ddm] - ensure: [Cursor normal show. - evt hand releaseMouseFocus: self]! Item was changed: ----- Method: PluggableListMorphPlus>>wantsDroppedMorph:event: (in category 'drag and drop') ----- + wantsDroppedMorph: aTransferMorph event: anEvent + + dropItemSelector ifNil: [^ false]. + wantsDropSelector ifNil: [^ true]. + + (aTransferMorph isKindOf: TransferMorph) ifFalse: [^ false]. + + ^ model perform: wantsDropSelector withEnoughArguments: { + aTransferMorph passenger. + aTransferMorph dragTransferType. + aTransferMorph source. + aTransferMorph}! - wantsDroppedMorph: aMorph event: anEvent - aMorph dragTransferType == #dragTransferPlus ifFalse:[^false]. - dropItemSelector ifNil:[^false]. - wantsDropSelector ifNil:[^true]. - ^(model perform: wantsDropSelector with: aMorph passenger) == true! Item was changed: SimpleHierarchicalListMorph subclass: #PluggableTreeMorph + instanceVariableNames: 'rootWrappers selectedWrapper getRootsSelector getChildrenSelector hasChildrenSelector getLabelSelector getIconSelector getSelectedPathSelector setSelectedParentSelector getHelpSelector dropItemSelector wantsDropSelector dragItemSelector dragTypeSelector nodeClass lastKeystrokeTime lastKeystrokes dragStartedSelector' - instanceVariableNames: 'rootWrappers selectedWrapper getRootsSelector getChildrenSelector hasChildrenSelector getLabelSelector getIconSelector getSelectedPathSelector setSelectedParentSelector getHelpSelector dropItemSelector wantsDropSelector dragItemSelector dragTypeSelector nodeClass lastKeystrokeTime lastKeystrokes' classVariableNames: 'FilterByLabelsOnly MaximumSearchDepth' poolDictionaries: '' category: 'ToolBuilder-Morphic'! !PluggableTreeMorph commentStamp: 'ar 2/12/2005 04:38' prior: 0! A pluggable tree morph.! Item was changed: + ----- Method: PluggableTreeMorph>>acceptDroppingMorph:event: (in category 'drag and drop') ----- - ----- Method: PluggableTreeMorph>>acceptDroppingMorph:event: (in category 'morphic') ----- acceptDroppingMorph: aTransferMorph event: evt + + dropItemSelector ifNil: [^ self]. + potentialDropMorph ifNil: [^ self]. + - dropItemSelector ifNil: [ ^ self ]. model perform: dropItemSelector + withEnoughArguments: { + aTransferMorph passenger. + potentialDropMorph withoutListWrapper. + aTransferMorph shouldCopy. + aTransferMorph}. + + self resetPotentialDropMorph. - withEnoughArguments: {aTransferMorph passenger. - (self itemFromPoint: evt position) withoutListWrapper. - aTransferMorph shouldCopy}. evt hand releaseMouseFocus: self. - potentialDropMorph ifNotNil: [ potentialDropMorph highlightForDrop: false ]. Cursor normal show! Item was added: + ----- Method: PluggableTreeMorph>>dragStartedSelector (in category 'accessing') ----- + dragStartedSelector + ^ dragStartedSelector! Item was added: + ----- Method: PluggableTreeMorph>>dragStartedSelector: (in category 'accessing') ----- + dragStartedSelector: aSymbol + dragStartedSelector := aSymbol.! Item was changed: ----- Method: PluggableTreeMorph>>setSelectedMorph: (in category 'selection') ----- setSelectedMorph: aMorph + + "Avoid unnecessary model callbacks." + self selectedMorph == aMorph ifTrue: [^ self]. + selectedWrapper := aMorph complexContents. "Let the model now about the selected object, not wrapper." setSelectionSelector ifNotNil: [:symbol | model perform: symbol with: (selectedWrapper ifNotNil: [:w | w item])]. "The model may not have access to the parent object in terms of this tree structure." setSelectedParentSelector ifNotNil: [:symbol | model perform: symbol with: (selectedWrapper ifNotNil: [:w | w parent ifNotNil: [:pw | pw item]])].! Item was changed: + ----- Method: PluggableTreeMorph>>startDrag: (in category 'drag and drop') ----- - ----- Method: PluggableTreeMorph>>startDrag: (in category 'morphic') ----- startDrag: evt + + | itemMorph | + self dragItemSelector ifNil: [^ self]. + evt hand hasSubmorphs ifTrue: [^ self]. + self model okToChange ifFalse: [^ self]. + + itemMorph := scroller submorphs + detect: [:any | any highlightedForMouseDown] + ifNone: [^ self]. + + "Prepare visuals." - | ddm itemMorph passenger | - self dragEnabled - ifTrue: [itemMorph := scroller submorphs - detect: [:any | any highlightedForMouseDown] - ifNone: []]. - (itemMorph isNil - or: [evt hand hasSubmorphs]) - ifTrue: [^ self]. itemMorph highlightForMouseDown: false. + self setSelectedMorph: itemMorph. + + [ "Initiate drag." + (self model perform: self dragItemSelector with: itemMorph withoutListWrapper) ifNotNil: [:passenger | | ddm | + ddm := (self valueOfProperty: #dragTransferClass ifAbsent: [TransferMorph]) withPassenger: passenger from: self. + ddm dragTransferType: (self dragTypeSelector ifNotNil: [:s | self model perform: s with: itemMorph withoutListWrapper]). + ddm updateFromUserInputEvent: evt. + self dragStartedSelector ifNotNil: [:s | self model perform: s with: itemMorph with: ddm]. - itemMorph ~= self selectedMorph - ifTrue: [self setSelectedMorph: itemMorph]. - passenger := self model perform: dragItemSelector with: itemMorph withoutListWrapper. - passenger - ifNotNil: [ddm := TransferMorph withPassenger: passenger from: self. - ddm dragTransferType: (self dragTypeSelector - ifNil: [#dragTransferPlus] - ifNotNil: [:s | self model perform: s with: itemMorph withoutListWrapper]). - Preferences dragNDropWithAnimation - ifTrue: [self model dragAnimationFor: itemMorph transferMorph: ddm]. evt hand grabMorph: ddm]. + ] ensure: [ + Cursor normal show. + evt hand releaseMouseFocus: self].! - evt hand releaseMouseFocus: self! Item was changed: + ----- Method: PluggableTreeMorph>>wantsDroppedMorph:event: (in category 'drag and drop') ----- + wantsDroppedMorph: aTransferMorph event: anEvent + + dropItemSelector ifNil: [^ false]. + wantsDropSelector ifNil: [^ true]. + + (aTransferMorph isKindOf: TransferMorph) ifFalse: [^ false]. + + ^ model perform: wantsDropSelector withEnoughArguments: { + aTransferMorph passenger. + aTransferMorph dragTransferType. + aTransferMorph source. + aTransferMorph}! - ----- Method: PluggableTreeMorph>>wantsDroppedMorph:event: (in category 'morphic') ----- - wantsDroppedMorph: aMorph event: anEvent - aMorph dragTransferType == #dragTransferPlus ifFalse:[^false]. - dropItemSelector ifNil:[^false]. - wantsDropSelector ifNil:[^true]. - ^ (model perform: wantsDropSelector with: aMorph passenger) == true.! From commits at source.squeak.org Wed Nov 4 17:52:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 17:52:04 2015 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.9.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.9.mcz ==================== Summary ==================== Name: 51Deprecated-mt.9 Author: mt Time: 4 November 2015, 6:51:55.753 pm UUID: c75b7e53-d432-41ed-937e-945ac48af8d9 Ancestors: 51Deprecated-topa.8 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. =============== Diff against 51Deprecated-topa.8 =============== Item was changed: SystemOrganization addCategory: #'51Deprecated-Files-Kernel'! + SystemOrganization addCategory: #'51Deprecated-Morphic-Support'! Item was added: + ----- Method: Object>>dragAnimationFor:transferMorph: (in category '*51Deprecated') ----- + dragAnimationFor: item transferMorph: transferMorph + "Default do nothing"! Item was added: + Morph subclass: #TransferMorphAnimation + instanceVariableNames: 'transferMorph' + classVariableNames: '' + poolDictionaries: '' + category: '51Deprecated-Morphic-Support'! Item was added: + ----- Method: TransferMorphAnimation class>>on: (in category 'instance creation') ----- + on: aTransferMorph + ^self new on: aTransferMorph! Item was added: + ----- Method: TransferMorphAnimation>>on: (in category 'initialization') ----- + on: aTransferMorph + + self flag: #bob. "there was a reference to World, but the class seems to be unused" + + self color: Color transparent. + transferMorph := aTransferMorph. + transferMorph addDependent: self. + ActiveWorld addMorph: self "or perhaps aTransferMorph world"! Item was added: + ----- Method: TransferMorphAnimation>>transferMorph (in category 'accessing') ----- + transferMorph + ^transferMorph! Item was added: + ----- Method: TransferMorphAnimation>>update: (in category 'updating') ----- + update: aSymbol + aSymbol == #deleted + ifTrue: [self delete]. + aSymbol == #position + ifTrue: [self updateAnimation]. + self changed! Item was added: + ----- Method: TransferMorphAnimation>>updateAnimation (in category 'update') ----- + updateAnimation! Item was added: + TransferMorphAnimation subclass: #TransferMorphLineAnimation + instanceVariableNames: 'polygon' + classVariableNames: '' + poolDictionaries: '' + category: '51Deprecated-Morphic-Support'! Item was added: + ----- Method: TransferMorphLineAnimation>>initPolygon (in category 'initialization') ----- + initPolygon + polygon := (LineMorph from: self transferMorph source bounds center + to: self transferMorph bounds center + color: Color black width: 2) + dashedBorder: {10. 10. Color white}. + self addMorph: polygon + ! Item was added: + ----- Method: TransferMorphLineAnimation>>on: (in category 'initialization') ----- + on: aTransferMorph + super on: aTransferMorph. + self initPolygon! Item was added: + ----- Method: TransferMorphLineAnimation>>updateAnimation (in category 'update') ----- + updateAnimation + polygon verticesAt: 2 put: self transferMorph center! From Marcel.Taeumel at hpi.de Wed Nov 4 18:11:18 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 4 18:24:29 2015 Subject: [squeak-dev] Re: Squeak 5.0 Strange Commit Behavior In-Reply-To: References: <1446466247177-4858951.post@n4.nabble.com> <1446543255157-4859057.post@n4.nabble.com> <9AD1AFE7-6DF6-465E-A3B0-C854104AEF57@gmail.com> <1446571215511-4859096.post@n4.nabble.com> <1446620037507-4859132.post@n4.nabble.com> <1446621104112-4859134.post@n4.nabble.com> Message-ID: <1446660678053-4859228.post@n4.nabble.com> I did. The following versions are still empty/broken: Exceptions-cmm.49.mcz (23 January 2014) ScriptLoader-cmm.338.mcz (23 January 2014) FlexibleVocabularies-bf.13.mcz (11 September 2013) Squeak-Version-ar.4662.mcz (12 December 2009) You can browse them on source.squeak.org (http://source.squeak.org/squeak50/). They are empty. Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-0-Strange-Commit-Behavior-tp4858951p4859228.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Nov 4 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 4 22:55:03 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151104225502.20567.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009100.html Name: ToolBuilder-Kernel-mt.92 Ancestors: ToolBuilder-Kernel-topa.91 Updates message categories in list spec and tree spec. Adds possibility to override scroll bar policies in trees like it works in lists or scroll panes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009101.html Name: ToolBuilder-Morphic-mt.150 Ancestors: ToolBuilder-Morphic-mt.149 Adds support for overriding scrollbar policies in trees. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009102.html Name: SMLoader-mt.86 Ancestors: SMLoader-cmm.85 Code clean-up. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009103.html Name: ToolBuilder-Kernel-mt.93 Ancestors: ToolBuilder-Kernel-mt.92 Removes unused and obsolete #wantsDrop accessors and instVar. We have #dropAccept for that. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009104.html Name: Kernel-mt.965 Ancestors: Kernel-ul.964 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009105.html Name: Morphic-mt.1026 Ancestors: Morphic-mt.1025 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009106.html Name: ToolBuilder-Kernel-mt.94 Ancestors: ToolBuilder-Kernel-mt.93 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009107.html Name: ToolBuilder-Morphic-mt.151 Ancestors: ToolBuilder-Morphic-mt.150 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009108.html Name: 51Deprecated-mt.9 Ancestors: 51Deprecated-topa.8 Refactors and cleans-up drag-and-drop mechanism used by pluggable lists and trees. ============================================= From commits at source.squeak.org Thu Nov 5 08:06:55 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 5 08:06:56 2015 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.152.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.152.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.152 Author: mt Time: 5 November 2015, 9:06:46.563 am UUID: 7149e466-016d-46b7-b3c7-426363a3a749 Ancestors: ToolBuilder-Morphic-mt.151 In lists, update selection before starting drag operation in case the user decides not to drag a not selected item. =============== Diff against ToolBuilder-Morphic-mt.151 =============== Item was changed: ----- Method: PluggableListMorphPlus>>startDrag: (in category 'drag and drop') ----- startDrag: evt | item itemMorph modelIndex | dragItemSelector ifNil:[^self]. evt hand hasSubmorphs ifTrue: [^ self]. self model okToChange ifFalse: [^ self]. + + "Ensure selection to save additional click." + (self modelIndexFor: (self rowAtLocation: evt position)) in: [:evtIndex | + self selectionIndex = evtIndex ifFalse: [self changeModelSelection: evtIndex]]. + - item := self selection ifNil: [^ self]. itemMorph := StringMorph contents: item asStringOrText. modelIndex := self modelIndexFor: self selectionIndex. [ "Initiate drag." (self model perform: dragItemSelector with: modelIndex) ifNotNil: [:passenger | | ddm | ddm := (self valueOfProperty: #dragTransferClass ifAbsent: [TransferMorph]) withPassenger: passenger from: self. ddm dragTransferType: (self dragTypeSelector ifNotNil: [:s | self model perform: s with: modelIndex]). ddm updateFromUserInputEvent: evt. self dragStartedSelector ifNotNil: [:s | self model perform: s with: itemMorph with: ddm]. evt hand grabMorph: ddm]. ] ensure: [ Cursor normal show. evt hand releaseMouseFocus: self]! From commits at source.squeak.org Thu Nov 5 08:08:43 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 5 08:08:46 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1027.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1027.mcz ==================== Summary ==================== Name: Morphic-mt.1027 Author: mt Time: 5 November 2015, 9:08:06.974 am UUID: aaa21de5-cebc-4dcf-bf58-8595ba22ee71 Ancestors: Morphic-mt.1026 In lists, update selection before starting drag operation in case the user decides not to drag a not selected item. =============== Diff against Morphic-mt.1026 =============== Item was changed: ----- Method: PluggableListMorph>>startDrag: (in category 'drag and drop') ----- startDrag: evt + | item itemMorph | - | item itemMorph | evt hand hasSubmorphs ifTrue: [^ self]. self model okToChange ifFalse: [^ self]. + "Ensure selection to save additional click." + (self modelIndexFor: (self rowAtLocation: evt position)) in: [:evtIndex | + self selectionIndex = evtIndex ifFalse: [self changeModelSelection: evtIndex]]. + item := self selection ifNil: [^ self]. itemMorph := StringMorph contents: item asStringOrText. [ "Initiate drag." (self model dragPassengerFor: itemMorph inMorph: self) ifNotNil: [:passenger | | ddm | ddm := (self valueOfProperty: #dragTransferClass ifAbsent: [TransferMorph]) withPassenger: passenger from: self. ddm dragTransferType: (self model dragTransferTypeForMorph: self). ddm updateFromUserInputEvent: evt. self model dragStartedFor: itemMorph transferMorph: ddm. evt hand grabMorph: ddm] ] ensure: [ Cursor normal show. evt hand releaseMouseFocus: self].! From Marcel.Taeumel at hpi.de Thu Nov 5 08:06:06 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 5 08:19:21 2015 Subject: [squeak-dev] Smalltalk on a Windows Phone :) Message-ID: <1446710766477-4859305.post@n4.nabble.com> ...with mouse and keyboard support. :D -- View this message in context: http://forum.world.st/Smalltalk-on-a-Windows-Phone-tp4859305.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Nov 5 08:49:25 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 5 08:49:27 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1028.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1028.mcz ==================== Summary ==================== Name: Morphic-mt.1028 Author: mt Time: 5 November 2015, 9:48:45.933 am UUID: 21ae1b98-2008-46b6-8855-3c16783c2256 Ancestors: Morphic-mt.1027 Lets tree morphs look more like list morphs regarding selection color and hovering. =============== Diff against Morphic-mt.1027 =============== Item was changed: ----- Method: ListItemWrapper>>highlightingColor (in category 'accessing') ----- highlightingColor + ^ LazyListMorph listSelectionColor makeForegroundColor! - ^MenuMorph menuSelectionColor makeForegroundColor! Item was changed: ScrollPane subclass: #SimpleHierarchicalListMorph + instanceVariableNames: 'selectedMorph hoveredMorph getListSelector keystrokeActionSelector autoDeselect columns sortingSelector getSelectionSelector setSelectionSelector potentialDropMorph lineColor' - instanceVariableNames: 'selectedMorph getListSelector keystrokeActionSelector autoDeselect columns sortingSelector getSelectionSelector setSelectionSelector potentialDropMorph lineColor' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Explorer'! SimpleHierarchicalListMorph class instanceVariableNames: 'expandedForm notExpandedForm'! !SimpleHierarchicalListMorph commentStamp: 'ls 3/1/2004 12:15' prior: 0! Display a hierarchical list of items. Each item should be wrapped with a ListItemWrapper. For a simple example, look at submorphsExample. For beefier examples, look at ObjectExplorer or FileList2.! SimpleHierarchicalListMorph class instanceVariableNames: 'expandedForm notExpandedForm'! Item was added: + ----- Method: SimpleHierarchicalListMorph>>drawHoverOn: (in category 'drawing') ----- + drawHoverOn: aCanvas + + self hoveredMorph ifNil: [^ self]. + PluggableListMorph highlightHoveredRow ifFalse: [^ self]. + + aCanvas + fillRectangle: (((scroller transformFrom: self) + invertBoundsRect: self hoveredMorph bounds) + intersect: scroller bounds) + color: (LazyListMorph listSelectionColor darker alpha: 0.3).! Item was changed: ----- Method: SimpleHierarchicalListMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas + super drawOn: aCanvas. + + self drawHoverOn: aCanvas. + self drawSelectionOn: aCanvas. + self drawLinesOn: aCanvas.! - selectedMorph - ifNotNil: [aCanvas - fillRectangle: (((scroller transformFrom: self) - invertBoundsRect: selectedMorph bounds) - intersect: scroller bounds) - color: MenuMorph menuSelectionColor]. - self drawLinesOn: aCanvas! Item was added: + ----- Method: SimpleHierarchicalListMorph>>drawSelectionOn: (in category 'drawing') ----- + drawSelectionOn: aCanvas + + self selectedMorph ifNil: [^ self]. + + aCanvas + fillRectangle: (((scroller transformFrom: self) + invertBoundsRect: selectedMorph bounds) + intersect: scroller bounds) + color: LazyListMorph listSelectionColor.! Item was changed: ----- Method: SimpleHierarchicalListMorph>>handleMouseMove: (in category 'events-processing') ----- handleMouseMove: anEvent "Reimplemented because we really want #mouseMove when a morph is dragged around" anEvent wasHandled ifTrue:[^self]. "not interested" + self hoveredMorph: (self itemFromPoint: anEvent position). (anEvent anyButtonPressed and:[anEvent hand mouseFocus == self]) ifFalse:[^self]. anEvent wasHandled: true. self mouseMove: anEvent. (self handlesMouseStillDown: anEvent) ifTrue:[ "Step at the new location" self startStepping: #handleMouseStillDown: at: Time millisecondClockValue arguments: {anEvent copy resetHandlerFields} stepTime: 1]. ! Item was added: + ----- Method: SimpleHierarchicalListMorph>>hoveredMorph (in category 'accessing') ----- + hoveredMorph + + ^ hoveredMorph! Item was added: + ----- Method: SimpleHierarchicalListMorph>>hoveredMorph: (in category 'accessing') ----- + hoveredMorph: aMorph + + hoveredMorph == aMorph ifTrue: [^ self]. + + hoveredMorph ifNotNil: [:m | m changed]. + hoveredMorph := aMorph. + hoveredMorph ifNotNil: [:m | m changed]. ! From lecteur at zogotounga.net Thu Nov 5 08:58:46 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Thu Nov 5 08:58:51 2015 Subject: [squeak-dev] Smalltalk on a Windows Phone :) In-Reply-To: <1446710766477-4859305.post@n4.nabble.com> References: <1446710766477-4859305.post@n4.nabble.com> Message-ID: <563B1A46.1040403@zogotounga.net> BTW do we have some support for touch screen ? Stef From karlramberg at gmail.com Thu Nov 5 09:00:44 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 5 09:00:46 2015 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.150.mcz In-Reply-To: <5639d10e.14968c0a.30a3e.ffff8e5aSMTPIN_ADDED_MISSING@mx.google.com> References: <5639d10e.14968c0a.30a3e.ffff8e5aSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Hi, there is a somewhat related issue with scroll panes. In for example HelpBrowser you scroll down in the text pane with a long text. Then you click on an other help topic with a long text. The new help topic opens in a scrolled down pane. When opening a new topic the scrolling should be reset. Karl On Wed, Nov 4, 2015 at 10:33 AM, wrote: > Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project > The Trunk: > http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.150.mcz > > ==================== Summary ==================== > > Name: ToolBuilder-Morphic-mt.150 > Author: mt > Time: 4 November 2015, 10:33:51.502 am > UUID: 4df461c0-47b8-4cda-a915-4277646038fb > Ancestors: ToolBuilder-Morphic-mt.149 > > Adds support for overriding scrollbar policies in trees. > > =============== Diff against ToolBuilder-Morphic-mt.149 =============== > > Item was changed: > ----- Method: MorphicToolBuilder>>buildPluggableTree: (in category > 'widgets required') ----- > buildPluggableTree: aSpec > | widget | > widget := self treeClass new. > self register: widget id: aSpec name. > widget model: aSpec model. > widget getSelectedPathSelector: aSpec getSelectedPath. > widget setSelectedSelector: aSpec setSelected. > widget getSelectedSelector: aSpec getSelected. > widget setSelectedParentSelector: aSpec setSelectedParent. > widget getChildrenSelector: aSpec getChildren. > widget hasChildrenSelector: aSpec hasChildren. > widget getLabelSelector: aSpec label. > widget getIconSelector: aSpec icon. > widget getHelpSelector: aSpec help. > widget getMenuSelector: aSpec menu. > widget keystrokeActionSelector: aSpec keyPress. > widget nodeClass: aSpec nodeClass. > widget getRootsSelector: aSpec roots. > widget autoDeselect: aSpec autoDeselect. > widget dropItemSelector: aSpec dropItem. > widget wantsDropSelector: aSpec dropAccept. > widget dragItemSelector: aSpec dragItem. > widget columns: aSpec columns. > > + "Override default scroll bar policies if needed. Widget will use > preference values otherwise." > + aSpec hScrollBarPolicy ifNotNil: [:policy | > + policy caseOf: { > + [#always] -> [widget alwaysShowHScrollBar]. > + [#never] -> [widget hideHScrollBarIndefinitely]. > + [#whenNeeded] -> [widget > showHScrollBarOnlyWhenNeeded]. } ]. > + aSpec vScrollBarPolicy ifNotNil: [:policy | > + policy caseOf: { > + [#always] -> [widget alwaysShowVScrollBar]. > + [#never] -> [widget hideVScrollBarIndefinitely]. > + [#whenNeeded] -> [widget > showVScrollBarOnlyWhenNeeded]. } ]. > + > self setFrame: aSpec frame in: widget. > self setLayoutHintsFor: widget spec: aSpec. > > parent ifNotNil:[self add: widget to: parent]. > " panes ifNotNil:[ > aSpec roots ifNotNil:[panes add: aSpec roots]. > ]. " > ^widget! > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151105/125f77fb/attachment-0001.htm From frank.shearar at gmail.com Thu Nov 5 09:35:49 2015 From: frank.shearar at gmail.com (Frank Shearar) Date: Thu Nov 5 09:35:52 2015 Subject: [squeak-dev] Smalltalk on a Windows Phone :) In-Reply-To: <1446710766477-4859305.post@n4.nabble.com> References: <1446710766477-4859305.post@n4.nabble.com> Message-ID: On 5 November 2015 at 08:06, marcel.taeumel wrote: > ...with mouse and keyboard support. :D > > I am impressed! Is that running Windows 8? What do you think will happen with the pushing of Windows 10 (which changes things a fair bit, especially in the phone area, because of the push towards Universal apps)? (I'm guessing "nothing", because we generate native code VMs, not CLR VMs.) frank From commits at source.squeak.org Thu Nov 5 09:36:43 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 5 09:36:45 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1029.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1029.mcz ==================== Summary ==================== Name: Morphic-mt.1029 Author: mt Time: 5 November 2015, 10:36:01.14 am UUID: e3c2c951-9b94-4dd6-af36-316dd0426b1d Ancestors: Morphic-mt.1028 Extracts the essentials from HaloMorph into SimpleHaloMorph to make extension points more obvious. HaloMorph inherits from SimpleHaloMorph and extends this basic/simple halo mechanism. =============== Diff against Morphic-mt.1028 =============== Item was changed: + SimpleHaloMorph subclass: #HaloMorph + instanceVariableNames: 'innerTarget angleOffset minExtent growingOrRotating directionArrowAnchor haloBox simpleMode originalExtent' - Morph subclass: #HaloMorph - instanceVariableNames: 'target innerTarget positionOffset angleOffset minExtent growingOrRotating directionArrowAnchor haloBox simpleMode originalExtent' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'! !HaloMorph commentStamp: '' prior: 0! This morph provides a halo of handles for its target morph. Dragging, duplicating, rotating, and resizing to be done by mousing down on the appropriate handle. There are also handles for help and for a menu of infrequently used operations.! Item was changed: + ----- Method: HaloMorph>>blueButtonDown: (in category 'events') ----- - ----- Method: HaloMorph>>blueButtonDown: (in category 'meta-actions') ----- blueButtonDown: event + + self isMagicHalo + ifFalse: [super blueButtonDown: event] + ifTrue: [ + self isMagicHalo: false. + self magicAlpha: 1.0].! - "Transfer the halo to the next likely recipient" - target ifNil:[^self delete]. - event hand obtainHalo: self. - positionOffset := event position - (target point: target position in: owner). - self isMagicHalo ifTrue:[ - self isMagicHalo: false. - ^self magicAlpha: 1.0]. - "wait for drags or transfer" - event hand - waitForClicksOrDrag: self - event: event - selectors: { #transferHalo:. nil. nil. #dragTarget:. } - threshold: HandMorph dragThreshold! Item was changed: + ----- Method: HaloMorph>>containsPoint:event: (in category 'events') ----- - ----- Method: HaloMorph>>containsPoint:event: (in category 'events-processing') ----- containsPoint: aPoint event: anEvent "Blue buttons are handled by the halo" (anEvent isMouse and:[anEvent isMouseDown and:[anEvent blueButtonPressed]]) ifFalse:[^super containsPoint: aPoint event: anEvent]. ^bounds containsPoint: anEvent position! Item was changed: ----- Method: HaloMorph>>delete (in category 'submorphs-add/remove') ----- delete "Delete the halo. Tell the target that it no longer has the halo; accept any pending edits to the name; and then either actually delete myself or start to fade out" - target ifNotNil: - [target hasHalo: false]. self acceptNameEdit. self isMagicHalo: false. + Preferences haloTransitions + ifFalse: [super delete] + ifTrue: [ + self + stopStepping; + startStepping; + startSteppingSelector: #fadeOutFinally]. + ! - ifTrue: - [self stopStepping; startStepping. - self startSteppingSelector: #fadeOutFinally] - ifFalse: - [super delete]! Item was added: + ----- Method: HaloMorph>>doResizeTarget: (in category 'dragging or resizing') ----- + doResizeTarget: evt + + | oldExtent newExtent newPosition | + newExtent := originalExtent + (evt position - positionOffset * 2). + + (newExtent x > 1 and: [newExtent y > 1]) + ifTrue: [ + oldExtent := target extent. + target setExtentFromHalo: (newExtent min: owner extent). + newPosition := target position - (target extent - oldExtent // 2). + newPosition := (newPosition x min: owner extent x - newExtent x max: 0) @ (newPosition y min: owner extent y - newExtent y max: 0). + target setConstrainedPosition: newPosition hangOut: true]. + + self bounds: self target worldBoundsForHalo.! Item was removed: - ----- Method: HaloMorph>>dragTarget: (in category 'events') ----- - dragTarget: event - "Begin dragging the target" - | thePoint | - event controlKeyPressed ifTrue: [^self growTarget: event]. - growingOrRotating := false. - thePoint := target point: event position - positionOffset from: owner. - target setConstrainedPosition: thePoint hangOut: true. - event hand newMouseFocus: self.! Item was removed: - ----- Method: HaloMorph>>drawOn: (in category 'drawing') ----- - drawOn: aCanvas - "Draw this morph only if it has no target." - target isNil - ifTrue: [^ super drawOn: aCanvas]. - (Preferences showBoundsInHalo - and: [target isWorldMorph not]) - ifTrue: [| boundsColor | - boundsColor := MenuMorph menuSelectionColor - ifNil: [Color blue]. - aCanvas - frameAndFillRectangle: self bounds - fillColor: Color transparent - borderWidth: 2 - borderColor: - (boundsColor isTranslucent - ifTrue: [boundsColor] - ifFalse: [boundsColor alpha: 0.8])]! Item was removed: - ----- Method: HaloMorph>>growTarget: (in category 'events') ----- - growTarget: event - "Begin resizing the target" - growingOrRotating := true. - positionOffset := event position. - originalExtent := target extent. - self removeAllHandlesBut: nil. - event hand newMouseFocus: self. - event hand addMouseListener: self. "add handles back on mouse-up"! Item was changed: + ----- Method: HaloMorph>>handleListenEvent: (in category 'events') ----- - ----- Method: HaloMorph>>handleListenEvent: (in category 'events-processing') ----- handleListenEvent: anEvent "We listen for possible drop events here to add back those handles after a dup/grab operation" (anEvent isMouse and:[anEvent isMove not]) ifFalse:[^ self]. "not interested" anEvent hand removeMouseListener: self. "done listening" (self world ifNil: [target world]) ifNil: [^ self]. self addHandles "and get those handles back"! Item was removed: - ----- Method: HaloMorph>>handlerForBlueButtonDown: (in category 'meta-actions') ----- - handlerForBlueButtonDown: anEvent - "Blue button was clicked within the receiver" - ^self! Item was changed: + ----- Method: HaloMorph>>mouseMove: (in category 'events') ----- - ----- Method: HaloMorph>>mouseMove: (in category 'event handling') ----- mouseMove: evt + - "Drag our target around or resize it" growingOrRotating + ifTrue: [self doResizeTarget: evt] + ifFalse: [self doDragTarget: evt].! - ifTrue: [ - | oldExtent newExtent newPosition | - newExtent := originalExtent + (evt position - positionOffset * 2). - (newExtent x > 1 and: [newExtent y > 1]) - ifTrue: [ - oldExtent := target extent. - target setExtentFromHalo: (newExtent min: owner extent). - newPosition := target position - (target extent - oldExtent // 2). - newPosition := (newPosition x min: owner extent x - newExtent x max: 0) @ (newPosition y min: owner extent y - newExtent y max: 0). - target setConstrainedPosition: newPosition hangOut: true]] - ifFalse: [ - | thePoint | - thePoint := target point: (evt position - positionOffset) from: owner. - target setConstrainedPosition: thePoint hangOut: true. - ]! Item was added: + ----- Method: HaloMorph>>popUpFor:at:hand: (in category 'pop up') ----- + popUpFor: morph at: position hand: hand + + super popUpFor: morph at: position hand: hand. + + self startStepping. + (Preferences haloTransitions or: [self isMagicHalo]) + ifTrue: [ + self magicAlpha: 0.0. + self startSteppingSelector: #fadeInInitially].! Item was removed: - ----- Method: HaloMorph>>popUpFor:event: (in category 'events') ----- - popUpFor: aMorph event: evt - "This message is sent by morphs that explicitly request the halo on a button click. Note: anEvent is in aMorphs coordinate frame." - - | hand anEvent | - self flag: #workAround. "We should really have some event/hand here..." - anEvent := evt isNil - ifTrue: - [hand := aMorph world activeHand. - hand ifNil: [hand := aMorph world primaryHand]. - hand lastEvent transformedBy: (aMorph transformedFrom: nil)] - ifFalse: - [hand := evt hand. - evt]. - self target: aMorph. - hand halo: self. - hand world addMorphFront: self. - positionOffset := anEvent position - - (aMorph point: aMorph position in: owner). - self startStepping. - (Preferences haloTransitions or: [self isMagicHalo]) - ifTrue: - [self magicAlpha: 0.0. - self startSteppingSelector: #fadeInInitially]! Item was changed: + ----- Method: HaloMorph>>popUpMagicallyFor:hand: (in category 'pop up') ----- - ----- Method: HaloMorph>>popUpMagicallyFor:hand: (in category 'events') ----- popUpMagicallyFor: aMorph hand: aHand "Programatically pop up a halo for a given hand." + + super + popUpMagicallyFor: aMorph + hand: aHand. + + Preferences magicHalos + ifTrue: [self isMagicHalo: true]. + (Preferences haloTransitions not and: [self isMagicHalo]) + ifTrue: [self magicAlpha: 0.2]. + ! - Preferences magicHalos ifTrue:[ - self isMagicHalo: true. - self magicAlpha: 0.2]. - self target: aMorph. - aHand halo: self. - aHand world addMorphFront: self. - Preferences haloTransitions ifTrue:[ - self magicAlpha: 0.0. - self startSteppingSelector: #fadeInInitially. - ]. - positionOffset := aHand position - (aMorph point: aMorph position in: owner). - self startStepping.! Item was removed: - ----- Method: HaloMorph>>rejectsEvent: (in category 'events-processing') ----- - rejectsEvent: anEvent - "Return true to reject the given event. Rejecting an event means neither the receiver nor any of it's submorphs will be given any chance to handle it." - (super rejectsEvent: anEvent) ifTrue:[^true]. - anEvent isDropEvent ifTrue:[^true]. "never attempt to drop on halos" - ^false! Item was changed: + ----- Method: HaloMorph>>startDrag:with: (in category 'private') ----- - ----- Method: HaloMorph>>startDrag:with: (in category 'dropping/grabbing') ----- startDrag: evt with: dragHandle "Drag my target without removing it from its owner." | itsOwner | self obtainHaloForEvent: evt andRemoveAllHandlesBut: dragHandle. positionOffset := dragHandle center - (target point: target position in: owner). ((itsOwner := target topRendererOrSelf owner) notNil and: [itsOwner automaticViewing]) ifTrue: [target openViewerForArgument]! Item was added: + ----- Method: HaloMorph>>startDragTarget: (in category 'dragging or resizing') ----- + startDragTarget: event + + event controlKeyPressed + ifTrue: [self startResizeTarget: event] + ifFalse: [ + growingOrRotating := false. + super startDragTarget: event].! Item was added: + ----- Method: HaloMorph>>startResizeTarget: (in category 'dragging or resizing') ----- + startResizeTarget: event + "Begin resizing the target" + growingOrRotating := true. + positionOffset := event position. + originalExtent := target extent. + self removeAllHandlesBut: nil. + event hand newMouseFocus: self. + event hand addMouseListener: self. "add handles back on mouse-up"! Item was removed: - ----- Method: HaloMorph>>staysUpWhenMouseIsDownIn: (in category 'events') ----- - staysUpWhenMouseIsDownIn: aMorph - ^ ((aMorph == target) or: [aMorph hasOwner: self])! Item was changed: + ----- Method: HaloMorph>>stepTime (in category 'stepping') ----- - ----- Method: HaloMorph>>stepTime (in category 'testing') ----- stepTime ^ 0 "every cycle" ! Item was removed: - ----- Method: HaloMorph>>target (in category 'accessing') ----- - target - - ^ target - ! Item was removed: - ----- Method: HaloMorph>>transferHalo: (in category 'events') ----- - transferHalo: event - "Transfer the halo to the next likely recipient" - target ifNil:[^self delete]. - target transferHalo: (event transformedBy: (target transformedFrom: self)) from: target.! Item was changed: + ----- Method: HaloMorph>>wantsKeyboardFocusFor: (in category 'events') ----- - ----- Method: HaloMorph>>wantsKeyboardFocusFor: (in category 'event handling') ----- wantsKeyboardFocusFor: aSubmorph "to allow the name to be edited in the halo in the old tty way; when we morphic-text-ize the name editing, presumably this method should be removed" ^ true! Item was changed: ----- Method: Morph>>addHalo (in category 'halos and balloon help') ----- addHalo "Invoke a halo programatically (e.g., not from a meta gesture)" + + ^ self createHalo + popUpFor: self; + yourself! - ^self addHalo: nil! Item was changed: ----- Method: Morph>>addHalo: (in category 'halos and balloon help') ----- addHalo: evt + + ^ self createHalo + popUpFor: self event: evt; + yourself! - | halo prospectiveHaloClass | - prospectiveHaloClass := Smalltalk at: self haloClass ifAbsent: [HaloMorph]. - halo := prospectiveHaloClass new bounds: self worldBoundsForHalo. - halo popUpFor: self event: evt. - ^halo! Item was changed: ----- Method: Morph>>addMagicHaloFor: (in category 'halos and balloon help') ----- addMagicHaloFor: aHand + + aHand halo ifNotNil: [:halo | + halo target == self ifTrue:[^self]. + halo isMagicHalo ifFalse:[^self]]. + + self createHalo + popUpMagicallyFor: self hand: aHand! - | halo prospectiveHaloClass | - aHand halo ifNotNil:[ - aHand halo target == self ifTrue:[^self]. - aHand halo isMagicHalo ifFalse:[^self]]. - prospectiveHaloClass := Smalltalk at: self haloClass ifAbsent: [HaloMorph]. - halo := prospectiveHaloClass new bounds: self worldBoundsForHalo. - halo popUpMagicallyFor: self hand: aHand.! Item was changed: ----- Method: Morph>>blueButtonDown: (in category 'meta-actions') ----- blueButtonDown: anEvent "Special gestures (cmd-mouse on the Macintosh; Alt-mouse on Windows and Unix) allow a mouse-sensitive morph to be moved or bring up a halo for the morph." | h tfm doNotDrag | h := anEvent hand halo. "Prevent wrap around halo transfers originating from throwing the event back in" doNotDrag := false. h ifNotNil:[ (h innerTarget == self) ifTrue:[doNotDrag := true]. (h innerTarget hasOwner: self) ifTrue:[doNotDrag := true]. (self hasOwner: h target) ifTrue:[doNotDrag := true]]. tfm := (self transformedFrom: nil) inverseTransformation. "cmd-drag on flexed morphs works better this way" h := self addHalo: (anEvent transformedBy: tfm). h ifNil: [^ self]. doNotDrag ifTrue:[^self]. "Initiate drag transition if requested" anEvent hand waitForClicksOrDrag: h event: (anEvent transformedBy: tfm) + selectors: { nil. nil. nil. #startDragTarget:. } - selectors: { nil. nil. nil. #dragTarget:. } threshold: HandMorph dragThreshold. "Pass focus explicitly here" anEvent hand newMouseFocus: h.! Item was added: + ----- Method: Morph>>createHalo (in category 'halos and balloon help') ----- + createHalo + + ^ (Smalltalk at: self haloClass ifAbsent: [HaloMorph]) new + bounds: self worldBoundsForHalo + yourself! Item was added: + Morph subclass: #SimpleHaloMorph + instanceVariableNames: 'target positionOffset' + classVariableNames: '' + poolDictionaries: '' + category: 'Morphic-Widgets'! + + !SimpleHaloMorph commentStamp: 'mt 11/5/2015 09:52' prior: 0! + This is a simple base class for halos in the system. It represents the minimal interface used to implement custom halo morphs.! Item was added: + ----- Method: SimpleHaloMorph>>addHandles (in category 'construction') ----- + addHandles + "This is an example for handles." + + self addMorphFront: (IconicButton new + color: Color red muchLighter; + borderColor: Color red; + labelGraphic: MenuIcons smallCancelIcon; + target: self target; + actionSelector: #delete; + bottomRight: self topLeft; + yourself).! Item was added: + ----- Method: SimpleHaloMorph>>blueButtonDown: (in category 'events') ----- + blueButtonDown: event + "Transfer the halo to the next likely recipient" + + self target ifNil: [^self delete]. + event hand obtainHalo: self. + + self positionOffset: (event position - (self target point: self target position in: self owner)). + + "wait for drags or transfer" + event hand + waitForClicksOrDrag: self + event: event + selectors: { #transferHalo:. nil. nil. #startDragTarget:. } + threshold: HandMorph dragThreshold.! Item was added: + ----- Method: SimpleHaloMorph>>delete (in category 'submorphs-add/remove') ----- + delete + + self target hasHalo: false. + super delete.! Item was added: + ----- Method: SimpleHaloMorph>>doDragTarget: (in category 'dragging') ----- + doDragTarget: event + + self target + setConstrainedPosition: (self target point: (event position - self positionOffset) from: self owner) + hangOut: true. + + self bounds: self target worldBoundsForHalo.! Item was added: + ----- Method: SimpleHaloMorph>>drawOn: (in category 'drawing') ----- + drawOn: aCanvas + "Draw this morph only if it has no target." + + (Preferences showBoundsInHalo and: [self target isWorldMorph not]) + ifTrue: [ + | boundsColor | + boundsColor := MenuMorph menuSelectionColor + ifNil: [Color blue]. + aCanvas + frameAndFillRectangle: self bounds + fillColor: Color transparent + borderWidth: 2 + borderColor: + (boundsColor isTranslucent + ifTrue: [boundsColor] + ifFalse: [boundsColor alpha: 0.8])]! Item was added: + ----- Method: SimpleHaloMorph>>handlerForBlueButtonDown: (in category 'events') ----- + handlerForBlueButtonDown: anEvent + "Blue button was clicked within the receiver" + ^self! Item was added: + ----- Method: SimpleHaloMorph>>innerTarget (in category 'accessing') ----- + innerTarget + "If the target is merely a decorator for another morph, the inner target can be distiguished. Scroll panes, for example, could have their scrolled content as an inner target." + + ^ self target! Item was added: + ----- Method: SimpleHaloMorph>>isMagicHalo (in category 'testing') ----- + isMagicHalo + + ^ false! Item was added: + ----- Method: SimpleHaloMorph>>mouseMove: (in category 'events') ----- + mouseMove: event + + self doDragTarget: event.! Item was added: + ----- Method: SimpleHaloMorph>>popUpFor: (in category 'pop up') ----- + popUpFor: morph + + self + popUpFor: morph + hand: (morph world activeHand ifNil: [morph world primaryHand]).! Item was added: + ----- Method: SimpleHaloMorph>>popUpFor:at:hand: (in category 'pop up') ----- + popUpFor: morph at: position hand: hand + + self target: morph. + + hand halo: self. + hand world addMorphFront: self. + + self positionOffset: position - (morph point: morph position in: self owner).! Item was added: + ----- Method: SimpleHaloMorph>>popUpFor:event: (in category 'pop up') ----- + popUpFor: morph event: event + + self + popUpFor: morph + at: event position + hand: event hand.! Item was added: + ----- Method: SimpleHaloMorph>>popUpFor:hand: (in category 'pop up') ----- + popUpFor: morph hand: hand + + self + popUpFor: morph + at: (hand lastEvent transformedBy: (morph transformedFrom: nil)) + hand: hand! Item was added: + ----- Method: SimpleHaloMorph>>popUpMagicallyFor:hand: (in category 'pop up') ----- + popUpMagicallyFor: morph hand: hand + + self + popUpFor: morph + hand: hand.! Item was added: + ----- Method: SimpleHaloMorph>>positionOffset (in category 'accessing') ----- + positionOffset + + ^ positionOffset! Item was added: + ----- Method: SimpleHaloMorph>>positionOffset: (in category 'accessing') ----- + positionOffset: aPoint + + positionOffset := aPoint.! Item was added: + ----- Method: SimpleHaloMorph>>rejectsEvent: (in category 'events') ----- + rejectsEvent: anEvent + "Return true to reject the given event. Rejecting an event means neither the receiver nor any of it's submorphs will be given any chance to handle it." + (super rejectsEvent: anEvent) ifTrue:[^true]. + anEvent isDropEvent ifTrue:[^true]. "never attempt to drop on halos" + ^false! Item was added: + ----- Method: SimpleHaloMorph>>startDragTarget: (in category 'dragging') ----- + startDragTarget: event + + self positionOffset: (event position - (self target point: self target position in: self owner)). + event hand newMouseFocus: self.! Item was added: + ----- Method: SimpleHaloMorph>>staysUpWhenMouseIsDownIn: (in category 'testing') ----- + staysUpWhenMouseIsDownIn: aMorph + ^ ((aMorph == self target) or: [aMorph hasOwner: self])! Item was added: + ----- Method: SimpleHaloMorph>>target (in category 'accessing') ----- + target + + ^ target ifNil: [target := Morph new]! Item was added: + ----- Method: SimpleHaloMorph>>target: (in category 'accessing') ----- + target: morph + + target := morph. + morph hasHalo: true. + self addHandles.! Item was added: + ----- Method: SimpleHaloMorph>>transferHalo: (in category 'pop up') ----- + transferHalo: event + "Transfer the halo to the next likely recipient" + + self target + transferHalo: (event transformedBy: (self target transformedFrom: self)) + from: self target.! From Marcel.Taeumel at hpi.de Thu Nov 5 09:26:19 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 5 09:39:36 2015 Subject: [squeak-dev] Re: Smalltalk on a Windows Phone :) In-Reply-To: References: <1446710766477-4859305.post@n4.nabble.com> Message-ID: <1446715579664-4859323.post@n4.nabble.com> Nah, Windows Phone 8.1. Web browser. SqueakJS. ;-) Best, Marcel -- View this message in context: http://forum.world.st/Smalltalk-on-a-Windows-Phone-tp4859305p4859323.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Nov 5 09:28:54 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 5 09:42:11 2015 Subject: [squeak-dev] Re: The Trunk: ToolBuilder-Morphic-mt.150.mcz In-Reply-To: References: Message-ID: <1446715734738-4859327.post@n4.nabble.com> Hi Karls, if the contents grow, such as for the search results, resetting the scrolling/selection would be annoying. We have a trade-off here. :-) Maybe the model (HelpBrowser) should send a #selectionChanged when the topic changes. The text box must not decide this on its own. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-150-mcz-tp4859141p4859327.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Nov 5 09:30:07 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 5 09:43:24 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1029.mcz In-Reply-To: References: Message-ID: <1446715807340-4859328.post@n4.nabble.com> Every morph can have its own kind of halo with custom functionality. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1029-mcz-tp4859316p4859328.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From craig at netjam.org Thu Nov 5 11:06:58 2015 From: craig at netjam.org (Craig Latta) Date: Thu Nov 5 11:07:20 2015 Subject: [squeak-dev] re: Smalltalk on a Windows Phone :) In-Reply-To: <1446715579664-4859323.post@n4.nabble.com> References: <1446710766477-4859305.post@n4.nabble.com> <1446715579664-4859323.post@n4.nabble.com> Message-ID: > Nah, Windows Phone 8.1. Web browser. SqueakJS. ;-) Yeah, one must always be suspicious when MVC appears. :) And SqueakJS is awesome. :) -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From btc at openinworld.com Thu Nov 5 13:33:19 2015 From: btc at openinworld.com (Ben Coman) Date: Thu Nov 5 13:33:42 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: <25A73B64-795F-41BA-B809-70DD4066D9AD@gmx.de> References: <25A73B64-795F-41BA-B809-70DD4066D9AD@gmx.de> Message-ID: On Thu, Nov 5, 2015 at 1:11 AM, Tobias Pape wrote: > > On 04.11.2015, at 17:55, Ben Coman wrote: > >> On Wed, Nov 4, 2015 at 1:38 AM, Colin Putney wrote: >>> >>> >>> On Mon, Nov 2, 2015 at 4:32 PM, Levente Uzonyi wrote: >>>> >>>> Hi All, >>>> >>>> With the recent UUID changes, we're facing the problem of properly seeding >>>> a Random instance. The current method provides only 2^32 different initial >>>> states, with which the chance for two images to have the same values on >>>> startup is way too high (~9300 startups for 1% chance of collision). >>>> To avoid the collisions we need a reliable source of random bytes. >>>> Currently we have the following sources: >>>> 1. /dev/urandom: fast, reliable, but not available on all platforms (e.g. >>>> windows). >>>> 2. UUIDPlugin: fast, but this is what we wanted to get rid of in the first >>>> place, so it may not be available. >>>> 3. Audio recorded through SoundSystem: slow, unreliable, and it may not be >>>> available. >>>> 4. Time primUTCMicrosecondClock. On its own it has way too little entropy. >>>> We can still use it to initalize the PRNG by using additional sources of >>>> entropy (image name, path, vm version, whatever). We can use SHA1 to get >>>> "more random" bits from out entropy sources. But this is more like a last >>>> resort than a solution to rely on. >>>> >>>> So I suggest we should create a new primitive, which can fill a given >>>> indexable object (bytes and optionally words) with random values - the same >>>> way Random >> #nextBytes:into:startingAt: works. It could use CryptGenRandom >>>> on Windows, and /dev/urandom on other unix-like platforms. >>>> >>>> As fallback mechanisms, I'd implement 1. 2. and optionally 4., and use >>>> them in the given order. The drawback of these mechanisms is that they >>>> create unwanted package dependencies, because Random is in Kernel, while >>>> most potetial sources of entropy, along with SHA1, are in other packages. >>> >>> >>> Why do we want to get rid of UUIDPlugin? Is it just because fewer plugins is >>> better, or is there a problem with this one in particular? >>> >>> Also, if we're going to have a primitive that supplies fast, high-quality, >>> random bytes, shouldn't Random just call that for random values, rather than >>> seeding a PRNG? >> >> If I properly understood my recent reading on this, every time you >> take a number from a True-RNG, you reduce its entropy pool, which may >> only refill slowly on a remote server. >> >>> From http://linux.die.net/man/4/urandom ... >> "The kernel random-number generator is designed to produce a small >> amount of high-quality seed material to seed a cryptographic >> pseudo-random number generator (CPRNG). It is designed for security, >> not speed, and is poorly suited to generating large amounts of random >> data. Users should be very economical in the amount of seed material >> that they read from /dev/urandom (and /dev/random); unnecessarily >> reading large quantities of data from this device will have a negative >> impact on other users of the device" > > Yes. but there's more platforms than Linux to care about :) > How'd we do it on, say, RiscOS or FreeBSD? > > Best regards > -Tobias > > PS: FreeBSD is not hypothetical, we've got a student working with Squeak on FreeBSD? > FreeBSD has /dev/urandom as shown in the table a few pages down here... http://insanecoding.blogspot.com.au/2014/05/a-good-idea-with-bad-usage-devurandom.html I don't know about RiscOS. cheers -ben From karlramberg at gmail.com Thu Nov 5 14:38:08 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 5 14:38:12 2015 Subject: [squeak-dev] Re: The Trunk: ToolBuilder-Morphic-mt.150.mcz In-Reply-To: <1446715734738-4859327.post@n4.nabble.com> References: <1446715734738-4859327.post@n4.nabble.com> Message-ID: It's seems most tools default to resetting the scroll delta for the text panes, just not the HelpBrowser. It would maybe be nice to follow that scheme and override in the exceptions ? Karl On Thu, Nov 5, 2015 at 10:28 AM, marcel.taeumel wrote: > Hi Karls, > > if the contents grow, such as for the search results, resetting the > scrolling/selection would be annoying. We have a trade-off here. :-) > > Maybe the model (HelpBrowser) should send a #selectionChanged when the > topic > changes. The text box must not decide this on its own. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-150-mcz-tp4859141p4859327.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151105/0b3b51fc/attachment.htm From Marcel.Taeumel at hpi.de Thu Nov 5 15:17:35 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 5 15:30:53 2015 Subject: [squeak-dev] Re: The Trunk: ToolBuilder-Morphic-mt.150.mcz In-Reply-To: References: <1446715734738-4859327.post@n4.nabble.com> Message-ID: <1446736655114-4859380.post@n4.nabble.com> Sure. But tools/models have to decide, not the PluggableTextMorph (i.e. the widget). ;-) Visual updates should be as stable as possible. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-150-mcz-tp4859141p4859380.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From asqueaker at gmail.com Thu Nov 5 16:06:17 2015 From: asqueaker at gmail.com (Chris Muller) Date: Thu Nov 5 16:06:20 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1027.mcz In-Reply-To: <563b0e8f.52548c0a.5bfe8.14bfSMTPIN_ADDED_MISSING@mx.google.com> References: <563b0e8f.52548c0a.5bfe8.14bfSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: I see no difference. With or without this change, it doesn't seem to select until after I start the drag.. Also, I'm wondering if this shouldn't honor the "Menu request updates list/tree selection".. (maybe we would need to rename it to "Menu or drag request updates list/tree selection")? I know it didn't already, but it just reminded me of that when I was testing it. On Thu, Nov 5, 2015 at 2:08 AM, wrote: > Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-mt.1027.mcz > > ==================== Summary ==================== > > Name: Morphic-mt.1027 > Author: mt > Time: 5 November 2015, 9:08:06.974 am > UUID: aaa21de5-cebc-4dcf-bf58-8595ba22ee71 > Ancestors: Morphic-mt.1026 > > In lists, update selection before starting drag operation in case the user decides not to drag a not selected item. > > =============== Diff against Morphic-mt.1026 =============== > > Item was changed: > ----- Method: PluggableListMorph>>startDrag: (in category 'drag and drop') ----- > startDrag: evt > > + | item itemMorph | > - | item itemMorph | > evt hand hasSubmorphs ifTrue: [^ self]. > self model okToChange ifFalse: [^ self]. > > + "Ensure selection to save additional click." > + (self modelIndexFor: (self rowAtLocation: evt position)) in: [:evtIndex | > + self selectionIndex = evtIndex ifFalse: [self changeModelSelection: evtIndex]]. > + > item := self selection ifNil: [^ self]. > itemMorph := StringMorph contents: item asStringOrText. > > [ "Initiate drag." > (self model dragPassengerFor: itemMorph inMorph: self) ifNotNil: [:passenger | | ddm | > ddm := (self valueOfProperty: #dragTransferClass ifAbsent: [TransferMorph]) withPassenger: passenger from: self. > ddm dragTransferType: (self model dragTransferTypeForMorph: self). > ddm updateFromUserInputEvent: evt. > self model dragStartedFor: itemMorph transferMorph: ddm. > evt hand grabMorph: ddm] > ] ensure: [ > Cursor normal show. > evt hand releaseMouseFocus: self].! > > From Marcel.Taeumel at hpi.de Thu Nov 5 16:08:46 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 5 16:22:03 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1027.mcz In-Reply-To: References: Message-ID: <1446739726027-4859389.post@n4.nabble.com> It usually selects on #mouseUp. Now it also selects on #startDrag: ;-) In my image and prior to this change, it would not change the selection but drag the already selected item. Hmm... Yes, we could use the same preference for this to avoid the selection update. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1027-mcz-tp4859304p4859389.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Thu Nov 5 16:57:36 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Nov 5 16:57:41 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: References: Message-ID: <5C426D01-D3BB-43CD-9503-67DADFABADC9@gmail.com> Seems to me that the relevant values are primUTCMicrosecondClock (varies frequently) MAC address of a network interface ("unique" to a machine) Process Id/handle of VM (changes frequently, unique between simultaneous launches) Why would a combination of these three be insufficient? _,,,^..^,,,_ (phone) On Nov 3, 2015, at 11:05 AM, Chris Muller wrote: >> We can still use it to initalize the PRNG by using additional sources of >> entropy (image name, path, vm version, whatever). We can use SHA1 to get >> "more random" bits from out entropy sources. But this is more like a last >> resort than a solution to rely on. > > I always thought a good list of hard-to-guess attributes injected in > sequence with SHA1 feedback should be sufficiently hard to guess. > > millisecondClockValue, primUTCMicrosecondClock, timezone, Locale, > available memory, consumed memory, vmpath, localpath, Display extent, > Display imageForm, Sensor mouseX / mouseY, OS string, > millisecondsToRun this > > I'm not against the new primitive idea, just have always been curious > about digital security.. > From Das.Linux at gmx.de Thu Nov 5 18:08:04 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Nov 5 18:08:08 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: <5C426D01-D3BB-43CD-9503-67DADFABADC9@gmail.com> References: <5C426D01-D3BB-43CD-9503-67DADFABADC9@gmail.com> Message-ID: <17FF30D0-5D2B-41A2-B509-63EC28E9D66C@gmx.de> On 05.11.2015, at 17:57, Eliot Miranda wrote: > Seems to me that the relevant values are > > primUTCMicrosecondClock (varies frequently) > MAC address of a network interface ("unique" to a machine) > Process Id/handle of VM (changes frequently, unique between simultaneous launches) > > Why would a combination of these three be insufficient? Seems plausible and also contains the UUIDv1 [1] ingredients? Where do I get handle/id of the system? likewise, Mac-address? Best regards -Tobias [1]: https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_.28MAC_address_.26_date-time.29 From tim at rowledge.org Thu Nov 5 18:19:13 2015 From: tim at rowledge.org (tim Rowledge) Date: Thu Nov 5 18:19:19 2015 Subject: [squeak-dev] Seeding instances of Random In-Reply-To: References: <25A73B64-795F-41BA-B809-70DD4066D9AD@gmx.de> Message-ID: <425AD595-5335-4451-B731-3D5AC8460863@rowledge.org> > On 05-11-2015, at 5:33 AM, Ben Coman wrote: > > I don't know about RiscOS. There?s almost certainly an RM buried somewhere that at least claims to provide an equivalent. There always is. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Base 8 is just like base 10, if you are missing two fingers. From tim at rowledge.org Thu Nov 5 18:29:11 2015 From: tim at rowledge.org (tim Rowledge) Date: Thu Nov 5 18:29:18 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1029.mcz In-Reply-To: <1446715807340-4859328.post@n4.nabble.com> References: <1446715807340-4859328.post@n4.nabble.com> Message-ID: <0C610B48-31CF-4F9A-BBE2-5FBE3C036CDC@rowledge.org> > On 05-11-2015, at 1:30 AM, marcel.taeumel wrote: > > Every morph can have its own kind of halo with custom functionality. > > Nice tweak. Now we just need documentation to make it practical to make our own halos; remember the Goldberg Dictum - ?if it isn?t documented, it doesn?t exist?. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim granary - old folks home From commits at source.squeak.org Thu Nov 5 21:53:36 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 5 21:53:38 2015 Subject: [squeak-dev] The Trunk: Monticello-cmm.621.mcz Message-ID: Chris Muller uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-cmm.621.mcz ==================== Summary ==================== Name: Monticello-cmm.621 Author: cmm Time: 5 November 2015, 3:53:18.966 pm UUID: 0c3823f5-2b63-4e87-af64-20ba08dc97b0 Ancestors: Monticello-nice.620 - Fix filing in of an entire class from the MCSnapshotBrowser. Before, it would only file in the methods of the selected meta-switch (instance-side or class-side), now it always files in both sides. =============== Diff against Monticello-nice.620 =============== Item was changed: ----- Method: MCSnapshotBrowser>>methodsForSelectedClass (in category 'accessing') ----- methodsForSelectedClass + ^ items select: + [ : ea | ea className = classSelection and: [ ea isMethodDefinition ] ]! - ^ items select: [:ea | (ea className = classSelection) - and: [ea isMethodDefinition - and: [ea classIsMeta = self switchIsClass]]].! Item was added: + ----- Method: MCSnapshotBrowser>>methodsForSelectedClassAndMetaSelection (in category 'accessing') ----- + methodsForSelectedClassAndMetaSelection + ^ self methodsForSelectedClass select: + [ : each | each classIsMeta = self switchIsClass ]! Item was changed: ----- Method: MCSnapshotBrowser>>methodsForSelectedClassCategory (in category 'accessing') ----- methodsForSelectedClassCategory + ^ items select: + [ : ea | (self visibleClasses includes: ea className) and: [ ea isMethodDefinition ] ]! - | visibleClasses | - visibleClasses := self visibleClasses. - ^ items select: [:ea | (visibleClasses includes: ea className) - and: [ea isMethodDefinition - and: [ea classIsMeta = self switchIsClass]]].! Item was changed: ----- Method: MCSnapshotBrowser>>methodsForSelectedProtocol (in category 'accessing') ----- methodsForSelectedProtocol | methods | protocolSelection ifNil: [^ Array new]. + methods := self methodsForSelectedClassAndMetaSelection asOrderedCollection. - methods := self methodsForSelectedClass asOrderedCollection. (protocolSelection = '-- all --') ifFalse: [methods removeAllSuchThat: [:ea | ea category ~= protocolSelection]]. ^ methods ! Item was changed: ----- Method: MCSnapshotBrowser>>visibleProtocols (in category 'listing') ----- visibleProtocols | methods protocols | self switchIsComment ifTrue: [^ Array new]. + methods := self methodsForSelectedClassAndMetaSelection. - methods := self methodsForSelectedClass. protocols := (methods collect: [:ea | ea category]) asSet asSortedCollection. (protocols size > 1) ifTrue: [protocols add: '-- all --']. ^ protocols ! From commits at source.squeak.org Thu Nov 5 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 5 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151105225502.27318.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009109.html Name: ToolBuilder-Morphic-mt.152 Ancestors: ToolBuilder-Morphic-mt.151 In lists, update selection before starting drag operation in case the user decides not to drag a not selected item. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009110.html Name: Morphic-mt.1027 Ancestors: Morphic-mt.1026 In lists, update selection before starting drag operation in case the user decides not to drag a not selected item. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009111.html Name: Morphic-mt.1028 Ancestors: Morphic-mt.1027 Lets tree morphs look more like list morphs regarding selection color and hovering. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009112.html Name: Morphic-mt.1029 Ancestors: Morphic-mt.1028 Extracts the essentials from HaloMorph into SimpleHaloMorph to make extension points more obvious. HaloMorph inherits from SimpleHaloMorph and extends this basic/simple halo mechanism. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009113.html Name: Monticello-cmm.621 Ancestors: Monticello-nice.620 - Fix filing in of an entire class from the MCSnapshotBrowser. Before, it would only file in the methods of the selected meta-switch (instance-side or class-side), now it always files in both sides. ============================================= From commits at source.squeak.org Thu Nov 5 23:03:19 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 5 23:03:21 2015 Subject: [squeak-dev] The Trunk: ST80-cmm.190.mcz Message-ID: Chris Muller uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-cmm.190.mcz ==================== Summary ==================== Name: ST80-cmm.190 Author: cmm Time: 5 November 2015, 5:03:03.029 pm UUID: 572cb97d-0dd6-44de-9ced-d92b6a524345 Ancestors: ST80-topa.189 - Keep hot keys consistent between TextEditor and ParagraphEditor. =============== Diff against ST80-topa.189 =============== Item was changed: ----- Method: ParagraphEditor class>>initializeShiftCmdKeyShortcuts (in category 'keyboard shortcut tables') ----- initializeShiftCmdKeyShortcuts "Initialize the shift-command-key (or control-key) shortcut table." "NOTE: if you don't know what your keyboard generates, use Sensor kbdTest" "wod 11/3/1998: Fix setting of cmdMap for shifted keys to actually use the capitalized versions of the letters. TPR 2/18/99: add the plain ascii values back in for those VMs that don't return the shifted values." | cmdMap | "shift-command and control shortcuts" cmdMap := Array new: 256 withAll: #noop:. "use temp in case of a crash" cmdMap at: ( 1 + 1) put: #cursorHome:. "home key" cmdMap at: ( 4 + 1) put: #cursorEnd:. "end key" cmdMap at: ( 8 + 1) put: #forwardDelete:. "ctrl-H or delete key" cmdMap at: (11 + 1) put: #cursorPageUp:. "page up key" cmdMap at: (12 + 1) put: #cursorPageDown:. "page down key" cmdMap at: (13 + 1) put: #crWithIndent:. "ctrl-Return" cmdMap at: (27 + 1) put: #offerMenuFromEsc:. "escape key" cmdMap at: (28 + 1) put: #cursorLeft:. "left arrow key" cmdMap at: (29 + 1) put: #cursorRight:. "right arrow key" cmdMap at: (30 + 1) put: #cursorUp:. "up arrow key" cmdMap at: (31 + 1) put: #cursorDown:. "down arrow key" cmdMap at: (32 + 1) put: #selectWord:. "space bar key" cmdMap at: (45 + 1) put: #changeEmphasis:. "cmd-sh-minus" cmdMap at: (61 + 1) put: #changeEmphasis:. "cmd-sh-plus" cmdMap at: (127 + 1) put: #forwardDelete:. "del key" "On some keyboards, these characters require a shift" '([<{|"''' do: [:char | cmdMap at: char asciiValue + 1 put: #enclose:]. "NB: sw 12/9/2001 commented out the idiosyncratic line just below, which was grabbing shift-esc in the text editor and hence which argued with the wish to have shift-esc be a universal gesture for escaping the local context and calling up the desktop menu." "cmdMap at: (27 + 1) put: #shiftEnclose:." "ctrl-[" "'""''(' do: [ :char | cmdMap at: (char asciiValue + 1) put: #enclose:]." "triplet = {character. comment selector. novice appropiated}" #( ($a argAdvance: false) ($b browseItHere: false) ($c compareToClipboard: false) - ($d debugIt: false) ($e methodStringsContainingIt: false) ($f displayIfFalse: false) ($g fileItIn: false) ($h cursorTopHome: true) ($i exploreIt: false) ($j doAgainMany: true) ($k changeStyle: true) + ($m selectCurrentTypeIn: true) - ($l outdent: true) - ($m selectCurrentTypeIn: true) ($n referencesToIt: false) ($p makeProjectLink: true) - ($r indent: true) ($s search: true) ($t displayIfTrue: false) ($u changeLfToCr: false) ($v pasteInitials: false) ($w methodNamesContainingIt: false) ($x makeLowercase: true) ($y makeUppercase: true) ($z makeCapitalized: true) ) select:[:triplet | Preferences noviceMode not or:[triplet third]] thenDo:[:triplet | cmdMap at: (triplet first asciiValue + 1) put: triplet second. "plain keys" cmdMap at: (triplet first asciiValue - 32 + 1) put: triplet second. "shifted keys" cmdMap at: (triplet first asciiValue - 96 + 1) put: triplet second. "ctrl keys" ]. ShiftCmdActions := cmdMap! Item was changed: ----- Method: ParagraphEditor>>dispatchOnCharacter:with: (in category 'parenblinking') ----- dispatchOnCharacter: char with: typeAheadStream "Carry out the action associated with this character, if any. Type-ahead is passed so some routines can flush or use it." | honorCommandKeys result | self clearParens. "mikki 1/3/2005 21:31 Preference for auto-indent on return added." char asciiValue = 13 ifTrue: [ ^Preferences autoIndent ifTrue: [ sensor controlKeyPressed ifTrue: [self normalCharacter: typeAheadStream] ifFalse: [self crWithIndent: typeAheadStream]] ifFalse: [ sensor controlKeyPressed ifTrue: [self crWithIndent: typeAheadStream] ifFalse: [self normalCharacter: typeAheadStream]]]. ((honorCommandKeys := Preferences cmdKeysInText) and: [char = Character enter]) ifTrue: [^ self dispatchOnEnterWith: typeAheadStream]. + + (char = Character tab and: [ self selection notEmpty ]) ifTrue: [ self tabOrIndent: typeAheadStream ]. + - "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: char asciiValue) and: [char asciiValue < 27]) ifTrue: [^ sensor controlKeyPressed ifTrue: [self perform: (ShiftCmdActions at: char asciiValue + 1) with: typeAheadStream] ifFalse: [self perform: (CmdActions at: char asciiValue + 1) with: typeAheadStream]]. "backspace, and escape keys (ascii 8 and 27) are command keys" ((honorCommandKeys and: [sensor commandKeyPressed]) or: [self class specialShiftCmdKeys includes: char asciiValue]) ifTrue: [^ sensor leftShiftDown ifTrue: [self perform: (ShiftCmdActions at: char asciiValue + 1 ifAbsent: [#noop:]) with: typeAheadStream] ifFalse: [self perform: (CmdActions at: char asciiValue + 1 ifAbsent: [#noop:]) with: typeAheadStream]]. "the control key can be used to invoke shift-cmd shortcuts" (honorCommandKeys and: [sensor controlKeyPressed]) ifTrue: [^ self perform: (ShiftCmdActions at: char asciiValue + 1 ifAbsent: [#noop:]) with: typeAheadStream]. result := self normalCharacter: typeAheadStream. (')]}' includes: char) ifTrue: [self blinkPrevParen: char ]. ^result! Item was removed: - ----- Method: ParagraphEditor>>duplicate: (in category 'editing keys') ----- - duplicate: characterStream - "Paste the current selection over the prior selection, if it is non-overlapping and - legal. Flushes typeahead. Undoer & Redoer: undoAndReselect." - - sensor keyboard. - self closeTypeIn. - (self hasSelection and: [self isDisjointFrom: otherInterval]) - ifTrue: "Something to duplicate" - [self replace: otherInterval with: self selection and: - [self selectAt: self pointIndex]] - ifFalse: - [view flash]. - ^true! Item was added: + ----- Method: ParagraphEditor>>tabOrIndent: (in category 'typing/selecting keys') ----- + tabOrIndent: characterStream + self selection + ifEmpty: [ self normalCharacter: characterStream ] + ifNotEmpty: + [ Sensor shiftPressed + ifTrue: [ self outdent: characterStream ] + ifFalse: [ self indent: characterStream ] ]. + ^ false! From Marcel.Taeumel at hpi.de Fri Nov 6 08:18:06 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 6 08:31:28 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1029.mcz In-Reply-To: <0C610B48-31CF-4F9A-BBE2-5FBE3C036CDC@rowledge.org> References: <1446715807340-4859328.post@n4.nabble.com> <0C610B48-31CF-4F9A-BBE2-5FBE3C036CDC@rowledge.org> Message-ID: <1446797886071-4859484.post@n4.nabble.com> We could provide more halo classes as means of documentation. :-) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1029-mcz-tp4859316p4859484.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Nov 6 09:01:38 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 6 09:01:40 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1030.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1030.mcz ==================== Summary ==================== Name: Morphic-mt.1030 Author: mt Time: 6 November 2015, 10:01:00.074 am UUID: f7fad4f9-b91a-4345-8d10-88e34bb03951 Ancestors: Morphic-mt.1029 First attempt to document the halo concept. Please revise. =============== Diff against Morphic-mt.1029 =============== Item was changed: Morph subclass: #SimpleHaloMorph instanceVariableNames: 'target positionOffset' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'! + !SimpleHaloMorph commentStamp: 'mt 11/6/2015 09:59' prior: 0! + This is a simple base class for halos in the system. It represents the minimal interface used to implement custom halo morphs. + + It provides: + + - event handling code to invoke and transfer a halo when clicking the meta-button (blue) + - move the halo's target (morph) when click-hold-drag the meta-button + - one close button as a minimal handle (see #addHandles) + + In general, the halo concept consists of one dedicated user interaction (meta-button click) to invoke an additional, interactive view (the halo) for any morph. This interactive view is itself a morph that can have submorphs (e.g. buttons or text fields) to enrich the target morph. Besides button-based interactions (e.g. resize, move, duplicate, etc.), this could also be used to show other, even domain-specific, information. + + Use the halo concept to provide means to explore and modify interactive, graphical elements in Squeak and your application. You can benefit from this concept without wasting additional screen space. In non-Squeak applications, the meta-key (typically the mouse-wheel button) is often without real functionality for the user. There, it makes scrolling more convenient---at best. In Squeak, you can easily take advantage of this button click. + + Notice that direct user input is very limited. Many keyboard shortcuts (such as [ctrl]+[c]) are already pre-defined and should not be remapped for your domain-specific applications to avoid user confusion. Key chords (such as [ctrl]+[alt]+[v], [a] from Visual Studio) have to be learned with great effort. + + The left mouse click (red) selects something. + The right mouse click (yellow) invokes a context menu. + Only the middle click, the meta-key, the blue button, is unused in many environments. + + This is where the halo concept comes in. + + [For two- or single-button mice, the meta-key can be simulated.]! - !SimpleHaloMorph commentStamp: 'mt 11/5/2015 09:52' prior: 0! - This is a simple base class for halos in the system. It represents the minimal interface used to implement custom halo morphs.! From commits at source.squeak.org Fri Nov 6 11:08:23 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 6 11:08:24 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1031.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1031.mcz ==================== Summary ==================== Name: Morphic-mt.1031 Author: mt Time: 6 November 2015, 12:07:42.757 pm UUID: f57fc346-7087-4d9d-80ad-96e53674bdd1 Ancestors: Morphic-mt.1030 Let all kinds of pluggable lists have customizable balloon helps. =============== Diff against Morphic-mt.1030 =============== Item was changed: ScrollPane subclass: #PluggableListMorph + instanceVariableNames: 'list getListSelector getListSizeSelector getListElementSelector getIndexSelector setIndexSelector keystrokeActionSelector autoDeselect lastKeystrokeTime lastKeystrokes lastClickTime doubleClickSelector handlesBasicKeys potentialDropRow hoverRow listMorph hScrollRangeCache keystrokePreviewSelector priorSelection getIconSelector getHelpSelector' - instanceVariableNames: 'list getListSelector getListSizeSelector getListElementSelector getIndexSelector setIndexSelector keystrokeActionSelector autoDeselect lastKeystrokeTime lastKeystrokes lastClickTime doubleClickSelector handlesBasicKeys potentialDropRow hoverRow listMorph hScrollRangeCache keystrokePreviewSelector priorSelection getIconSelector' classVariableNames: 'ClearFilterAutomatically FilterableLists HighlightHoveredRow MenuRequestUpdatesSelection' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'! !PluggableListMorph commentStamp: 'cmm 8/21/2011 23:37' prior: 0! When a PluggableListMorph is in focus, type in a letter (or several letters quickly) to go to the next item that begins with that letter (if FilterableLists is false). Special keys (up, down, home, etc.) are also supported.! Item was added: + ----- Method: PluggableListMorph>>balloonText (in category 'accessing') ----- + balloonText + "Overridden to send selector to model and not self. Do not use #perform:orSendTo: because super does more than just the send.." + + self getHelpSelector ifNotNil: [:selector | + ((self model respondsTo: selector) and: [self hoverRow > 0]) ifTrue: [ + ^ self model perform: selector with: (self modelIndexFor: self hoverRow)]]. + + ^ super balloonText! Item was added: + ----- Method: PluggableListMorph>>getHelpSelector (in category 'accessing') ----- + getHelpSelector + + ^ getHelpSelector! Item was added: + ----- Method: PluggableListMorph>>getHelpSelector: (in category 'accessing') ----- + getHelpSelector: aSelector + "Get help for list entries." + + getHelpSelector := aSelector.! Item was changed: ----- Method: PluggableListMorph>>hoverRow: (in category 'accessing') ----- hoverRow: anInteger hoverRow = anInteger ifTrue: [^ self]. hoverRow ifNotNil: [self listMorph rowChanged: hoverRow]. hoverRow := anInteger. + hoverRow ifNotNil: [self listMorph rowChanged: hoverRow]. + + self wantsBalloon ifTrue: [ + self activeHand + removePendingBalloonFor: self; + triggerBalloonFor: self after: self balloonHelpDelayTime].! - hoverRow ifNotNil: [self listMorph rowChanged: hoverRow].! From commits at source.squeak.org Fri Nov 6 11:08:52 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 6 11:08:54 2015 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.153.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.153.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.153 Author: mt Time: 6 November 2015, 12:08:43.925 pm UUID: 738a4271-8bf9-4ff2-b6af-a7de2a0d7421 Ancestors: ToolBuilder-Morphic-mt.152 Let all kinds of pluggable lists have customizable balloon helps. =============== Diff against ToolBuilder-Morphic-mt.152 =============== Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableAlternateMultiSelectionList: (in category 'widgets optional') ----- buildPluggableAlternateMultiSelectionList: aSpec | listMorph listClass | aSpec getSelected ifNotNil: [ ^ self error: 'There is no PluggableAlternateListMorphOfManyByItem' ]. listClass := self alternateMultiSelectListClass. listMorph := listClass on: aSpec model list: aSpec list primarySelection: aSpec getIndex changePrimarySelection: aSpec setIndex listSelection: aSpec getSelectionList changeListSelection: aSpec setSelectionList menu: aSpec menu. listMorph setProperty: #highlightSelector toValue: #highlightMessageList:with: ; setProperty: #itemConversionMethod toValue: #asStringOrText ; setProperty: #balloonTextSelectorForSubMorphs toValue: #balloonTextForClassAndMethodString ; enableDragNDrop: SystemBrowser browseWithDragNDrop ; menuTitleSelector: #messageListSelectorTitle. self register: listMorph id: aSpec name. listMorph keystrokeActionSelector: aSpec keyPress ; getListElementSelector: aSpec listItem ; + getListSizeSelector: aSpec listSize; + getIconSelector: aSpec icon; + getHelpSelector: aSpec help. - getListSizeSelector: aSpec listSize. self - buildHelpFor: listMorph - spec: aSpec. - self setFrame: aSpec frame in: listMorph. self setLayoutHintsFor: listMorph spec: aSpec. parent ifNotNil: [ self add: listMorph to: parent ]. panes ifNotNil: [ aSpec list ifNotNil:[panes add: aSpec list ] ]. ^ listMorph! Item was changed: PluggableListMorph subclass: #PluggableListMorphPlus + instanceVariableNames: 'dragItemSelector dropItemSelector wantsDropSelector dragTypeSelector dragStartedSelector' - instanceVariableNames: 'dragItemSelector dropItemSelector wantsDropSelector getHelpSelector dragTypeSelector dragStartedSelector' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Morphic'! !PluggableListMorphPlus commentStamp: 'ar 7/15/2005 11:10' prior: 0! Extensions for PluggableListMorph needed by ToolBuilder! Item was removed: - ----- Method: PluggableListMorphPlus>>balloonText (in category 'accessing') ----- - balloonText - "Overridden to send selector to model and not self. Do not use #perform:orSendTo: because super does more than just the send.." - - self getHelpSelector ifNotNil: [:selector | - ((self model respondsTo: selector) and: [self hoverRow > 0]) ifTrue: [ - ^ self model perform: selector with: (self modelIndexFor: self hoverRow)]]. - - ^ super balloonText! Item was removed: - ----- Method: PluggableListMorphPlus>>getHelpSelector (in category 'accessing') ----- - getHelpSelector - - ^ getHelpSelector! Item was removed: - ----- Method: PluggableListMorphPlus>>getHelpSelector: (in category 'accessing') ----- - getHelpSelector: aSelector - "Get help for list entries." - - getHelpSelector := aSelector.! Item was removed: - ----- Method: PluggableListMorphPlus>>hoverRow: (in category 'accessing') ----- - hoverRow: anInteger - - self hoverRow ~= anInteger ifTrue: [ - super hoverRow: anInteger. - self wantsBalloon ifTrue: [ - self activeHand - removePendingBalloonFor: self; - triggerBalloonFor: self after: self balloonHelpDelayTime]]. - - ! From commits at source.squeak.org Fri Nov 6 11:10:37 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 6 11:10:42 2015 Subject: [squeak-dev] The Trunk: Tools-mt.645.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.645.mcz ==================== Summary ==================== Name: Tools-mt.645 Author: mt Time: 6 November 2015, 12:10:12.372 pm UUID: a9fab090-87fa-4068-84d7-ccc4ab227b80 Ancestors: Tools-mt.644 Makes the preference #balloonHelpInMessageLists functional again. Applies the preferences "Show message icons" and #balloonHelpInMessageLists also to senders, implementors, message traces, debuggers, etc. =============== Diff against Tools-mt.644 =============== Item was changed: ----- Method: Browser>>buildMessageListWith: (in category 'toolbuilder') ----- buildMessageListWith: builder | listSpec | listSpec := builder pluggableListSpec new. listSpec model: self; list: #messageList; getIndex: #messageListIndex; setIndex: #messageListIndex:; icon: #messageIconAt:; + help: #messageHelpAt:; menu: #messageListMenu:shifted:; keyPress: #messageListKey:from:. SystemBrowser browseWithDragNDrop ifTrue:[listSpec dragItem: #dragFromMessageList:]. ^listSpec ! Item was added: + ----- Method: Browser>>messageHelpAt: (in category 'message list') ----- + messageHelpAt: anIndex + "Show the first n lines of the sources code of the selected message." + + | source formatted lineCount | + Preferences balloonHelpInMessageLists ifFalse: [^ nil]. + self messageList size < anIndex ifTrue: [^ nil]. + + source := (self selectedClassOrMetaClass >> (self messageList at: anIndex)) getSource. + formatted := SHTextStylerST80 new + classOrMetaClass: self selectedClassOrMetaClass; + styledTextFor: source asText. + + lineCount := 0. + source doWithIndex: [:char :index | + char = Character cr ifTrue: [lineCount := lineCount + 1]. + lineCount > 10 ifTrue: [ + formatted := formatted copyFrom: 1 to: index-1. + formatted append: ' [...]'. + ^ formatted]]. + + ^ formatted! Item was changed: ----- Method: Debugger>>buildFullWith: (in category 'toolbuilder') ----- buildFullWith: builder | windowSpec listSpec textSpec | windowSpec := builder pluggableWindowSpec new model: self; label: 'Debugger'; children: OrderedCollection new. listSpec := builder pluggableListSpec new. listSpec model: self; list: #contextStackList; getIndex: #contextStackIndex; setIndex: #toggleContextStackIndex:; menu: #contextStackMenu:shifted:; + icon: #messageIconAt:; + help: #messageHelpAt:; keyPress: #contextStackKey:from:; frame: (0@0 corner: 1@0.22). windowSpec children add: listSpec. textSpec := self buildCodePaneWith: builder. textSpec frame: (0@0.22corner: 1@0.8). windowSpec children add: textSpec. listSpec := builder pluggableListSpec new. listSpec model: self receiverInspector; list: #fieldList; getIndex: #selectionIndex; setIndex: #toggleIndex:; menu: #fieldListMenu:; keyPress: #inspectorKey:from:; frame: (0@0.8 corner: 0.2@1). windowSpec children add: listSpec. textSpec := builder pluggableTextSpec new. textSpec model: self receiverInspector; getText: #contents; setText: #accept:; help: '<- Select receiver''s field' translated; selection: #contentsSelection; menu: #codePaneMenu:shifted:; frame: (0.2@0.8 corner: 0.5@1). windowSpec children add: textSpec. listSpec := builder pluggableListSpec new. listSpec model: self contextVariablesInspector; list: #fieldList; getIndex: #selectionIndex; setIndex: #toggleIndex:; menu: #fieldListMenu:; keyPress: #inspectorKey:from:; frame: (0.5@0.8 corner: 0.7@1). windowSpec children add: listSpec. textSpec := builder pluggableTextSpec new. textSpec model: self contextVariablesInspector; getText: #contents; setText: #accept:; help: '<- Select context''s field' translated; selection: #contentsSelection; menu: #codePaneMenu:shifted:; frame: (0.7@0.8 corner: 1@1). windowSpec children add: textSpec. ^builder build: windowSpec! Item was changed: ----- Method: Debugger>>buildNotifierWith:label:message: (in category 'toolbuilder') ----- buildNotifierWith: builder label: label message: messageString | windowSpec listSpec textSpec panelSpec quads | windowSpec := builder pluggableWindowSpec new model: self; extent: self initialExtentForNotifier; label: label; children: OrderedCollection new. panelSpec := builder pluggablePanelSpec new. panelSpec children: OrderedCollection new. quads := self preDebugButtonQuads. (self interruptedContext selector == #doesNotUnderstand:) ifTrue: [ quads := quads copyWith: { 'Create'. #createMethod. #magenta. 'create the missing method' } ]. (#(#notYetImplemented #shouldBeImplemented #requirement) includes: self interruptedContext selector) ifTrue: [ quads := quads copyWith: { 'Create'. #createImplementingMethod. #magenta. 'implement the marked method' } ]. (self interruptedContext selector == #subclassResponsibility) ifTrue: [ quads := quads copyWith: { 'Create'. #createOverridingMethod. #magenta. 'create the missing overriding method' } ]. quads do:[:spec| | buttonSpec | buttonSpec := builder pluggableButtonSpec new. buttonSpec model: self. buttonSpec label: spec first. buttonSpec action: spec second. buttonSpec help: spec fourth. panelSpec children add: buttonSpec. ]. panelSpec layout: #horizontal. "buttons" panelSpec frame: self preDebugButtonQuadFrame. windowSpec children add: panelSpec. Preferences eToyFriendly | messageString notNil ifFalse:[ listSpec := builder pluggableListSpec new. listSpec model: self; list: #contextStackList; getIndex: #contextStackIndex; setIndex: #debugAt:; + icon: #messageIconAt:; + help: #messageHelpAt:; frame: self contextStackFrame. windowSpec children add: listSpec. ] ifTrue:[ message := messageString. textSpec := builder pluggableTextSpec new. textSpec model: self; getText: #preDebugMessageString; setText: nil; selection: nil; menu: #debugProceedMenu:; frame: self contextStackFrame. windowSpec children add: textSpec. ]. ^windowSpec! Item was added: + ----- Method: Debugger>>messageHelpAt: (in category 'context stack (message list)') ----- + messageHelpAt: anIndex + "Show the first n lines of the sources code of the selected message." + + | method source formatted lineCount | + Preferences balloonHelpInMessageLists ifFalse: [^ nil]. + contextStack size < anIndex ifTrue: [^ nil]. + + method := (contextStack at: anIndex) method. + + source := method getSource. + formatted := SHTextStylerST80 new + classOrMetaClass: method methodClass; + styledTextFor: source asText. + + lineCount := 0. + source doWithIndex: [:char :index | + char = Character cr ifTrue: [lineCount := lineCount + 1]. + lineCount > 10 ifTrue: [ + formatted := formatted copyFrom: 1 to: index-1. + formatted append: ' [...]'. + ^ formatted]]. + + ^ formatted! Item was added: + ----- Method: Debugger>>messageIconAt: (in category 'context stack (message list)') ----- + messageIconAt: anIndex + + Browser showMessageIcons + ifFalse: [^ nil]. + + ^ ToolIcons iconNamed: (ToolIcons + iconForClass: (contextStack at: anIndex) method methodClass + selector: (contextStack at: anIndex) method selector)! Item was changed: ----- Method: MessageSet>>buildMessageListWith: (in category 'toolbuilder') ----- buildMessageListWith: builder | listSpec | listSpec := builder pluggableListSpec new. listSpec model: self; list: #messageList; getIndex: #messageListIndex; + setIndex: #messageListIndex:; + icon: #messageIconAt:; + help: #messageHelpAt:; - setIndex: #messageListIndex:; menu: #messageListMenu:shifted:; keyPress: #messageListKey:from:. SystemBrowser browseWithDragNDrop ifTrue:[listSpec dragItem: #dragFromMessageList:]. ^listSpec ! Item was added: + ----- Method: MessageSet>>messageHelpAt: (in category 'message list') ----- + messageHelpAt: anIndex + "Show the first n lines of the sources code of the selected message." + + | reference source formatted lineCount | + Preferences balloonHelpInMessageLists ifFalse: [^ nil]. + self messageList size < anIndex ifTrue: [^ nil]. + + reference := self messageList at: anIndex. + reference isValid ifFalse: [^ nil]. + + source := reference compiledMethod getSource. + formatted := SHTextStylerST80 new + classOrMetaClass: reference actualClass; + styledTextFor: source asText. + + lineCount := 0. + source doWithIndex: [:char :index | + char = Character cr ifTrue: [lineCount := lineCount + 1]. + lineCount > 10 ifTrue: [ + formatted := formatted copyFrom: 1 to: index-1. + formatted append: ' [...]'. + ^ formatted]]. + + ^ formatted! Item was added: + ----- Method: MessageSet>>messageIconAt: (in category 'message list') ----- + messageIconAt: anIndex + + Browser showMessageIcons + ifFalse: [^ nil]. + + ^ ToolIcons iconNamed: (ToolIcons + iconForClass: (self messageList at: anIndex) actualClass + selector: (self messageList at: anIndex) selector)! Item was changed: ----- Method: MessageTrace>>buildMessageListWith: (in category 'private initializing') ----- buildMessageListWith: builder | listSpec | listSpec := builder pluggableAlternateMultiSelectionListSpec new. listSpec model: self ; list: #messageList ; getIndex: #messageListIndex ; setIndex: #toggleSelectionAt:shifted:controlled: ; + icon: #messageIconAt:; + help: #messageHelpAt:; menu: #messageListMenu:shifted: ; getSelectionList: #isMessageSelectedAt: ; setSelectionList: #messageAt:beSelected: ; keyPress: #messageListKey:from:. SystemBrowser browseWithDragNDrop ifTrue: [ listSpec dragItem: #dragFromMessageList: ]. ^ listSpec! Item was removed: - ----- Method: StringMorph>>balloonTextForClassAndMethodString (in category '*Tools') ----- - balloonTextForClassAndMethodString - "Answer suitable balloon text for the receiver thought of as an encoding of the form - [ class ] " - - | aComment | - Preferences balloonHelpInMessageLists - ifFalse: [^ nil]. - MessageSet parse: self contents asString toClassAndSelector: - [:aClass :aSelector | - (aClass notNil and: [aSelector notNil]) ifTrue: - [aComment := aClass precodeCommentOrInheritedCommentFor: aSelector]]. - ^ aComment - ! Item was removed: - ----- Method: StringMorph>>balloonTextForLexiconString (in category '*Tools') ----- - balloonTextForLexiconString - "Answer suitable balloon text for the receiver thought of as an encoding (used in Lexicons) of the form - (>)" - - | aComment contentsString aSelector aClassName | - Preferences balloonHelpInMessageLists - ifFalse: [^ nil]. - contentsString := self contents asString. - aSelector := contentsString upTo: $ . - aClassName := contentsString copyFrom: ((contentsString indexOf: $() + 1) to: ((contentsString indexOf: $)) - 1). - MessageSet parse: (aClassName, ' dummy') toClassAndSelector: - [:cl :sel | cl ifNotNil: - [aComment := cl precodeCommentOrInheritedCommentFor: aSelector]]. - ^ aComment - ! Item was removed: - ----- Method: StringMorph>>balloonTextForMethodString (in category '*Tools') ----- - balloonTextForMethodString - "Answer suitable balloon text for the receiver thought of as a method belonging to the currently-selected class of a browser tool." - - | aWindow aCodeHolder aClass | - Preferences balloonHelpInMessageLists - ifFalse: [^ nil]. - aWindow := self ownerThatIsA: SystemWindow. - (aWindow isNil or: [((aCodeHolder := aWindow model) isKindOf: CodeHolder) not]) - ifTrue: [^ nil]. - ((aClass := aCodeHolder selectedClassOrMetaClass) isNil or: - [(aClass includesSelector: contents asSymbol) not]) - ifTrue: [^ nil]. - ^ aClass precodeCommentOrInheritedCommentFor: contents asSymbol - ! From commits at source.squeak.org Fri Nov 6 11:11:41 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 6 11:11:42 2015 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.10.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.10.mcz ==================== Summary ==================== Name: 51Deprecated-mt.10 Author: mt Time: 6 November 2015, 12:11:35.883 pm UUID: 92916d21-c539-45f6-8766-ad9ace8cbae9 Ancestors: 51Deprecated-mt.9 Makes the preference #balloonHelpInMessageLists functional again. Applies the preferences "Show message icons" and #balloonHelpInMessageLists also to senders, implementors, message traces, debuggers, etc. =============== Diff against 51Deprecated-mt.9 =============== Item was added: + ----- Method: StringMorph>>balloonTextForClassAndMethodString (in category '*51Deprecated-Tools') ----- + balloonTextForClassAndMethodString + "Answer suitable balloon text for the receiver thought of as an encoding of the form + [ class ] " + + | aComment | + Preferences balloonHelpInMessageLists + ifFalse: [^ nil]. + MessageSet parse: self contents asString toClassAndSelector: + [:aClass :aSelector | + (aClass notNil and: [aSelector notNil]) ifTrue: + [aComment := aClass precodeCommentOrInheritedCommentFor: aSelector]]. + ^ aComment + ! Item was added: + ----- Method: StringMorph>>balloonTextForLexiconString (in category '*51Deprecated-Tools') ----- + balloonTextForLexiconString + "Answer suitable balloon text for the receiver thought of as an encoding (used in Lexicons) of the form + (>)" + + | aComment contentsString aSelector aClassName | + Preferences balloonHelpInMessageLists + ifFalse: [^ nil]. + contentsString := self contents asString. + aSelector := contentsString upTo: $ . + aClassName := contentsString copyFrom: ((contentsString indexOf: $() + 1) to: ((contentsString indexOf: $)) - 1). + MessageSet parse: (aClassName, ' dummy') toClassAndSelector: + [:cl :sel | cl ifNotNil: + [aComment := cl precodeCommentOrInheritedCommentFor: aSelector]]. + ^ aComment + ! Item was added: + ----- Method: StringMorph>>balloonTextForMethodString (in category '*51Deprecated-Tools') ----- + balloonTextForMethodString + "Answer suitable balloon text for the receiver thought of as a method belonging to the currently-selected class of a browser tool." + + | aWindow aCodeHolder aClass | + Preferences balloonHelpInMessageLists + ifFalse: [^ nil]. + aWindow := self ownerThatIsA: SystemWindow. + (aWindow isNil or: [((aCodeHolder := aWindow model) isKindOf: CodeHolder) not]) + ifTrue: [^ nil]. + ((aClass := aCodeHolder selectedClassOrMetaClass) isNil or: + [(aClass includesSelector: contents asSymbol) not]) + ifTrue: [^ nil]. + ^ aClass precodeCommentOrInheritedCommentFor: contents asSymbol + ! From Marcel.Taeumel at hpi.de Fri Nov 6 11:01:11 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 6 11:14:35 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.645.mcz In-Reply-To: References: Message-ID: <1446807671892-4859524.post@n4.nabble.com> Here is an example for the debugger's notifier window with both preferences enabled. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-645-mcz-tp4859522p4859524.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Fri Nov 6 11:21:09 2015 From: karlramberg at gmail.com (karl ramberg) Date: Fri Nov 6 11:21:11 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.645.mcz In-Reply-To: <1446807671892-4859524.post@n4.nabble.com> References: <1446807671892-4859524.post@n4.nabble.com> Message-ID: Cool. Maybe we can use this in PreferenceBrowser instead of the strange inline text expansion it has now. Karl On Fri, Nov 6, 2015 at 12:01 PM, marcel.taeumel wrote: > Here is an example for the debugger's notifier window with both preferences > enabled. > > > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Tools-mt-645-mcz-tp4859522p4859524.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151106/c4ab912e/attachment.htm From Das.Linux at gmx.de Fri Nov 6 12:20:06 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Fri Nov 6 12:20:10 2015 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.10.mcz Message-ID: Hey Marcel, On 06.11.2015, at 11:11, commits@source.squeak.org wrote: > Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: > http://source.squeak.org/trunk/51Deprecated-mt.10.mcz > > ==================== Summary ==================== > > Name: 51Deprecated-mt.10 > Author: mt > Time: 6 November 2015, 12:11:35.883 pm > UUID: 92916d21-c539-45f6-8766-ad9ace8cbae9 > Ancestors: 51Deprecated-mt.9 > > Makes the preference #balloonHelpInMessageLists functional again. > > Applies the preferences "Show message icons" and #balloonHelpInMessageLists also to senders, implementors, message traces, debuggers, etc. > > =============== Diff against 51Deprecated-mt.9 =============== > > Item was added: If you deprecate these methods, maybe add a deprecation notice to it, like it is already done with String>>includesSubString: subString self deprecated: 'Use #includesSubstring: instead.'. ^self includesSubstring: subString Best regards -Tobias From Marcel.Taeumel at hpi.de Fri Nov 6 14:47:15 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 6 15:00:39 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.645.mcz In-Reply-To: References: <1446807671892-4859524.post@n4.nabble.com> Message-ID: <1446821235156-4859590.post@n4.nabble.com> Hmm... our list morphs do not support embedding interactive morphs (i.e. radio/toggle buttons) yet... Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-645-mcz-tp4859522p4859590.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Nov 6 15:47:38 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 6 15:47:40 2015 Subject: [squeak-dev] The Trunk: PreferenceBrowser-kfr.57.mcz Message-ID: Karl Ramberg uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-kfr.57.mcz ==================== Summary ==================== Name: PreferenceBrowser-kfr.57 Author: kfr Time: 6 November 2015, 4:47:30.16 pm UUID: 92ea4f34-61fd-4919-8fa2-e4009c869138 Ancestors: PreferenceBrowser-mt.56 Small fix so a selected preference in the PreferenceBrowser becomes deselected on a second mouseUp =============== Diff against PreferenceBrowser-mt.56 =============== Item was changed: ----- Method: PreferenceBrowserMorph>>turnOnSelectedPreference (in category 'submorphs - preference list') ----- turnOnSelectedPreference + + highlightedPreferenceButton = self selectedPreferenceButton + ifTrue: [ highlightedPreferenceButton highlightOff. ^self turnOffSelectedPreference]. highlightedPreferenceButton ifNotNil: [:m | m highlightOff]. highlightedPreferenceButton := self selectedPreferenceButton highlightOn; yourself. self preferenceList scrollToShow: highlightedPreferenceButton bounds.! Item was changed: ----- Method: PreferenceBrowserMorph>>updateSelectedPreference (in category 'updating') ----- updateSelectedPreference | index | - self selectedCategory ifNotNil: [self turnOffSelectedPreference]. index := self selectedPreferenceIndex. index = 0 ifTrue: [^self]. self turnOnSelectedPreference.! From karlramberg at gmail.com Fri Nov 6 15:50:28 2015 From: karlramberg at gmail.com (karl ramberg) Date: Fri Nov 6 15:50:30 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.645.mcz In-Reply-To: <1446821235156-4859590.post@n4.nabble.com> References: <1446807671892-4859524.post@n4.nabble.com> <1446821235156-4859590.post@n4.nabble.com> Message-ID: You are right. The PreferenceBrowser uses a ScrollPane populated with PBPreferenceButtonMorph. Best, Karl On Fri, Nov 6, 2015 at 3:47 PM, marcel.taeumel wrote: > Hmm... our list morphs do not support embedding interactive morphs (i.e. > radio/toggle buttons) yet... > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Tools-mt-645-mcz-tp4859522p4859590.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151106/c12e8bd0/attachment.htm From cunningham.cb at gmail.com Fri Nov 6 21:00:50 2015 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Fri Nov 6 21:00:52 2015 Subject: [squeak-dev] atan2 - or what Squeak called #arcTan: Message-ID: Hi all, Just thought I'd share, mostly. I'm working on a little project to build vsdx files, and one part of it talks about pulling in the right angle, and was somewhat cryptic "use the ATAN2(Y,X)". So, I looked it up, then went hunting in Squeak to see where it was. It turns out it it is the arcTan: function. And after some emperical experimenting, teh X and Y map out to: ATAN2(y,x) = y arcTan: x So, found what I need. That said, the documentation in the various methods are interesting: Number>>arcTan: denominator "The receiver is the tangent of an angle. Answer the angle measured in radians." [this is the same defintions as Number>>arcTan, which is a slightly different beast] Float>>arcTan: denominator "Answer the angle in radians. Optional. See Object documentation whatIsAPrimitive. Implementation note: use sign in order to catch cases of negativeZero" [as far as I can tell, Float>>arcTan: is NOT a primitive] Complex>>arcTan: denominator "Answer the four quadrants arc tangent of receiver over denominator." Probably combining these comments into a more comprehensive whole would give better insight into what the methods mean. If desired, I'd be up for that. Thanks, cbc -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151106/3e3aeb9c/attachment.htm From commits at source.squeak.org Fri Nov 6 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 6 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151106225502.23954.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009114.html Name: ST80-cmm.190 Ancestors: ST80-topa.189 - Keep hot keys consistent between TextEditor and ParagraphEditor. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009115.html Name: Morphic-mt.1030 Ancestors: Morphic-mt.1029 First attempt to document the halo concept. Please revise. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009116.html Name: Morphic-mt.1031 Ancestors: Morphic-mt.1030 Let all kinds of pluggable lists have customizable balloon helps. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009117.html Name: ToolBuilder-Morphic-mt.153 Ancestors: ToolBuilder-Morphic-mt.152 Let all kinds of pluggable lists have customizable balloon helps. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009118.html Name: Tools-mt.645 Ancestors: Tools-mt.644 Makes the preference #balloonHelpInMessageLists functional again. Applies the preferences "Show message icons" and #balloonHelpInMessageLists also to senders, implementors, message traces, debuggers, etc. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009119.html Name: 51Deprecated-mt.10 Ancestors: 51Deprecated-mt.9 Makes the preference #balloonHelpInMessageLists functional again. Applies the preferences "Show message icons" and #balloonHelpInMessageLists also to senders, implementors, message traces, debuggers, etc. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009120.html Name: PreferenceBrowser-kfr.57 Ancestors: PreferenceBrowser-mt.56 Small fix so a selected preference in the PreferenceBrowser becomes deselected on a second mouseUp ============================================= From commits at source.squeak.org Sat Nov 7 11:19:19 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 7 11:19:21 2015 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.11.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.11.mcz ==================== Summary ==================== Name: 51Deprecated-mt.11 Author: mt Time: 7 November 2015, 12:19:13.781 pm UUID: b5f021aa-b317-4bf0-825b-3d8aae1ff1e4 Ancestors: 51Deprecated-mt.10 Adds deprecation warnings. =============== Diff against 51Deprecated-mt.10 =============== Item was changed: ----- Method: StringMorph>>balloonTextForClassAndMethodString (in category '*51Deprecated-Tools') ----- balloonTextForClassAndMethodString "Answer suitable balloon text for the receiver thought of as an encoding of the form [ class ] " | aComment | + self deprecated: 'Balloon texts for tools are defined in their respective model classes. For example, see Browser >> #messageHelpAt:'. + Preferences balloonHelpInMessageLists ifFalse: [^ nil]. MessageSet parse: self contents asString toClassAndSelector: [:aClass :aSelector | (aClass notNil and: [aSelector notNil]) ifTrue: [aComment := aClass precodeCommentOrInheritedCommentFor: aSelector]]. ^ aComment ! Item was changed: ----- Method: StringMorph>>balloonTextForLexiconString (in category '*51Deprecated-Tools') ----- balloonTextForLexiconString "Answer suitable balloon text for the receiver thought of as an encoding (used in Lexicons) of the form (>)" | aComment contentsString aSelector aClassName | + self deprecated: 'Balloon texts for tools are defined in their respective model classes. For example, see Browser >> #messageHelpAt:'. + Preferences balloonHelpInMessageLists ifFalse: [^ nil]. contentsString := self contents asString. aSelector := contentsString upTo: $ . aClassName := contentsString copyFrom: ((contentsString indexOf: $() + 1) to: ((contentsString indexOf: $)) - 1). MessageSet parse: (aClassName, ' dummy') toClassAndSelector: [:cl :sel | cl ifNotNil: [aComment := cl precodeCommentOrInheritedCommentFor: aSelector]]. ^ aComment ! Item was changed: ----- Method: StringMorph>>balloonTextForMethodString (in category '*51Deprecated-Tools') ----- balloonTextForMethodString "Answer suitable balloon text for the receiver thought of as a method belonging to the currently-selected class of a browser tool." | aWindow aCodeHolder aClass | + self deprecated: 'Balloon texts for tools are defined in their respective model classes. For example, see Browser >> #messageHelpAt:'. + Preferences balloonHelpInMessageLists ifFalse: [^ nil]. aWindow := self ownerThatIsA: SystemWindow. (aWindow isNil or: [((aCodeHolder := aWindow model) isKindOf: CodeHolder) not]) ifTrue: [^ nil]. ((aClass := aCodeHolder selectedClassOrMetaClass) isNil or: [(aClass includesSelector: contents asSymbol) not]) ifTrue: [^ nil]. ^ aClass precodeCommentOrInheritedCommentFor: contents asSymbol ! From commits at source.squeak.org Sat Nov 7 21:07:57 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 7 21:07:58 2015 Subject: [squeak-dev] The Trunk: Network-dtl.168.mcz Message-ID: David T. Lewis uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-dtl.168.mcz ==================== Summary ==================== Name: Network-dtl.168 Author: dtl Time: 7 November 2015, 4:07:46.636 pm UUID: 95e4b6a7-db6d-4b6b-bffa-345401015324 Ancestors: Network-ul.167 SocketAddress>>printOn: should handle the case of an inspector on an instance from a previous session that is no longer a valid socket address. =============== Diff against Network-ul.167 =============== Item was changed: ----- Method: SocketAddress>>printOn: (in category 'printing') ----- printOn: aStream + [aStream + nextPutAll: self hostNumber; + nextPut: $(; nextPutAll: self hostName; nextPut: $); + nextPut: $,; + nextPutAll: self serviceNumber; + nextPut: $(; nextPutAll: self serviceName; nextPut: $)] + on: Error "e.g. inspector on address from a previous session" + do: [aStream nextPutAll: 'an invalid '; + nextPutAll: self class name; + nextPut: Character space. + ^super printOn: aStream]! - aStream - nextPutAll: self hostNumber; - nextPut: $(; nextPutAll: self hostName; nextPut: $); - nextPut: $,; - nextPutAll: self serviceNumber; - nextPut: $(; nextPutAll: self serviceName; nextPut: $)! From johnmci at smalltalkconsulting.com Sat Nov 7 21:27:20 2015 From: johnmci at smalltalkconsulting.com (John McIntosh) Date: Sat Nov 7 21:28:04 2015 Subject: [squeak-dev] Squeak on iOS at last? In-Reply-To: References: <65753F78-F1C4-4234-B823-C748B9836DC5@gmail.com> <90BD9FAA-1B73-496C-89FD-A22B9DAC1F3B@freudenbergs.de> Message-ID: Some one should feed me any source code changes for this, and I"ll look at integration into the cog branch(es) On Wed, Sep 23, 2015 at 1:17 PM, Javier Diaz-Reinoso wrote: > On Sep 22, 2015, at 07:39, Bert Freudenberg wrote: > > > On 21.09.2015, at 01:40, Javier Diaz-Reinoso > wrote: > > > I am also interested in this, so I wasted a few days and finally have a > (original) Squeak 4.1 image working in mi old iPad 2: > > > > Nice! > > the clock works, but that is all, I can?t enter anything, I know I need > modifications in the image, but before I spend more days in this, can any > people who knows send me advice and perhaps a change set with the > modifications? > > > You can dig around on John McIntosh?s site but I don?t think there?s a > comprehensible set of changes yet. > > > I find the file miPhone-Events-EstebanLorenzano.25.mcz who contains your > code and code from John McIntosh and Esteban Lorenzano and others, that > file don?t load in Squeak, I suppose is for Pharo, but with selective > copy-paste I have now a working UI. > > > What I did years ago was adding image-side support for multi-touch, plus > an on-screen alt key [*]. That?s not strictly necessary though, the VM > could (and IMHO should) generate mouse events itself. Still, you need a way > to bring up the keyboard (which I ?solved? back then by hacking the VM to > show the keyboard when rotating to portrait orientation). > > The proper way to do this (IMHO) would be by implementing an IMM plugin > for iOS just like we have for X11 etc. Morphic calls a plugin function > whenever a text input field gets focused, which could be used to trigger > the keyboard. But AFAIK nobody has gone that route yet, instead relying on > the ObjectiveCBridge plugin to call OS functions directly. > > Your best bet if you want to avoid doing it yourself would be contacting > the makers of Pyonkee, the most complex Squeak app in the Apple App Store > yet. There is also DrGeo, for which Esteban did the VM work. And since all > this is still pretty experimental, continuing this discussion on the VM dev > list would be a good idea :) > > - Bert - > > [*] https://www.youtube.com/watch?v=gYrp31fH-Jk > > > I find in a Pharo repository the folder IOSPlugin who is used in DrGeo, is > very small but works, in the .mcz is some code to call the plugin from > TextMorph>>wantsKeyboardFocus who also is not in Squeak, but inserting the > line in TextMorphForEditView>>keyboardFocusChange: is now possible to > simple click in a Workspace or Browser and the keyboard appears. > > Apart from a few fixes I am not really changing the VM, is only in the > image. The most desirable change in the VM I think is changing to Cog > more speed is always best. > > > > -- =========================================================================== John M. McIntosh. Corporate Smalltalk Consulting Ltd https://www.linkedin.com/in/smalltalk =========================================================================== -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151107/b3860a5f/attachment.htm From commits at source.squeak.org Sat Nov 7 22:55:03 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 7 22:55:03 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151107225503.316.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009121.html Name: 51Deprecated-mt.11 Ancestors: 51Deprecated-mt.10 Adds deprecation warnings. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009122.html Name: Network-dtl.168 Ancestors: Network-ul.167 SocketAddress>>printOn: should handle the case of an inspector on an instance from a previous session that is no longer a valid socket address. ============================================= From commits at source.squeak.org Sun Nov 8 16:00:06 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Nov 8 16:00:07 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1032.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1032.mcz ==================== Summary ==================== Name: Morphic-mt.1032 Author: mt Time: 8 November 2015, 4:59:25.52 pm UUID: 7edcfd43-992b-48dd-ba30-c500c21c028c Ancestors: Morphic-mt.1031 Remove hover-indication when mouse-leaving tree morphs. =============== Diff against Morphic-mt.1031 =============== Item was changed: ----- Method: SimpleHierarchicalListMorph>>mouseLeave: (in category 'event handling') ----- mouseLeave: aMouseEvent super mouseLeave: aMouseEvent. + self hoveredMorph: nil. (SystemWindow allWindowsAcceptInput or: [ Preferences mouseOverForKeyboardFocus ]) ifTrue: [ aMouseEvent hand releaseKeyboardFocus: self ]! Item was changed: ----- Method: SimpleHierarchicalListMorph>>mouseLeaveDragging: (in category 'event handling') ----- mouseLeaveDragging: anEvent + + self hoveredMorph: nil. (self dropEnabled and:[anEvent hand hasSubmorphs]) ifFalse: ["no d&d" ^ super mouseLeaveDragging: anEvent]. self resetPotentialDropMorph. anEvent hand releaseMouseFocus: self. "above is ugly but necessary for now" ! From commits at source.squeak.org Sun Nov 8 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Nov 8 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151108225502.27478.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009123.html Name: Morphic-mt.1032 Ancestors: Morphic-mt.1031 Remove hover-indication when mouse-leaving tree morphs. ============================================= From commits at source.squeak.org Mon Nov 9 19:49:24 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 9 19:49:26 2015 Subject: [squeak-dev] The Trunk: Kernel-nice.966.mcz Message-ID: Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.966.mcz ==================== Summary ==================== Name: Kernel-nice.966 Author: nice Time: 9 November 2015, 8:48:46.618 pm UUID: 31f4a1ed-f2fd-4dd5-b2ab-c43df4e8569b Ancestors: Kernel-mt.965 Provide a simplistic BlockClosure equality test in order to make CharacterSet tests pass again. Ideally, we should compare the byte codes when isClean, and the outerContext when not. =============== Diff against Kernel-mt.965 =============== Item was added: + ----- Method: BlockClosure>>= (in category 'comparing') ----- + = aClosure + self == aClosure ifTrue: [^true]. + aClosure class = self class ifFalse: [^false]. + (self method == aClosure method and: [startpc = aClosure startpc and: [self isClean]]) + ifTrue: [^true]. + ^outerContext = aClosure outerContext and: [startpc = aClosure startpc]! Item was added: + ----- Method: BlockClosure>>hash (in category 'comparing') ----- + hash + ^(self method hash + startpc hash) hashMultiply! From commits at source.squeak.org Mon Nov 9 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 9 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151109225502.20011.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009124.html Name: Kernel-nice.966 Ancestors: Kernel-mt.965 Provide a simplistic BlockClosure equality test in order to make CharacterSet tests pass again. Ideally, we should compare the byte codes when isClean, and the outerContext when not. ============================================= From tim at rowledge.org Tue Nov 10 00:09:03 2015 From: tim at rowledge.org (tim Rowledge) Date: Tue Nov 10 00:09:07 2015 Subject: [squeak-dev] Unix MIDI instrument selection Message-ID: <420DB286-0E87-4974-B499-10C50DC4EE53@rowledge.org> (posted to both lists because although it is strictly speaking a vm (possible) bug) there may be midi-aware readers not on that list) I?m hooking up ALSA MIDI on the Pi for Scratch. The basic work was actually done a year ago by Sugiura-san but I missed reading about it due to travel back last summer. It mostly works but the instrument selection is off-by-one and it appears to be due to vm bug that looks to have been around a very long time. In the image we use 1-128 for the MIDI general instrument list - so Tubular Bells is 15 - and subtract one before passing to the plugin in the time-honoured fashion. Unfortunately the tubular bells sound more like a xylophone. And ?seashore? sounds like a telephone. It turns out that in sqUnixMIDIALSA.inc the code which - so far as I can tell - deals with the instrument index being set actually *adds* 1 to the byte value we pass in! I can?t think of any reason that would sensible but since all I know of ALSA MIDI stuff for unix has been read recently from a bunch of truly awful webpages masquerading as documentation, whaddaino? This code snippet - case 192: /* program change */ { int instrument= arg1 + 1; snd_seq_ev_set_pgmchange(ev, ch, instrument); } break; in Cog/platforms/unix/plugins/MIDIPlugin/sqUnixMIDIALSA.inc seems to have been there as long as the file has existed. Certainly in my ancient dusty archives back in 3.8 days there was no code at all for unix MIDI, so the history on the svn server seems to be correct. I?ll compile a new vm with the +1 whacked out and see what happens but any solid info would be welcomed. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim A paperless office has about as likely as a paperless bathroom. From tim at rowledge.org Tue Nov 10 01:25:45 2015 From: tim at rowledge.org (tim Rowledge) Date: Tue Nov 10 01:25:50 2015 Subject: [squeak-dev] Re: Unix MIDI instrument selection In-Reply-To: <420DB286-0E87-4974-B499-10C50DC4EE53@rowledge.org> References: <420DB286-0E87-4974-B499-10C50DC4EE53@rowledge.org> Message-ID: > On 09-11-2015, at 4:09 PM, tim Rowledge wrote: > I?ll compile a new vm with the +1 whacked out and see what happens but any solid info would be welcomed. Without that +1 we get no sound? Huh? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim A computer scientist is someone who fixes things that aren't broken. From tim at rowledge.org Tue Nov 10 02:17:19 2015 From: tim at rowledge.org (tim Rowledge) Date: Tue Nov 10 02:17:24 2015 Subject: [squeak-dev] Re: Unix MIDI instrument selection In-Reply-To: References: <420DB286-0E87-4974-B499-10C50DC4EE53@rowledge.org> Message-ID: <5F006788-5307-46BA-B220-BA0DA81B6731@rowledge.org> > On 09-11-2015, at 5:25 PM, tim Rowledge wrote: > > >> On 09-11-2015, at 4:09 PM, tim Rowledge wrote: >> I?ll compile a new vm with the +1 whacked out and see what happens but any solid info would be welcomed. > > Without that +1 we get no sound? Huh? And with debug printing we get no sound. It?s a HeisenMIDI; if you look at it it isn?t where you think it should be. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: RTS: Rewind Tape and Shred From Marcel.Taeumel at hpi.de Tue Nov 10 09:51:37 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 10 10:05:30 2015 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.634.mcz In-Reply-To: References: Message-ID: <1447149097718-4860107.post@n4.nabble.com> This introduces a regression because changed methods now get the "nil" category if no category is selected... :-/ Additionally, you cannot simply adopt another methods category for a new method by simple replacing and saving the source. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-634-mcz-tp4853788p4860107.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Nov 10 10:34:54 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 10 10:48:46 2015 Subject: [squeak-dev] Regression in #duplicateAllControlAndAltKeys, CTRL+CR will be CMD+M Message-ID: <1447151694079-4860113.post@n4.nabble.com> Hello --- If the preference "duplicateAllControlAndAltKeys" is enabled, then CTRL+CR will be converted to CMD+M on Windows. I suspect the bug to be in InputSensor >> installKeyDecodeTable or rather Character >> #allByteCharacters. Everything is fine with "duplicateControlAndAltKeys" and "swapControlAndAltKeys". Best, Marcel -- View this message in context: http://forum.world.st/Regression-in-duplicateAllControlAndAltKeys-CTRL-CR-will-be-CMD-M-tp4860113.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Tue Nov 10 12:37:57 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 10 12:37:59 2015 Subject: [squeak-dev] The Trunk: Tools-mt.646.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.646.mcz ==================== Summary ==================== Name: Tools-mt.646 Author: mt Time: 10 November 2015, 1:37:38.608 pm UUID: 3aa497d2-408a-4c0a-92a1-21b3e959a5a4 Ancestors: Tools-mt.645 Adds preference to see annotation pane in full debugger windows again. =============== Diff against Tools-mt.645 =============== Item was changed: CodeHolder subclass: #Debugger instanceVariableNames: 'interruptedProcess interruptedController contextStack contextStackIndex contextStackList receiverInspector contextVariablesInspector externalInterrupt proceedValue selectingPC savedCursor isolationHead failedProject errorWasInUIProcess labelString message untilExpression' + classVariableNames: 'ContextStackKeystrokes ErrorRecursion InterruptUIProcessIfBlockedOnErrorInBackgroundProcess WantsAnnotationPane' - classVariableNames: 'ContextStackKeystrokes ErrorRecursion InterruptUIProcessIfBlockedOnErrorInBackgroundProcess' poolDictionaries: '' category: 'Tools-Debugger'! !Debugger commentStamp: '' prior: 0! I represent the machine state at the time of an interrupted process. I also represent a query path into the state of the process. The debugger is typically viewed through a window that views the stack of suspended contexts, the code for, and execution point in, the currently selected message, and inspectors on both the receiver of the currently selected message, and the variables in the current context. Special note on recursive errors: Some errors affect Squeak's ability to present a debugger. This is normally an unrecoverable situation. However, if such an error occurs in an isolation layer, Squeak will attempt to exit from the isolation layer and then present a debugger. Here is the chain of events in such a recovery. * A recursive error is detected. * The current project is queried for an isolationHead * Changes in the isolationHead are revoked * The parent project of isolated project is returned to * The debugger is opened there and execution resumes. If the user closes that debugger, execution continues in the outer project and layer. If, after repairing some damage, the user proceeds from the debugger, then the isolationHead is re-invoked, the failed project is re-entered, and execution resumes in that world. ! Item was added: + ----- Method: Debugger class>>wantsAnnotationPane (in category 'preferences') ----- + wantsAnnotationPane + + ^ WantsAnnotationPane ifNil: [false]! Item was added: + ----- Method: Debugger class>>wantsAnnotationPane: (in category 'preferences') ----- + wantsAnnotationPane: boolean + + WantsAnnotationPane := boolean.! Item was changed: ----- Method: Debugger>>wantsAnnotationPane (in category 'toolbuilder') ----- wantsAnnotationPane + + ^ self class wantsAnnotationPane! - "Annotations don't look good in debugger. Suppress 'em." - ^false! From commits at source.squeak.org Tue Nov 10 14:12:55 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 10 14:12:57 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1033.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1033.mcz ==================== Summary ==================== Name: Morphic-mt.1033 Author: mt Time: 10 November 2015, 3:12:19.498 pm UUID: 8d36af93-3dc5-469e-b2e6-97c284d04458 Ancestors: Morphic-mt.1032 Removes some memory overhead regarding tree morphs. =============== Diff against Morphic-mt.1032 =============== Item was changed: ----- Method: ListItemWrapper>>setItem: (in category 'initialization') ----- setItem: anObject + item := anObject.! - item ifNotNil: [:obj | obj removeDependent: self]. - item := anObject. - item ifNotNil: [:obj | obj addDependent: self].! From commits at source.squeak.org Tue Nov 10 14:13:41 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 10 14:13:43 2015 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.80.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.80.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.80 Author: mt Time: 10 November 2015, 3:13:36.687 pm UUID: 43cd4565-4454-4ac8-8c8f-d95a1c1bd7af Ancestors: HelpSystem-Core-cmm.79 Add dependents in help topic wrappers to make callback work because it was removed from base class to avoid memory overhead. =============== Diff against HelpSystem-Core-cmm.79 =============== Item was added: + ----- Method: HelpTopicListItemWrapper>>setItem: (in category 'initialization') ----- + setItem: anObject + + item ifNotNil: [:obj | obj removeDependent: self]. + super setItem: anObject. + item ifNotNil: [:obj | obj addDependent: self].! From karlramberg at gmail.com Tue Nov 10 14:45:42 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 10 14:45:45 2015 Subject: [squeak-dev] Minor issue with NewColorPickerMorph and question about Object>>changed: and how to debug Message-ID: In the NewColorPickerMorph if you scale the alpha of the selected color, the UI will not turn let you set alpha back to fully opaque. You can pull the slider all the way to the max but the selected color will remain translucent. This is a minor issue but the big issue is how do debug this and similar issues which is set up with the Object>>update: or Object>>changed: I find that I'm going into a rabbit hole each time I try to debug these message sends. I can't seem to get a grip on what or where the messages and changes in state are from. Do anybody have any advise on good practice for debugging Object>>update: or Object>>changed: ? Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151110/924e24fc/attachment.htm From nicolaihess at gmail.com Tue Nov 10 16:18:44 2015 From: nicolaihess at gmail.com (Nicolai Hess) Date: Tue Nov 10 16:18:48 2015 Subject: [squeak-dev] Minor issue with NewColorPickerMorph and question about Object>>changed: and how to debug In-Reply-To: References: Message-ID: 2015-11-10 15:45 GMT+01:00 karl ramberg : > In the NewColorPickerMorph if you scale the alpha of the selected color, > the UI will not turn let you set alpha back to fully opaque. You can pull > the slider all the way to the max but the selected color will remain > translucent. > > This is a minor issue but the big issue is how do debug this and similar > issues which is set up with the Object>>update: or Object>>changed: > > I find that I'm going into a rabbit hole each time I try to debug these > message sends. I can't seem to get a grip on what or where the messages and > changes in state are from. > > Do anybody have any advise on good practice for debugging Object>>update: > or Object>>changed: ? > > Best, > Karl > > > > btw, there is an open issue on mantis for the NewColorPicker http://bugs.squeak.org/view.php?id=7753 NewColorPickerMorph can not be used to change colors re erase colors from a SketchMorph. The Menu entries "erase pixels of color" and "recolor pixels of color" raise a DNU. Changing a GradientFill color from within the fill style menu (for any morph) doesn't work as well. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151110/e831f70f/attachment.htm From commits at source.squeak.org Tue Nov 10 16:58:03 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 10 16:58:04 2015 Subject: [squeak-dev] The Trunk: Tools-cmm.647.mcz Message-ID: Chris Muller uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-cmm.647.mcz ==================== Summary ==================== Name: Tools-cmm.647 Author: cmm Time: 10 November 2015, 10:57:40.093 am UUID: 41a53017-5459-4126-a74f-d65917846dac Ancestors: Tools-mt.646 When accepting a method, assign its category to that of the last-selected method (now being overtyped) instead of "as yet unclassified." =============== Diff against Tools-mt.646 =============== Item was changed: ----- Method: Browser>>defineMessageFrom:notifying: (in category 'message functions') ----- defineMessageFrom: aString notifying: aController "Compile the expressions in aString. Notify aController if a syntax error occurs. Install the compiled method in the selected class classified under the currently selected message category name. Answer the selector obtained if compilation succeeds, nil otherwise." + | selectedMessageName selector category oldMessageList selectedClassOrMetaClass | - | selectedMessageName selector category oldMessageList | selectedMessageName := self selectedMessageName. oldMessageList := self messageList. + selectedClassOrMetaClass := self selectedClassOrMetaClass. contents := nil. + selector := (selectedClassOrMetaClass newParser parseSelector: aString). - selector := (self selectedClassOrMetaClass newParser parseSelector: aString). (self metaClassIndicated + and: [(selectedClassOrMetaClass includesSelector: selector) not - and: [(self selectedClassOrMetaClass includesSelector: selector) not and: [Metaclass isScarySelector: selector]]) ifTrue: ["A frist-time definition overlaps the protocol of Metaclasses" (self confirm: ((selector , ' is used in the existing class system. Overriding it could cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: selector size)) ifFalse: [^nil]]. + selector := selectedClassOrMetaClass - selector := self selectedClassOrMetaClass compile: aString + classified: (category := (selectedClassOrMetaClass >> selectedMessageName) methodReference category) - classified: (category := self selectedMessageCategoryName) notifying: aController. selector == nil ifTrue: [^ nil]. contents := aString copy. selector ~~ selectedMessageName ifTrue: [category = ClassOrganizer nullCategory ifTrue: [self changed: #classSelectionChanged. self changed: #classList. self messageCategoryListIndex: 1]. self setClassOrganizer. "In case organization not cached" (oldMessageList includes: selector) ifFalse: [self changed: #messageList]. self messageListIndex: (self messageList indexOf: selector)]. ^ selector! From asqueaker at gmail.com Tue Nov 10 17:06:55 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 10 17:06:58 2015 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.634.mcz In-Reply-To: <1447149097718-4860107.post@n4.nabble.com> References: <1447149097718-4860107.post@n4.nabble.com> Message-ID: In my testing, its actually the "as yet unclassified" category (maybe nil under the covers). I just did a fix which strikes a balance. I really don't want it to change my list (non)selection, but at least now it will select the category of the method being overtyped so the user doesn't have to categorize method separately afterward. On Tue, Nov 10, 2015 at 3:51 AM, marcel.taeumel wrote: > This introduces a regression because changed methods now get the "nil" > category if no category is selected... :-/ > > Additionally, you cannot simply adopt another methods category for a new > method by simple replacing and saving the source. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-634-mcz-tp4853788p4860107.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Tue Nov 10 17:10:26 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 10 17:10:28 2015 Subject: [squeak-dev] The Trunk: Tools-mt.646.mcz In-Reply-To: <5641e52b.904a370a.3e541.ffffa3ceSMTPIN_ADDED_MISSING@mx.google.com> References: <5641e52b.904a370a.3e541.ffffa3ceSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Yesss!! Thank you! When one is _debugging_ is one of the most prime times one wants to see the annotation pane because that's when they're asking, "who the hell wrote THIS method..? Is it a recent change?" ;-) On Tue, Nov 10, 2015 at 6:37 AM, wrote: > Marcel Taeumel uploaded a new version of Tools to project The Trunk: > http://source.squeak.org/trunk/Tools-mt.646.mcz > > ==================== Summary ==================== > > Name: Tools-mt.646 > Author: mt > Time: 10 November 2015, 1:37:38.608 pm > UUID: 3aa497d2-408a-4c0a-92a1-21b3e959a5a4 > Ancestors: Tools-mt.645 > > Adds preference to see annotation pane in full debugger windows again. > > =============== Diff against Tools-mt.645 =============== > > Item was changed: > CodeHolder subclass: #Debugger > instanceVariableNames: 'interruptedProcess interruptedController contextStack contextStackIndex contextStackList receiverInspector contextVariablesInspector externalInterrupt proceedValue selectingPC savedCursor isolationHead failedProject errorWasInUIProcess labelString message untilExpression' > + classVariableNames: 'ContextStackKeystrokes ErrorRecursion InterruptUIProcessIfBlockedOnErrorInBackgroundProcess WantsAnnotationPane' > - classVariableNames: 'ContextStackKeystrokes ErrorRecursion InterruptUIProcessIfBlockedOnErrorInBackgroundProcess' > poolDictionaries: '' > category: 'Tools-Debugger'! > > !Debugger commentStamp: '' prior: 0! > I represent the machine state at the time of an interrupted process. I also represent a query path into the state of the process. The debugger is typically viewed through a window that views the stack of suspended contexts, the code for, and execution point in, the currently selected message, and inspectors on both the receiver of the currently selected message, and the variables in the current context. > > Special note on recursive errors: > Some errors affect Squeak's ability to present a debugger. This is normally an unrecoverable situation. However, if such an error occurs in an isolation layer, Squeak will attempt to exit from the isolation layer and then present a debugger. Here is the chain of events in such a recovery. > > * A recursive error is detected. > * The current project is queried for an isolationHead > * Changes in the isolationHead are revoked > * The parent project of isolated project is returned to > * The debugger is opened there and execution resumes. > > If the user closes that debugger, execution continues in the outer project and layer. If, after repairing some damage, the user proceeds from the debugger, then the isolationHead is re-invoked, the failed project is re-entered, and execution resumes in that world. ! > > Item was added: > + ----- Method: Debugger class>>wantsAnnotationPane (in category 'preferences') ----- > + wantsAnnotationPane > + + categoryList: #(debugger tools) > + description: 'If true, show annotation for selected method.' > + type: #Boolean> > + ^ WantsAnnotationPane ifNil: [false]! > > Item was added: > + ----- Method: Debugger class>>wantsAnnotationPane: (in category 'preferences') ----- > + wantsAnnotationPane: boolean > + > + WantsAnnotationPane := boolean.! > > Item was changed: > ----- Method: Debugger>>wantsAnnotationPane (in category 'toolbuilder') ----- > wantsAnnotationPane > + > + ^ self class wantsAnnotationPane! > - "Annotations don't look good in debugger. Suppress 'em." > - ^false! > > From asqueaker at gmail.com Tue Nov 10 17:13:00 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 10 17:13:02 2015 Subject: [squeak-dev] The Trunk: Tools-mt.646.mcz In-Reply-To: <5641e52b.904a370a.3e541.ffffa3ceSMTPIN_ADDED_MISSING@mx.google.com> References: <5641e52b.904a370a.3e541.ffffa3ceSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Do you think this really needs to be a separate preference from the regular annotationPanes preference? IMO, one preference for all annotation panes should be sufficient. On Tue, Nov 10, 2015 at 6:37 AM, wrote: > Marcel Taeumel uploaded a new version of Tools to project The Trunk: > http://source.squeak.org/trunk/Tools-mt.646.mcz > > ==================== Summary ==================== > > Name: Tools-mt.646 > Author: mt > Time: 10 November 2015, 1:37:38.608 pm > UUID: 3aa497d2-408a-4c0a-92a1-21b3e959a5a4 > Ancestors: Tools-mt.645 > > Adds preference to see annotation pane in full debugger windows again. > > =============== Diff against Tools-mt.645 =============== > > Item was changed: > CodeHolder subclass: #Debugger > instanceVariableNames: 'interruptedProcess interruptedController contextStack contextStackIndex contextStackList receiverInspector contextVariablesInspector externalInterrupt proceedValue selectingPC savedCursor isolationHead failedProject errorWasInUIProcess labelString message untilExpression' > + classVariableNames: 'ContextStackKeystrokes ErrorRecursion InterruptUIProcessIfBlockedOnErrorInBackgroundProcess WantsAnnotationPane' > - classVariableNames: 'ContextStackKeystrokes ErrorRecursion InterruptUIProcessIfBlockedOnErrorInBackgroundProcess' > poolDictionaries: '' > category: 'Tools-Debugger'! > > !Debugger commentStamp: '' prior: 0! > I represent the machine state at the time of an interrupted process. I also represent a query path into the state of the process. The debugger is typically viewed through a window that views the stack of suspended contexts, the code for, and execution point in, the currently selected message, and inspectors on both the receiver of the currently selected message, and the variables in the current context. > > Special note on recursive errors: > Some errors affect Squeak's ability to present a debugger. This is normally an unrecoverable situation. However, if such an error occurs in an isolation layer, Squeak will attempt to exit from the isolation layer and then present a debugger. Here is the chain of events in such a recovery. > > * A recursive error is detected. > * The current project is queried for an isolationHead > * Changes in the isolationHead are revoked > * The parent project of isolated project is returned to > * The debugger is opened there and execution resumes. > > If the user closes that debugger, execution continues in the outer project and layer. If, after repairing some damage, the user proceeds from the debugger, then the isolationHead is re-invoked, the failed project is re-entered, and execution resumes in that world. ! > > Item was added: > + ----- Method: Debugger class>>wantsAnnotationPane (in category 'preferences') ----- > + wantsAnnotationPane > + + categoryList: #(debugger tools) > + description: 'If true, show annotation for selected method.' > + type: #Boolean> > + ^ WantsAnnotationPane ifNil: [false]! > > Item was added: > + ----- Method: Debugger class>>wantsAnnotationPane: (in category 'preferences') ----- > + wantsAnnotationPane: boolean > + > + WantsAnnotationPane := boolean.! > > Item was changed: > ----- Method: Debugger>>wantsAnnotationPane (in category 'toolbuilder') ----- > wantsAnnotationPane > + > + ^ self class wantsAnnotationPane! > - "Annotations don't look good in debugger. Suppress 'em." > - ^false! > > From asqueaker at gmail.com Tue Nov 10 17:16:37 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 10 17:16:40 2015 Subject: [squeak-dev] Minor issue with NewColorPickerMorph and question about Object>>changed: and how to debug In-Reply-To: References: Message-ID: I hear you about trying to debug the Listener pattern, its a pain. One thing I do when I can't use the debugger is create a global "object log" -- an OrderedCollection -- and then, in Object>>#update: (or whereever) capture the current stack into your log: MyGlobalLog add: thisContext longStack On Tue, Nov 10, 2015 at 8:45 AM, karl ramberg wrote: > In the NewColorPickerMorph if you scale the alpha of the selected color, the > UI will not turn let you set alpha back to fully opaque. You can pull the > slider all the way to the max but the selected color will remain > translucent. > > This is a minor issue but the big issue is how do debug this and similar > issues which is set up with the Object>>update: or Object>>changed: > > I find that I'm going into a rabbit hole each time I try to debug these > message sends. I can't seem to get a grip on what or where the messages and > changes in state are from. > > Do anybody have any advise on good practice for debugging Object>>update: or > Object>>changed: ? > > Best, > Karl > > > From asqueaker at gmail.com Tue Nov 10 17:26:02 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 10 17:26:04 2015 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.634.mcz In-Reply-To: References: <1447149097718-4860107.post@n4.nabble.com> Message-ID: > change my list (non)selection, but at least now it will select the it will ASSIGN (not select) the category of the method being overtyped... From karlramberg at gmail.com Tue Nov 10 18:46:17 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 10 18:46:19 2015 Subject: [squeak-dev] Minor issue with NewColorPickerMorph and question about Object>>changed: and how to debug In-Reply-To: References: Message-ID: Great tips. I'll test that Best, Karl On Tue, Nov 10, 2015 at 6:16 PM, Chris Muller wrote: > I hear you about trying to debug the Listener pattern, its a pain. > > One thing I do when I can't use the debugger is create a global > "object log" -- an OrderedCollection -- and then, in Object>>#update: > (or whereever) capture the current stack into your log: > > MyGlobalLog add: thisContext longStack > > > > On Tue, Nov 10, 2015 at 8:45 AM, karl ramberg > wrote: > > In the NewColorPickerMorph if you scale the alpha of the selected color, > the > > UI will not turn let you set alpha back to fully opaque. You can pull the > > slider all the way to the max but the selected color will remain > > translucent. > > > > This is a minor issue but the big issue is how do debug this and similar > > issues which is set up with the Object>>update: or Object>>changed: > > > > I find that I'm going into a rabbit hole each time I try to debug these > > message sends. I can't seem to get a grip on what or where the messages > and > > changes in state are from. > > > > Do anybody have any advise on good practice for debugging > Object>>update: or > > Object>>changed: ? > > > > Best, > > Karl > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151110/020f0a32/attachment.htm From karlramberg at gmail.com Tue Nov 10 18:53:50 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 10 18:53:52 2015 Subject: [squeak-dev] Minor issue with NewColorPickerMorph and question about Object>>changed: and how to debug In-Reply-To: References: Message-ID: On Tue, Nov 10, 2015 at 5:18 PM, Nicolai Hess wrote: > > > 2015-11-10 15:45 GMT+01:00 karl ramberg : > >> In the NewColorPickerMorph if you scale the alpha of the selected color, >> the UI will not turn let you set alpha back to fully opaque. You can pull >> the slider all the way to the max but the selected color will remain >> translucent. >> >> This is a minor issue but the big issue is how do debug this and similar >> issues which is set up with the Object>>update: or Object>>changed: >> >> I find that I'm going into a rabbit hole each time I try to debug these >> message sends. I can't seem to get a grip on what or where the messages and >> changes in state are from. >> >> Do anybody have any advise on good practice for debugging Object>>update: >> or Object>>changed: ? >> >> Best, >> Karl >> >> >> >> > btw, there is an open issue on mantis for the NewColorPicker > http://bugs.squeak.org/view.php?id=7753 > NewColorPickerMorph can not be used to change colors re erase > colors from a SketchMorph. > The Menu entries > "erase pixels of color" and > "recolor pixels of color" raise a DNU. > I'll take a look at that. Changing colors in a Sketch is quite a special case, though. > > Changing a GradientFill color from within the > fill style menu (for any morph) doesn't work as well. > Have you looked at the latest trunk where I have contributed a special tool for editing colors in gradients ? Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151110/dac7fd94/attachment.htm From karlramberg at gmail.com Tue Nov 10 18:59:08 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 10 18:59:11 2015 Subject: [squeak-dev] The Trunk: Tools-mt.646.mcz In-Reply-To: References: <5641e52b.904a370a.3e541.ffffa3ceSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Yes, great. I would even like a versions button in the debugger as well :-) Karl On Tue, Nov 10, 2015 at 6:10 PM, Chris Muller wrote: > Yesss!! Thank you! > > When one is _debugging_ is one of the most prime times one wants to > see the annotation pane because that's when they're asking, "who the > hell wrote THIS method..? Is it a recent change?" ;-) > > > On Tue, Nov 10, 2015 at 6:37 AM, wrote: > > Marcel Taeumel uploaded a new version of Tools to project The Trunk: > > http://source.squeak.org/trunk/Tools-mt.646.mcz > > > > ==================== Summary ==================== > > > > Name: Tools-mt.646 > > Author: mt > > Time: 10 November 2015, 1:37:38.608 pm > > UUID: 3aa497d2-408a-4c0a-92a1-21b3e959a5a4 > > Ancestors: Tools-mt.645 > > > > Adds preference to see annotation pane in full debugger windows again. > > > > =============== Diff against Tools-mt.645 =============== > > > > Item was changed: > > CodeHolder subclass: #Debugger > > instanceVariableNames: 'interruptedProcess interruptedController > contextStack contextStackIndex contextStackList receiverInspector > contextVariablesInspector externalInterrupt proceedValue selectingPC > savedCursor isolationHead failedProject errorWasInUIProcess labelString > message untilExpression' > > + classVariableNames: 'ContextStackKeystrokes ErrorRecursion > InterruptUIProcessIfBlockedOnErrorInBackgroundProcess WantsAnnotationPane' > > - classVariableNames: 'ContextStackKeystrokes ErrorRecursion > InterruptUIProcessIfBlockedOnErrorInBackgroundProcess' > > poolDictionaries: '' > > category: 'Tools-Debugger'! > > > > !Debugger commentStamp: '' prior: 0! > > I represent the machine state at the time of an interrupted process. I > also represent a query path into the state of the process. The debugger is > typically viewed through a window that views the stack of suspended > contexts, the code for, and execution point in, the currently selected > message, and inspectors on both the receiver of the currently selected > message, and the variables in the current context. > > > > Special note on recursive errors: > > Some errors affect Squeak's ability to present a debugger. This is > normally an unrecoverable situation. However, if such an error occurs in > an isolation layer, Squeak will attempt to exit from the isolation layer > and then present a debugger. Here is the chain of events in such a > recovery. > > > > * A recursive error is detected. > > * The current project is queried for an isolationHead > > * Changes in the isolationHead are revoked > > * The parent project of isolated project is returned to > > * The debugger is opened there and execution resumes. > > > > If the user closes that debugger, execution continues in the outer > project and layer. If, after repairing some damage, the user proceeds from > the debugger, then the isolationHead is re-invoked, the failed project is > re-entered, and execution resumes in that world. ! > > > > Item was added: > > + ----- Method: Debugger class>>wantsAnnotationPane (in category > 'preferences') ----- > > + wantsAnnotationPane > > + > + categoryList: #(debugger tools) > > + description: 'If true, show annotation for selected > method.' > > + type: #Boolean> > > + ^ WantsAnnotationPane ifNil: [false]! > > > > Item was added: > > + ----- Method: Debugger class>>wantsAnnotationPane: (in category > 'preferences') ----- > > + wantsAnnotationPane: boolean > > + > > + WantsAnnotationPane := boolean.! > > > > Item was changed: > > ----- Method: Debugger>>wantsAnnotationPane (in category > 'toolbuilder') ----- > > wantsAnnotationPane > > + > > + ^ self class wantsAnnotationPane! > > - "Annotations don't look good in debugger. Suppress 'em." > > - ^false! > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151110/187d8510/attachment.htm From nicolaihess at gmail.com Tue Nov 10 19:11:01 2015 From: nicolaihess at gmail.com (Nicolai Hess) Date: Tue Nov 10 19:11:04 2015 Subject: [squeak-dev] Minor issue with NewColorPickerMorph and question about Object>>changed: and how to debug In-Reply-To: References: Message-ID: 2015-11-10 19:53 GMT+01:00 karl ramberg : > > > On Tue, Nov 10, 2015 at 5:18 PM, Nicolai Hess > wrote: > >> >> >> 2015-11-10 15:45 GMT+01:00 karl ramberg : >> >>> In the NewColorPickerMorph if you scale the alpha of the selected color, >>> the UI will not turn let you set alpha back to fully opaque. You can pull >>> the slider all the way to the max but the selected color will remain >>> translucent. >>> >>> This is a minor issue but the big issue is how do debug this and similar >>> issues which is set up with the Object>>update: or Object>>changed: >>> >>> I find that I'm going into a rabbit hole each time I try to debug these >>> message sends. I can't seem to get a grip on what or where the messages and >>> changes in state are from. >>> >>> Do anybody have any advise on good practice for debugging >>> Object>>update: or Object>>changed: ? >>> >>> Best, >>> Karl >>> >>> >>> >>> >> btw, there is an open issue on mantis for the NewColorPicker >> http://bugs.squeak.org/view.php?id=7753 >> NewColorPickerMorph can not be used to change colors re erase >> colors from a SketchMorph. >> The Menu entries >> "erase pixels of color" and >> "recolor pixels of color" raise a DNU. >> > I'll take a look at that. > Thanks. > Changing colors in a Sketch is quite a special case, though. > I don't know for what I needed this, the bug report is two years old :) > >> Changing a GradientFill color from within the >> fill style menu (for any morph) doesn't work as well. >> > > Have you looked at the latest trunk where I have contributed a special > tool for editing colors in gradients ? > No, just checked the current release > > Best, > Karl > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151110/e5ec399c/attachment.htm From commits at source.squeak.org Tue Nov 10 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 10 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151110225502.20610.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009125.html Name: Tools-mt.646 Ancestors: Tools-mt.645 Adds preference to see annotation pane in full debugger windows again. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009126.html Name: Morphic-mt.1033 Ancestors: Morphic-mt.1032 Removes some memory overhead regarding tree morphs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009127.html Name: HelpSystem-Core-mt.80 Ancestors: HelpSystem-Core-cmm.79 Add dependents in help topic wrappers to make callback work because it was removed from base class to avoid memory overhead. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009128.html Name: Tools-cmm.647 Ancestors: Tools-mt.646 When accepting a method, assign its category to that of the last-selected method (now being overtyped) instead of "as yet unclassified." ============================================= From commits at source.squeak.org Wed Nov 11 01:05:38 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 01:05:40 2015 Subject: [squeak-dev] Squeak 4.6: Kernel-nice.936.mcz Message-ID: Nicolas Cellier uploaded a new version of Kernel to project Squeak 4.6: http://source.squeak.org/squeak46/Kernel-nice.936.mcz ==================== Summary ==================== Name: Kernel-nice.936 Author: nice Time: 11 November 2015, 2:05:09.037 am UUID: 5d8bccd0-d938-4889-abd1-0506c6942a49 Ancestors: Kernel-topa.935 Implement CompiledMethod>>withoutPrimitive because implementation is depending on object memory format, this method cannot be open-coded into Collection-Tests but obviously belongs to Kernel. =============== Diff against Kernel-topa.935 =============== Item was added: + ----- Method: CompiledMethod>>withoutPrimitive (in category 'converting') ----- + withoutPrimitive + "Answers a copy of self without primitive call. + That may serve for example for testing fallback code." + + | copy header skipPrimitiveCall | + self primitive = 0 ifTrue: [^self]. + header := self header. + skipPrimitiveCall := header < 0 + ifTrue: [3] + ifFalse: [0]. + copy := CompiledMethod + newMethod: self basicSize - self initialPC + 1 - skipPrimitiveCall + header: (header < 0 + ifTrue: [header bitClear: 16r10000] + ifFalse: [header - (header bitAnd: 16r1FF) - (header bitAnd: 16r200 << 19)]). + 1 to: self numLiterals do: [:index| copy literalAt: index put: (self literalAt: index)]. + self initialPC + skipPrimitiveCall to: self size do: [:index | copy at: index - skipPrimitiveCall put: (self at: index)]. + copy postCopy. + ^copy! From commits at source.squeak.org Wed Nov 11 01:12:04 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 01:12:06 2015 Subject: [squeak-dev] The Trunk: Kernel-nice.967.mcz Message-ID: Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.967.mcz ==================== Summary ==================== Name: Kernel-nice.967 Author: nice Time: 11 November 2015, 2:11:25.428 am UUID: 9bbbcd71-f6ca-430c-a62a-246e0f21e2e4 Ancestors: Kernel-nice.966 Implement CompiledMethod>>withoutPrimitive because implementation is depending on CompiledMethod format which may change across VM versions, this method cannot be open-coded into Collection-Tests but obviously belongs to Kernel. =============== Diff against Kernel-nice.966 =============== Item was added: + ----- Method: CompiledMethod>>withoutPrimitive (in category 'converting') ----- + withoutPrimitive + "Answers a copy of self without primitive call. + That may serve for example for testing fallback code." + + | copy skipPrimitiveCall | + self primitive = 0 ifTrue: [^self]. + skipPrimitiveCall := 3. + copy := CompiledMethod + newMethod: self basicSize - self initialPC + 1 - skipPrimitiveCall + header: (self header bitClear: 16r10000). + 1 to: self numLiterals do: [:index| copy literalAt: index put: (self literalAt: index)]. + self initialPC + skipPrimitiveCall to: self size do: [:index | copy at: index - skipPrimitiveCall put: (self at: index)]. + copy postCopy. + ^copy! From commits at source.squeak.org Wed Nov 11 01:13:30 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 01:13:31 2015 Subject: [squeak-dev] The Trunk: CollectionsTests-nice.258.mcz Message-ID: Nicolas Cellier uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-nice.258.mcz ==================== Summary ==================== Name: CollectionsTests-nice.258 Author: nice Time: 11 November 2015, 2:13:17.734 am UUID: ae069e82-965d-43ce-85ff-82cc44b73d48 Ancestors: CollectionsTests-ul.257 Use fresh new withoutPrimitive utility, and let one more test pass in Spur. =============== Diff against CollectionsTests-ul.257 =============== Item was changed: ----- Method: StringTest>>testFindSubstringInStartingAtMatchTable (in category 'tests - finding') ----- testFindSubstringInStartingAtMatchTable | str tbl cm | str := 'hello '. tbl := String classPool at: #CaseSensitiveOrder. self assert: (str findSubstring: ' ' in: str startingAt: 1 matchTable: tbl) = 6. self assert: (str findSubstring: 'q' in: str startingAt: 1 matchTable: tbl) = 0. self assert: (str findSubstring: 'q' in: str startingAt: -1 matchTable: tbl) = 0. self assert: (str findSubstring: ' ' in: str startingAt: -1 matchTable: tbl) = 6. "The next test ensures that the fallback code works just as well" + cm := (ByteString >> #findSubstring:in:startingAt:matchTable:) withoutPrimitive. - cm := (ByteString >> #findSubstring:in:startingAt:matchTable:) in: [:origMethod | - "Adapted from CompiledMethod>>#newFrom: " - | inst header| - header := origMethod header bitAnd: 16r1FF bitInvert. - "CompiledMethod newFrom: CompiledMethod class >> #newFrom:" - inst := CompiledMethod - newMethod: origMethod basicSize - origMethod initialPC + 1 - header: header. - 1 to: origMethod numLiterals do: [:index| inst literalAt: index put: (origMethod literalAt: index)]. - origMethod initialPC to: origMethod size do: [:index | inst at: index put: (origMethod at: index)]. - inst postCopy]. self assert: (cm valueWithReceiver: str arguments: {' '. str. 1. tbl}) = 6. self assert: (cm valueWithReceiver: str arguments: {'q'. str. 1. tbl}) = 0. self assert: (cm valueWithReceiver: str arguments: {'q'. str. -1. tbl}) = 0. self assert: (cm valueWithReceiver: str arguments: {' '. str. -1. tbl}) = 6. ! From nicolas.cellier.aka.nice at gmail.com Wed Nov 11 01:26:02 2015 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Wed Nov 11 01:26:04 2015 Subject: [squeak-dev] The Trunk: CollectionsTests-nice.258.mcz In-Reply-To: <5642963d.e929370a.f5fb9.ffffa0f5SMTPIN_ADDED_MISSING@mx.google.com> References: <5642963d.e929370a.f5fb9.ffffa0f5SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: I think this was the first time I saw #in: There are still a few senders, so someone else might discover the pattern despite this removal... A good point of #in: usage here was to make it clear that we were kind of inlining a method per se. 2015-11-11 2:13 GMT+01:00 : > Nicolas Cellier uploaded a new version of CollectionsTests to project The > Trunk: > http://source.squeak.org/trunk/CollectionsTests-nice.258.mcz > > ==================== Summary ==================== > > Name: CollectionsTests-nice.258 > Author: nice > Time: 11 November 2015, 2:13:17.734 am > UUID: ae069e82-965d-43ce-85ff-82cc44b73d48 > Ancestors: CollectionsTests-ul.257 > > Use fresh new withoutPrimitive utility, and let one more test pass in Spur. > > =============== Diff against CollectionsTests-ul.257 =============== > > Item was changed: > ----- Method: StringTest>>testFindSubstringInStartingAtMatchTable (in > category 'tests - finding') ----- > testFindSubstringInStartingAtMatchTable > > | str tbl cm | > str := 'hello '. > tbl := String classPool at: #CaseSensitiveOrder. > self assert: (str findSubstring: ' ' in: str startingAt: 1 > matchTable: tbl) = 6. > self assert: (str findSubstring: 'q' in: str startingAt: 1 > matchTable: tbl) = 0. > self assert: (str findSubstring: 'q' in: str startingAt: -1 > matchTable: tbl) = 0. > self assert: (str findSubstring: ' ' in: str startingAt: -1 > matchTable: tbl) = 6. > > > "The next test ensures that the fallback code works just as well" > + cm := (ByteString >> #findSubstring:in:startingAt:matchTable:) > withoutPrimitive. > - cm := (ByteString >> #findSubstring:in:startingAt:matchTable:) in: > [:origMethod | > - "Adapted from CompiledMethod>>#newFrom: " > - | inst header| > - header := origMethod header bitAnd: 16r1FF bitInvert. > - "CompiledMethod newFrom: CompiledMethod class >> #newFrom:" > - inst := CompiledMethod > - newMethod: origMethod basicSize - origMethod > initialPC + 1 > - header: header. > - 1 to: origMethod numLiterals do: [:index| inst literalAt: > index put: (origMethod literalAt: index)]. > - origMethod initialPC to: origMethod size do: [:index | > inst at: index put: (origMethod at: index)]. > - inst postCopy]. > self assert: (cm valueWithReceiver: str arguments: {' '. str. 1. > tbl}) = 6. > self assert: (cm valueWithReceiver: str arguments: {'q'. str. 1. > tbl}) = 0. > self assert: (cm valueWithReceiver: str arguments: {'q'. str. -1. > tbl}) = 0. > self assert: (cm valueWithReceiver: str arguments: {' '. str. -1. > tbl}) = 6. > ! > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151111/e0090bf2/attachment.htm From Das.Linux at gmx.de Wed Nov 11 06:05:31 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Nov 11 06:05:32 2015 Subject: [squeak-dev] The Trunk: CollectionsTests-nice.258.mcz Message-ID: Thank you! Best regard -Tobias On 11.11.2015, at 01:13, commits@source.squeak.org wrote: > Nicolas Cellier uploaded a new version of CollectionsTests to project The Trunk: > http://source.squeak.org/trunk/CollectionsTests-nice.258.mcz > > ==================== Summary ==================== > > Name: CollectionsTests-nice.258 > Author: nice > Time: 11 November 2015, 2:13:17.734 am > UUID: ae069e82-965d-43ce-85ff-82cc44b73d48 > Ancestors: CollectionsTests-ul.257 > > Use fresh new withoutPrimitive utility, and let one more test pass in Spur. > > =============== Diff against CollectionsTests-ul.257 =============== > > Item was changed: From Marcel.Taeumel at hpi.de Wed Nov 11 09:46:52 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 11 10:00:51 2015 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.634.mcz In-Reply-To: References: <1447149097718-4860107.post@n4.nabble.com> Message-ID: <1447235212677-4860294.post@n4.nabble.com> This is much better. BUT: Now, you cannot accept a method without overwriting another method's sources. That is, you cannot work with the method template anymore... ;) --> Key not found: nil. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-634-mcz-tp4853788p4860294.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Nov 11 09:50:07 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 11 10:04:06 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.646.mcz In-Reply-To: References: Message-ID: <1447235407002-4860296.post@n4.nabble.com> I want to see the annotation pane in the browser but not in the debugger. Somebody decided that in the past. I kind of like it. The debugger is full of information already. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-646-mcz-tp4860122p4860296.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Nov 11 10:37:41 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 10:37:43 2015 Subject: [squeak-dev] The Trunk: Tools-mt.648.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.648.mcz ==================== Summary ==================== Name: Tools-mt.648 Author: mt Time: 11 November 2015, 11:37:21.441 am UUID: d885e8b0-3f9b-4e54-a359-3d2bcbb17f61 Ancestors: Tools-cmm.647 Make the preference "extraDebuggerButtons" functional again. This was a regression since Squeak 3.9. =============== Diff against Tools-cmm.647 =============== Item was added: + ----- Method: Debugger>>buildCodePaneWith: (in category 'toolbuilder') ----- + buildCodePaneWith: builder + + | textSpec top controlButtons browseButtons annoSpec | + top := builder pluggablePanelSpec new. + top children: OrderedCollection new. + + controlButtons := self buildControlButtonsWith: builder. + controlButtons frame: self controlButtonsFrame. + top children add: controlButtons. + + self wantsOptionalButtons ifTrue: [ + browseButtons := self buildOptionalButtonsWith: builder. + browseButtons frame: self optionalButtonsFrame. + top children add: browseButtons]. + + textSpec := builder pluggableCodePaneSpec new. + textSpec + model: self; + getText: #contents; + setText: #contents:notifying:; + selection: #contentsSelection; + menu: #codePaneMenu:shifted:; + frame: self textFrame. + top children add: textSpec. + + self wantsAnnotationPane ifTrue: [ + annoSpec := self buildAnnotationPaneWith: builder. + annoSpec frame: self annotationFrame. + top children add: annoSpec]. + . + ^ top! Item was added: + ----- Method: Debugger>>buildControlButtonsWith: (in category 'toolbuilder') ----- + buildControlButtonsWith: builder + + | panelSpec | + panelSpec := builder pluggablePanelSpec new. + panelSpec children: OrderedCollection new. + self customButtonSpecs do:[:spec| + | buttonSpec | + buttonSpec := builder pluggableActionButtonSpec new. + buttonSpec model: self. + buttonSpec label: spec first. + buttonSpec action: spec second. + spec second == #methodHierarchy ifTrue:[ + buttonSpec color: #inheritanceButtonColor. + ]. + spec size > 2 ifTrue:[buttonSpec help: spec third]. + panelSpec children add: buttonSpec. + ]. + + panelSpec layout: #horizontal. "buttons" + ^panelSpec! Item was changed: ----- Method: Debugger>>contextStackFrame (in category 'toolbuilder') ----- contextStackFrame - | topOffset | - topOffset := self wantsOptionalButtons - ifTrue: [self buttonHeight] - ifFalse: [0]. - ^LayoutFrame new leftFraction: 0 offset: 0; + topFraction: 0 offset: self buttonHeight; - topFraction: 0 offset: topOffset; rightFraction: 1 offset: 0; bottomFraction: 1 offset: 0! Item was added: + ----- Method: Debugger>>controlButtonsFrame (in category 'toolbuilder') ----- + controlButtonsFrame + ^LayoutFrame new + leftFraction: 0 offset: 0; + topFraction: 0 offset: 0; + rightFraction: 1 offset: 0; + bottomFraction: 0 offset: self buttonHeight! Item was removed: - ----- Method: Debugger>>optionalButtonPairs (in category 'initialize') ----- - optionalButtonPairs - "Actually, return triples. Only the custom debugger-specific buttons are shown" - ^ self customButtonSpecs! Item was added: + ----- Method: Debugger>>optionalButtonsFrame (in category 'toolbuilder') ----- + optionalButtonsFrame + ^LayoutFrame new + leftFraction: 0 offset: 0; + topFraction: 0 offset: self buttonHeight; + rightFraction: 1 offset: 0; + bottomFraction: 0 offset: self buttonHeight*2! Item was added: + ----- Method: Debugger>>textFrame (in category 'toolbuilder') ----- + textFrame + + ^ super textFrame + topOffset: (self wantsOptionalButtons ifTrue: [self buttonHeight * 2] ifFalse: [self buttonHeight]); + yourself! Item was changed: + ----- Method: Debugger>>wantsOptionalButtons (in category 'toolbuilder') ----- - ----- Method: Debugger>>wantsOptionalButtons (in category 'initialize') ----- wantsOptionalButtons "The debugger benefits so majorly from the optional buttons that we put them up regardless of the global setting. Some traditionalists will want to change this method manually!!" + ^ Preferences extraDebuggerButtons! - ^ true! From Marcel.Taeumel at hpi.de Wed Nov 11 10:44:11 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 11 10:58:09 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.648.mcz In-Reply-To: References: Message-ID: <1447238651148-4860322.post@n4.nabble.com> -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-648-mcz-tp4860311p4860322.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Wed Nov 11 13:35:10 2015 From: karlramberg at gmail.com (karl ramberg) Date: Wed Nov 11 13:35:12 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.648.mcz In-Reply-To: <1447238651148-4860322.post@n4.nabble.com> References: <1447238651148-4860322.post@n4.nabble.com> Message-ID: This is great :-) Karl On Wed, Nov 11, 2015 at 11:44 AM, marcel.taeumel wrote: > > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Tools-mt-648-mcz-tp4860311p4860322.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151111/bd5be3bd/attachment.htm From Marcel.Taeumel at hpi.de Wed Nov 11 13:54:31 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 11 14:08:33 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.648.mcz In-Reply-To: References: <1447238651148-4860322.post@n4.nabble.com> Message-ID: <1447250071999-4860405.post@n4.nabble.com> I decided to hide/remove the source/diff/bytecodes button because we have no step into or step or or pc range for those other views (yet? ;-)). Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-648-mcz-tp4860311p4860405.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Nov 11 14:13:41 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 14:13:44 2015 Subject: [squeak-dev] The Inbox: Monticello-pre.622.mcz Message-ID: A new version of Monticello was added to project The Inbox: http://source.squeak.org/inbox/Monticello-pre.622.mcz ==================== Summary ==================== Name: Monticello-pre.622 Author: pre Time: 11 November 2015, 3:13:40.127 pm UUID: 59ac83cc-5186-4844-bb8e-1c1009157e88 Ancestors: Monticello-cmm.621 Adds a keyboard shortcut for reverting changes to Monticello browsers which are showing changes. This should allow easy reversion of changes shown in diffs. =============== Diff against Monticello-cmm.621 =============== Item was added: + ----- Method: MCOperationsBrowser>>methodListKey:from: (in category 'menus') ----- + methodListKey: aKeystroke from: aListMorph + aKeystroke caseOf: { + [$x] -> [self revertSelection] } + otherwise: [super methodListKey: aKeystroke from: aListMorph ]! Item was changed: ----- Method: MCOperationsBrowser>>methodListMenu: (in category 'menus') ----- methodListMenu: aMenu selection ifNotNil: + [aMenu addList: #( - [aMenu addList:#( ('install' installSelection) + ('revert (x)' revertSelection) + ('browse origin' browseSelectionOrigin) - ('revert' revertSelection) - ('browse origin' browseSelectionOrigin) -)]. self unchangedMethods ifNotEmpty: + [aMenu addList: #( + ('revert unchanged methods...' revertUnchangedMethods) - [aMenu addList:#( - ('revert unchanged methods...' revertUnchangedMethods) -)]. super methodListMenu: aMenu. ^ aMenu! From commits at source.squeak.org Wed Nov 11 15:07:51 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 15:07:52 2015 Subject: [squeak-dev] The Trunk: System-nice.777.mcz Message-ID: Nicolas Cellier uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-nice.777.mcz ==================== Summary ==================== Name: System-nice.777 Author: nice Time: 11 November 2015, 4:07:14.754 pm UUID: 86751135-3a70-41f9-aad1-e9de96bf1c70 Ancestors: System-nice.776 Let ImageSegment tests pass on Spur by fixing the erroneous endianness check. Details: In spur, primitive 98 which load an ImageSegment does become: the WordArrayForSegment segment into an Array. So all information about endianness is lost at this stage. I don't know if the primitive will handle all kind of endianness, but it will eventually fail if it can't, and we won't get down to here, so the very best thing is to assume that endianness problems are already solved. =============== Diff against System-nice.776 =============== Item was changed: ----- Method: ImageSegment>>endianness (in category 'fileIn/Out') ----- endianness "Return which endian kind the incoming segment came from" + (segment isKindOf: WordArray) + ifFalse: + ["Hope that primitive 98 did the right thing - anyway, we lost information about endianness, so the pretend we share image endianness." + ^Smalltalk endianness]. ^ (segment first bitShift: -24) asCharacter == $d ifTrue: [#big] ifFalse: [#little]! From commits at source.squeak.org Wed Nov 11 15:33:03 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 15:33:04 2015 Subject: [squeak-dev] The Inbox: Monticello-pre.623.mcz Message-ID: A new version of Monticello was added to project The Inbox: http://source.squeak.org/inbox/Monticello-pre.623.mcz ==================== Summary ==================== Name: Monticello-pre.623 Author: pre Time: 11 November 2015, 4:32:57.142 pm UUID: 7f2ebcbb-1308-4d18-b89d-04c4e3076dc8 Ancestors: Monticello-pre.622 Adds a different rendering of reverted items in Monticello change browsers to allow developers to remember what was already removed. This integrates with the Ignore feature of the SaveDialog. =============== Diff against Monticello-pre.622 =============== Item was changed: MCCodeTool subclass: #MCOperationsBrowser + instanceVariableNames: 'selection reverts' - instanceVariableNames: 'selection' classVariableNames: '' poolDictionaries: '' category: 'Monticello-UI'! Item was added: + ----- Method: MCOperationsBrowser>>advanceSelection (in category 'selecting') ----- + advanceSelection + + self selection < items size + ifTrue: [self selection: self selection + 1]! Item was changed: ----- Method: MCOperationsBrowser>>installSelection (in category 'actions') ----- installSelection | loader | selection ifNotNil: [loader := MCPackageLoader new. selection applyTo: loader. + loader loadWithName: self changeSetNameForInstall. + self reverts remove: selection ifAbsent: []. + self changed: #list ]! - loader loadWithName: self changeSetNameForInstall ]! Item was changed: ----- Method: MCOperationsBrowser>>list (in category 'accessing') ----- list + ^ self items collect: [:each | + (self reverts includes: each) + ifFalse: [each summary] + ifTrue: [Text string: '( ', each summary, ' )' attributes: { TextEmphasis italic . TextEmphasis struckOut } ]]! - ^ self items collect: [:ea | ea summary]! Item was changed: ----- Method: MCOperationsBrowser>>revertSelection (in category 'actions') ----- revertSelection | loader | selection ifNotNil: [loader := MCPackageLoader new. selection inverse applyTo: loader. + loader loadWithName: self changeSetNameForInstall. + self reverts add: selection. + self + advanceSelection; + changed: #list ]! - loader loadWithName: self changeSetNameForInstall ]! Item was added: + ----- Method: MCOperationsBrowser>>reverts (in category 'accessing') ----- + reverts + ^ reverts ifNil: [reverts := Set new]! Item was changed: ----- Method: MCSaveVersionDialog>>ignoreSelection (in category 'actions') ----- ignoreSelection selection ifNil: [ignore size = items size ifFalse: [ignore addAll: items] ifTrue: [ignore removeAll]] ifNotNil: [ ignore remove: selection ifAbsent: [ ignore add: selection]. + self advanceSelection]. - self selection < items size - ifTrue: [self selection: self selection + 1]]. self changed: #list ! Item was changed: ----- Method: MCSaveVersionDialog>>list (in category 'accessing') ----- list + ^ self items collect: [:each | + (self reverts includes: each) + ifFalse: [(self ignore includes: each) + ifFalse: [each summary] + ifTrue: [Text string: '( ', each summary, ' )' attribute: TextEmphasis struckOut]] + ifTrue: [Text string: '( ', each summary, ' )' attributes: { TextEmphasis italic . TextEmphasis struckOut } ]]! - ^ self items collect: [:ea | - (self ignore includes: ea) - ifFalse: [ea summary] - ifTrue: [Text string: '( ', ea summary, ' )' attribute: TextEmphasis struckOut ]]! Item was removed: - ----- Method: MCSaveVersionDialog>>revertSelection (in category 'actions') ----- - revertSelection - super revertSelection. - selection ifNotNil: [ - ignore add: selection. - self changed: #list]. - ! From patrick.rein at student.hpi.uni-potsdam.de Wed Nov 11 15:27:34 2015 From: patrick.rein at student.hpi.uni-potsdam.de (Patrick R.) Date: Wed Nov 11 15:41:34 2015 Subject: [squeak-dev] Re: The Inbox: Monticello-pre.622.mcz In-Reply-To: References: Message-ID: <1447255654604-4860458.post@n4.nabble.com> A short note on why I have used the $x shortcut instead of $r: The $r is already used by the MCMergeBrowser to reject new changes and at the same time $x for reverting matches the remove semantic. The $r and $k shortcuts of the MergeBrowser are not yet presented to users in any way. This should maybe be added to the MCMergeBrowser>>#innerButtonSpecs method. Bests Patrick -- View this message in context: http://forum.world.st/The-Inbox-Monticello-pre-622-mcz-tp4860406p4860458.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Nov 11 21:54:18 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 21:54:20 2015 Subject: [squeak-dev] The Trunk: Tools-cmm.649.mcz Message-ID: Chris Muller uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-cmm.649.mcz ==================== Summary ==================== Name: Tools-cmm.649 Author: cmm Time: 11 November 2015, 3:53:53.467 pm UUID: beec1181-1635-40c7-b6d9-dcec70347f01 Ancestors: Tools-mt.648 - Fix "Key not found: nil" when saving method from method template. - We now have two annotation pane preferences, use language which allows the user to know which is which. =============== Diff against Tools-mt.648 =============== Item was changed: ----- Method: Browser>>defineMessageFrom:notifying: (in category 'message functions') ----- defineMessageFrom: aString notifying: aController "Compile the expressions in aString. Notify aController if a syntax error occurs. Install the compiled method in the selected class classified under the currently selected message category name. Answer the selector obtained if compilation succeeds, nil otherwise." | selectedMessageName selector category oldMessageList selectedClassOrMetaClass | selectedMessageName := self selectedMessageName. oldMessageList := self messageList. selectedClassOrMetaClass := self selectedClassOrMetaClass. contents := nil. selector := (selectedClassOrMetaClass newParser parseSelector: aString). (self metaClassIndicated and: [(selectedClassOrMetaClass includesSelector: selector) not and: [Metaclass isScarySelector: selector]]) ifTrue: ["A frist-time definition overlaps the protocol of Metaclasses" (self confirm: ((selector , ' is used in the existing class system. Overriding it could cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: selector size)) ifFalse: [^nil]]. selector := selectedClassOrMetaClass compile: aString + classified: (selectedMessageName ifNotNil: [category := (selectedClassOrMetaClass >> selectedMessageName) methodReference ifNotNil: [ : ref | ref category ]]) - classified: (category := (selectedClassOrMetaClass >> selectedMessageName) methodReference category) notifying: aController. selector == nil ifTrue: [^ nil]. contents := aString copy. selector ~~ selectedMessageName ifTrue: [category = ClassOrganizer nullCategory ifTrue: [self changed: #classSelectionChanged. self changed: #classList. self messageCategoryListIndex: 1]. self setClassOrganizer. "In case organization not cached" (oldMessageList includes: selector) ifFalse: [self changed: #messageList]. self messageListIndex: (self messageList indexOf: selector)]. ^ selector! Item was changed: ----- Method: Debugger class>>wantsAnnotationPane (in category 'preferences') ----- wantsAnnotationPane + ^ WantsAnnotationPane ifNil: [false]! From asqueaker at gmail.com Wed Nov 11 22:23:48 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 11 22:23:50 2015 Subject: [squeak-dev] The Inbox: Monticello-pre.623.mcz In-Reply-To: <56435fb3.821c8d0a.69a6a.ffff9a92SMTPIN_ADDED_MISSING@mx.google.com> References: <56435fb3.821c8d0a.69a6a.ffff9a92SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Good change. I was thinking about doing almost the same change for better differentiating between ignored and reverted changes in the list. I had wanted to do it by "graying out" the ignored changes, by displaying them in gray-colored text. MCSaveVersionDialog>>#list ^ self items collect: [:each | (self reverts includes: each) ifFalse: [(self ignore includes: each) ifFalse: [each summary] ifTrue: [Text string: '( ', each summary, ' )' attribute: (TextColor color: Color gray)]] ifTrue: [Text string: '( ', each summary, ' )' attributes: { TextEmphasis italic . TextEmphasis struckOut } ]] For some reason, the above doesn't work, Marcel, do you know why? On Wed, Nov 11, 2015 at 9:32 AM, wrote: > A new version of Monticello was added to project The Inbox: > http://source.squeak.org/inbox/Monticello-pre.623.mcz > > ==================== Summary ==================== > > Name: Monticello-pre.623 > Author: pre > Time: 11 November 2015, 4:32:57.142 pm > UUID: 7f2ebcbb-1308-4d18-b89d-04c4e3076dc8 > Ancestors: Monticello-pre.622 > > Adds a different rendering of reverted items in Monticello change browsers > to allow developers to remember what was already removed. > This integrates with the Ignore feature of the SaveDialog. > > =============== Diff against Monticello-pre.622 =============== > > Item was changed: > MCCodeTool subclass: #MCOperationsBrowser > + instanceVariableNames: 'selection reverts' > - instanceVariableNames: 'selection' > classVariableNames: '' > poolDictionaries: '' > category: 'Monticello-UI'! > > Item was added: > + ----- Method: MCOperationsBrowser>>advanceSelection (in category > 'selecting') ----- > + advanceSelection > + > + self selection < items size > + ifTrue: [self selection: self selection + 1]! > > Item was changed: > ----- Method: MCOperationsBrowser>>installSelection (in category > 'actions') ----- > installSelection > | loader | > selection ifNotNil: > [loader := MCPackageLoader new. > selection applyTo: loader. > + loader loadWithName: self changeSetNameForInstall. > + self reverts remove: selection ifAbsent: []. > + self changed: #list ]! > - loader loadWithName: self changeSetNameForInstall ]! > > Item was changed: > ----- Method: MCOperationsBrowser>>list (in category 'accessing') ----- > list > + ^ self items collect: [:each | > + (self reverts includes: each) > + ifFalse: [each summary] > + ifTrue: [Text string: '( ', each summary, ' )' > attributes: { TextEmphasis italic . TextEmphasis struckOut } ]]! > - ^ self items collect: [:ea | ea summary]! > > Item was changed: > ----- Method: MCOperationsBrowser>>revertSelection (in category > 'actions') ----- > revertSelection > | loader | > selection ifNotNil: > [loader := MCPackageLoader new. > selection inverse applyTo: loader. > + loader loadWithName: self changeSetNameForInstall. > + self reverts add: selection. > + self > + advanceSelection; > + changed: #list ]! > - loader loadWithName: self changeSetNameForInstall ]! > > Item was added: > + ----- Method: MCOperationsBrowser>>reverts (in category 'accessing') > ----- > + reverts > + ^ reverts ifNil: [reverts := Set new]! > > Item was changed: > ----- Method: MCSaveVersionDialog>>ignoreSelection (in category > 'actions') ----- > ignoreSelection > selection > ifNil: [ignore size = items size > ifFalse: [ignore addAll: items] > ifTrue: [ignore removeAll]] > ifNotNil: [ > ignore remove: selection ifAbsent: [ > ignore add: selection]. > + self advanceSelection]. > - self selection < items size > - ifTrue: [self selection: self selection + > 1]]. > self changed: #list > ! > > Item was changed: > ----- Method: MCSaveVersionDialog>>list (in category 'accessing') ----- > list > + ^ self items collect: [:each | > + (self reverts includes: each) > + ifFalse: [(self ignore includes: each) > + ifFalse: [each summary] > + ifTrue: [Text string: '( > ', each summary, ' )' attribute: TextEmphasis struckOut]] > + ifTrue: [Text string: '( ', each summary, ' )' > attributes: { TextEmphasis italic . TextEmphasis struckOut } ]]! > - ^ self items collect: [:ea | > - (self ignore includes: ea) > - ifFalse: [ea summary] > - ifTrue: [Text string: '( ', ea summary, ' )' > attribute: TextEmphasis struckOut ]]! > > Item was removed: > - ----- Method: MCSaveVersionDialog>>revertSelection (in category > 'actions') ----- > - revertSelection > - super revertSelection. > - selection ifNotNil: [ > - ignore add: selection. > - self changed: #list]. > - ! > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151111/e70e98b5/attachment.htm From commits at source.squeak.org Wed Nov 11 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 11 22:55:03 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151111225502.21395.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009129.html Name: Kernel-nice.967 Ancestors: Kernel-nice.966 Implement CompiledMethod>>withoutPrimitive because implementation is depending on CompiledMethod format which may change across VM versions, this method cannot be open-coded into Collection-Tests but obviously belongs to Kernel. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009130.html Name: CollectionsTests-nice.258 Ancestors: CollectionsTests-ul.257 Use fresh new withoutPrimitive utility, and let one more test pass in Spur. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009131.html Name: Tools-mt.648 Ancestors: Tools-cmm.647 Make the preference "extraDebuggerButtons" functional again. This was a regression since Squeak 3.9. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009132.html Name: System-nice.777 Ancestors: System-nice.776 Let ImageSegment tests pass on Spur by fixing the erroneous endianness check. Details: In spur, primitive 98 which load an ImageSegment does become: the WordArrayForSegment segment into an Array. So all information about endianness is lost at this stage. I don't know if the primitive will handle all kind of endianness, but it will eventually fail if it can't, and we won't get down to here, so the very best thing is to assume that endianness problems are already solved. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009133.html Name: Tools-cmm.649 Ancestors: Tools-mt.648 - Fix "Key not found: nil" when saving method from method template. - We now have two annotation pane preferences, use language which allows the user to know which is which. ============================================= From tim at rowledge.org Thu Nov 12 00:22:25 2015 From: tim at rowledge.org (tim Rowledge) Date: Thu Nov 12 00:22:31 2015 Subject: [squeak-dev] Slightly OT: pi-topCEED Message-ID: Anyone interested in Raspberry Pi stuff might be intruiged by the pi-topCEED currently being indigogo?d. https://www.indiegogo.com/projects/pi-topceed-the-first-99-raspberry-pi-desktop#/ USD99 for a Pi, a 13? lcd, a nice enclosure, a loaded SD card and a PSU. Pretty good value to my mind. I?ve signed up for three so I can give one to a nephew, one to my local Makerspace and one to myself for being such a good boy this year. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Proof that evolution CAN go in reverse. From Lou at Keystone-Software.com Thu Nov 12 01:06:22 2015 From: Lou at Keystone-Software.com (Louis LaBrunda) Date: Thu Nov 12 01:06:33 2015 Subject: [squeak-dev] Slightly OT: pi-topCEED References: Message-ID: Hi Tim, Thanks for the link, it's pretty amazing. Lou On Wed, 11 Nov 2015 16:22:25 -0800, tim Rowledge wrote: >Anyone interested in Raspberry Pi stuff might be intruiged by the pi-topCEED currently being indigogo?d. > >https://www.indiegogo.com/projects/pi-topceed-the-first-99-raspberry-pi-desktop#/ > >USD99 for a Pi, a 13? lcd, a nice enclosure, a loaded SD card and a PSU. Pretty good value to my mind. > >I?ve signed up for three so I can give one to a nephew, one to my local Makerspace and one to myself for being such a good boy this year. > >tim -- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon From lewis at mail.msen.com Thu Nov 12 04:07:11 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Nov 12 04:07:14 2015 Subject: [squeak-dev] The Trunk: System-nice.777.mcz In-Reply-To: <201511111507.tABF7svw018773@shell.msen.com> References: <201511111507.tABF7svw018773@shell.msen.com> Message-ID: <20151112040711.GA45520@shell.msen.com> On Wed, Nov 11, 2015 at 03:07:30PM +0000, commits@source.squeak.org wrote: > Nicolas Cellier uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-nice.777.mcz > > ==================== Summary ==================== > > Name: System-nice.777 > Author: nice > Time: 11 November 2015, 4:07:14.754 pm > UUID: 86751135-3a70-41f9-aad1-e9de96bf1c70 > Ancestors: System-nice.776 > > Let ImageSegment tests pass on Spur by fixing the erroneous endianness check. > > Details: > > In spur, primitive 98 which load an ImageSegment does become: the WordArrayForSegment segment into an Array. So all information about endianness is lost at this stage. > > I don't know if the primitive will handle all kind of endianness, but it will eventually fail if it can't, and we won't get down to here, so the very best thing is to assume that endianness problems are already solved. > Is this issue related to the Spur object format, or is it due to the implementation of primitive 98 in the VM? I am experimenting with tracking trunk changes in a 4.6 image, and I'm trying to understand if this change would be appropriate for a "trunk" image in the old V3 image format. I think the answer is no, but I'm not sure so better to ask. Thanks, Dave From eliot.miranda at gmail.com Thu Nov 12 04:35:58 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Nov 12 04:36:04 2015 Subject: [squeak-dev] The Trunk: System-nice.777.mcz In-Reply-To: <20151112040711.GA45520@shell.msen.com> References: <201511111507.tABF7svw018773@shell.msen.com> <20151112040711.GA45520@shell.msen.com> Message-ID: <10AAFC2A-0D85-4A46-9A1F-B76AEA201627@gmail.com> Hi David, > On Nov 11, 2015, at 8:07 PM, David T. Lewis wrote: > >> On Wed, Nov 11, 2015 at 03:07:30PM +0000, commits@source.squeak.org wrote: >> Nicolas Cellier uploaded a new version of System to project The Trunk: >> http://source.squeak.org/trunk/System-nice.777.mcz >> >> ==================== Summary ==================== >> >> Name: System-nice.777 >> Author: nice >> Time: 11 November 2015, 4:07:14.754 pm >> UUID: 86751135-3a70-41f9-aad1-e9de96bf1c70 >> Ancestors: System-nice.776 >> >> Let ImageSegment tests pass on Spur by fixing the erroneous endianness check. >> >> Details: >> >> In spur, primitive 98 which load an ImageSegment does become: the WordArrayForSegment segment into an Array. So all information about endianness is lost at this stage. >> >> I don't know if the primitive will handle all kind of endianness, but it will eventually fail if it can't, and we won't get down to here, so the very best thing is to assume that endianness problems are already solved. The primitive handles endianness reversals. But endianness can be checked before invoking the primitive, so I don't understand what the problem is here, if any. > Is this issue related to the Spur object format, or is it due to the > implementation of primitive 98 in the VM? It's to do with the fact that Sour doesn't provide object ordering. The old VM allocated objects strictly ascending in memory, compacting objects down when GCing, but preserving order. Sour provides a much more efficient scavenging GC and an idiosyncratic compaction algorithm in old space, neither of which preserve object ordering. Once a segment is loaded, the objects in the segment need to be visited to send them post load messages so they can I thaw themselves correctly. In the old system the objects could be enumerated by starting with the truncated image segment object left behind after turning its contents into objects because it occurs immediately before the objects in the segment. Allocating an object immediately after creating the segment word array provides an end marker. This just won't work in Spur. Very large objects get allocated in old space, so there's no way to construct reliably an end marker, and if the GC runs objects may be reordered anyway. So I chose to have the primitive become the segment word array into an array of all the objects in the segment iff the load succeeds. It is then trivial to enumerate the loaded objects. I *could* have implemented a different original motive that answered the set of loaded objects some other way, but the way it is now caused the least disruption. I'm still interested in understanding what the endianness related issue is. Anyone care to enlighten me? > I am experimenting with tracking > trunk changes in a 4.6 image, and I'm trying to understand if this change > would be appropriate for a "trunk" image in the old V3 image format. I > think the answer is no, but I'm not sure so better to ask. > > Thanks, > Dave _,,,^..^,,,_ (phone) From eliot.miranda at gmail.com Thu Nov 12 04:38:30 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Nov 12 04:38:34 2015 Subject: [squeak-dev] The Trunk: System-nice.777.mcz In-Reply-To: <10AAFC2A-0D85-4A46-9A1F-B76AEA201627@gmail.com> References: <201511111507.tABF7svw018773@shell.msen.com> <20151112040711.GA45520@shell.msen.com> <10AAFC2A-0D85-4A46-9A1F-B76AEA201627@gmail.com> Message-ID: What I mean is that if the system needs to know the endianness if the segment after it has been loaded I don't see any problem with simply checking the endianness of the segment before loading it and remembered by the result in a variable. I get the need to have the tests pass by deleting an unnecessary test. _,,,^..^,,,_ (phone) > On Nov 11, 2015, at 8:35 PM, Eliot Miranda wrote: > > Hi David, > >>> On Nov 11, 2015, at 8:07 PM, David T. Lewis wrote: >>> >>> On Wed, Nov 11, 2015 at 03:07:30PM +0000, commits@source.squeak.org wrote: >>> Nicolas Cellier uploaded a new version of System to project The Trunk: >>> http://source.squeak.org/trunk/System-nice.777.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: System-nice.777 >>> Author: nice >>> Time: 11 November 2015, 4:07:14.754 pm >>> UUID: 86751135-3a70-41f9-aad1-e9de96bf1c70 >>> Ancestors: System-nice.776 >>> >>> Let ImageSegment tests pass on Spur by fixing the erroneous endianness check. >>> >>> Details: >>> >>> In spur, primitive 98 which load an ImageSegment does become: the WordArrayForSegment segment into an Array. So all information about endianness is lost at this stage. >>> >>> I don't know if the primitive will handle all kind of endianness, but it will eventually fail if it can't, and we won't get down to here, so the very best thing is to assume that endianness problems are already solved. > > The primitive handles endianness reversals. But endianness can be checked before invoking the primitive, so I don't understand what the problem is here, if any. > > >> Is this issue related to the Spur object format, or is it due to the >> implementation of primitive 98 in the VM? > > It's to do with the fact that Sour doesn't provide object ordering. The old VM allocated objects strictly ascending in memory, compacting objects down when GCing, but preserving order. Sour provides a much more efficient scavenging GC and an idiosyncratic compaction algorithm in old space, neither of which preserve object ordering. > > Once a segment is loaded, the objects in the segment need to be visited to send them post load messages so they can I thaw themselves correctly. In the old system the objects could be enumerated by starting with the truncated image segment object left behind after turning its contents into objects because it occurs immediately before the objects in the segment. Allocating an object immediately after creating the segment word array provides an end marker. > > This just won't work in Spur. Very large objects get allocated in old space, so there's no way to construct reliably an end marker, and if the GC runs objects may be reordered anyway. So I chose to have the primitive become the segment word array into an array of all the objects in the segment iff the load succeeds. It is then trivial to enumerate the loaded objects. > > I *could* have implemented a different original motive that answered the set of loaded objects some other way, but the way it is now caused the least disruption. > > I'm still interested in understanding what the endianness related issue is. Anyone care to enlighten me? > > >> I am experimenting with tracking >> trunk changes in a 4.6 image, and I'm trying to understand if this change >> would be appropriate for a "trunk" image in the old V3 image format. I >> think the answer is no, but I'm not sure so better to ask. >> >> Thanks, >> Dave > > > _,,,^..^,,,_ (phone) From Marcel.Taeumel at hpi.de Thu Nov 12 08:20:15 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 12 08:34:20 2015 Subject: [squeak-dev] Re: The Inbox: Monticello-pre.623.mcz In-Reply-To: References: Message-ID: <1447316415644-4860618.post@n4.nabble.com> PluggableListMorphs and their LazyListMorph companions work with strings only. However, there is that "...emphasisAt: 1" check, which will be applied to the font setting: LazyListMorph >> #display:atRow:on: ... emphasized := itemAsText isText ifTrue: [font emphasized: (itemAsText emphasisAt: 1)] ifFalse: [font]. ... This will only work with properties such as underlined, bold, and italic. Color would have to be used in the Canvas >> #drawString:in:font:color: call. We could try to squeeze out that color information, too. Let me see... Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Monticello-pre-623-mcz-tp4860455p4860618.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From nicolaihess at gmail.com Thu Nov 12 08:35:16 2015 From: nicolaihess at gmail.com (Nicolai Hess) Date: Thu Nov 12 08:35:20 2015 Subject: [squeak-dev] keyboard events in the windows VM Message-ID: A short overview: With Ctrl-Key pressed, some keyboard events don't generate smalltalk keystrokes (EventKeyChar) ctrl+tab, ctrl+1, ctrl+2, ..., ctrl+0, ctrl+Tab, ctrl+m for some keyboard events there are only key down and key up events (from windows) but the vm "generates" a keypress (EventKeyChar) event ctrl+Home, ctrl+End, ctrl+PageUp, ... But the key value , char code and ctrl flag for this generated events, make them undistinguishable from other ctrl+key shortcuts ctrl+a = ctrl+Home, ctrl+d = ctrl+End, ctrl+k=ctrl+PageUp,... And one key (ctrl+Enter) creates two EventKeyChar events one "normal" and one that is generated from the vm one with keyvalue 10 and one with 13. And the keycode for char like "a","b", ..., are different if you they are typed with or without ctrl-key just key "a": keycode: 65 (keydown event) 97 (keyvalue/charcode event) (65 if you press shift key) 65 (keyup event) with ctrl key pressed: keycode 65 (keydown event) 1 (keyvalue/charcode event) 65 (keyup event) I would like to change this, that means: generate EventKeyChar events for ctrl+1, ctrl+2, ..., ctrl+Tab, ctrl+m remove the double key event for ctrl+Enter and adopt the behavior of the linux vm, for keyValue, charCode values for events like ctrl+a, ctrl+home, ... for example, the linux vm generates event buffer values: #(2 7329656 1 0 2 65 0 1) for ctrl+a (keyValue 1/charCode 65) but #(2 7329656 1 0 2 1 0 1) for ctrl+home (keyValue 1/charCode 1) this may need some changes on the image side. For example, in Pharo we have some special handling that adds "96" to the keyValue for keystrokes with ctrl-key). What do you think? nicolai -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151112/b58cd93f/attachment.htm From Marcel.Taeumel at hpi.de Thu Nov 12 08:39:49 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 12 08:53:54 2015 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.649.mcz In-Reply-To: References: Message-ID: <1447317589579-4860632.post@n4.nabble.com> Still not working. Now, I cannot put a method in a selected category without selecting at least one method in that category. It will just land in "as yet unclassified". Pleeeaaaaase, return it to the old state. We seem to have to simple way to save a method and *not* selecting its category aftewards.... Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-649-mcz-tp4860571p4860632.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Das.Linux at gmx.de Thu Nov 12 09:03:16 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Nov 12 09:03:20 2015 Subject: [squeak-dev] The Inbox: Monticello-pre.623.mcz In-Reply-To: <1447316415644-4860618.post@n4.nabble.com> References: <1447316415644-4860618.post@n4.nabble.com> Message-ID: <10DC4274-6079-4ADE-B739-21A45749567C@gmx.de> On 12.11.2015, at 09:20, marcel.taeumel wrote: > PluggableListMorphs and their LazyListMorph companions work with strings > only. However, there is that "...emphasisAt: 1" check, which will be applied > to the font setting: > > LazyListMorph >> #display:atRow:on: > ... > emphasized := itemAsText isText > ifTrue: [font emphasized: (itemAsText emphasisAt: 1)] > ifFalse: [font]. > ... > > This will only work with properties such as underlined, bold, and italic. > Color would have to be used in the Canvas >> #drawString:in:font:color: > call. > > We could try to squeeze out that color information, too. Let me see... That would be so great! Best -Tobias From commits at source.squeak.org Thu Nov 12 09:05:01 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 09:05:03 2015 Subject: [squeak-dev] The Trunk: Monticello-pre.622.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-pre.622.mcz ==================== Summary ==================== Name: Monticello-pre.622 Author: pre Time: 11 November 2015, 3:13:40.127 pm UUID: 59ac83cc-5186-4844-bb8e-1c1009157e88 Ancestors: Monticello-cmm.621 Adds a keyboard shortcut for reverting changes to Monticello browsers which are showing changes. This should allow easy reversion of changes shown in diffs. =============== Diff against Monticello-cmm.621 =============== Item was added: + ----- Method: MCOperationsBrowser>>methodListKey:from: (in category 'menus') ----- + methodListKey: aKeystroke from: aListMorph + aKeystroke caseOf: { + [$x] -> [self revertSelection] } + otherwise: [super methodListKey: aKeystroke from: aListMorph ]! Item was changed: ----- Method: MCOperationsBrowser>>methodListMenu: (in category 'menus') ----- methodListMenu: aMenu selection ifNotNil: + [aMenu addList: #( - [aMenu addList:#( ('install' installSelection) + ('revert (x)' revertSelection) + ('browse origin' browseSelectionOrigin) - ('revert' revertSelection) - ('browse origin' browseSelectionOrigin) -)]. self unchangedMethods ifNotEmpty: + [aMenu addList: #( + ('revert unchanged methods...' revertUnchangedMethods) - [aMenu addList:#( - ('revert unchanged methods...' revertUnchangedMethods) -)]. super methodListMenu: aMenu. ^ aMenu! From commits at source.squeak.org Thu Nov 12 09:05:17 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 09:05:19 2015 Subject: [squeak-dev] The Trunk: Monticello-pre.623.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-pre.623.mcz ==================== Summary ==================== Name: Monticello-pre.623 Author: pre Time: 11 November 2015, 4:32:57.142 pm UUID: 7f2ebcbb-1308-4d18-b89d-04c4e3076dc8 Ancestors: Monticello-pre.622 Adds a different rendering of reverted items in Monticello change browsers to allow developers to remember what was already removed. This integrates with the Ignore feature of the SaveDialog. =============== Diff against Monticello-pre.622 =============== Item was changed: MCCodeTool subclass: #MCOperationsBrowser + instanceVariableNames: 'selection reverts' - instanceVariableNames: 'selection' classVariableNames: '' poolDictionaries: '' category: 'Monticello-UI'! Item was added: + ----- Method: MCOperationsBrowser>>advanceSelection (in category 'selecting') ----- + advanceSelection + + self selection < items size + ifTrue: [self selection: self selection + 1]! Item was changed: ----- Method: MCOperationsBrowser>>installSelection (in category 'actions') ----- installSelection | loader | selection ifNotNil: [loader := MCPackageLoader new. selection applyTo: loader. + loader loadWithName: self changeSetNameForInstall. + self reverts remove: selection ifAbsent: []. + self changed: #list ]! - loader loadWithName: self changeSetNameForInstall ]! Item was changed: ----- Method: MCOperationsBrowser>>list (in category 'accessing') ----- list + ^ self items collect: [:each | + (self reverts includes: each) + ifFalse: [each summary] + ifTrue: [Text string: '( ', each summary, ' )' attributes: { TextEmphasis italic . TextEmphasis struckOut } ]]! - ^ self items collect: [:ea | ea summary]! Item was changed: ----- Method: MCOperationsBrowser>>revertSelection (in category 'actions') ----- revertSelection | loader | selection ifNotNil: [loader := MCPackageLoader new. selection inverse applyTo: loader. + loader loadWithName: self changeSetNameForInstall. + self reverts add: selection. + self + advanceSelection; + changed: #list ]! - loader loadWithName: self changeSetNameForInstall ]! Item was added: + ----- Method: MCOperationsBrowser>>reverts (in category 'accessing') ----- + reverts + ^ reverts ifNil: [reverts := Set new]! Item was changed: ----- Method: MCSaveVersionDialog>>ignoreSelection (in category 'actions') ----- ignoreSelection selection ifNil: [ignore size = items size ifFalse: [ignore addAll: items] ifTrue: [ignore removeAll]] ifNotNil: [ ignore remove: selection ifAbsent: [ ignore add: selection]. + self advanceSelection]. - self selection < items size - ifTrue: [self selection: self selection + 1]]. self changed: #list ! Item was changed: ----- Method: MCSaveVersionDialog>>list (in category 'accessing') ----- list + ^ self items collect: [:each | + (self reverts includes: each) + ifFalse: [(self ignore includes: each) + ifFalse: [each summary] + ifTrue: [Text string: '( ', each summary, ' )' attribute: TextEmphasis struckOut]] + ifTrue: [Text string: '( ', each summary, ' )' attributes: { TextEmphasis italic . TextEmphasis struckOut } ]]! - ^ self items collect: [:ea | - (self ignore includes: ea) - ifFalse: [ea summary] - ifTrue: [Text string: '( ', ea summary, ' )' attribute: TextEmphasis struckOut ]]! Item was removed: - ----- Method: MCSaveVersionDialog>>revertSelection (in category 'actions') ----- - revertSelection - super revertSelection. - selection ifNotNil: [ - ignore add: selection. - self changed: #list]. - ! From commits at source.squeak.org Thu Nov 12 09:06:30 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 09:06:32 2015 Subject: [squeak-dev] The Trunk: Collections-mt.670.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.670.mcz ==================== Summary ==================== Name: Collections-mt.670 Author: mt Time: 12 November 2015, 10:06:12.325 am UUID: 85d65b1c-ab3c-4da8-8061-65f7d0d0bd64 Ancestors: Collections-ul.669 Adds convenient color check method for texts. Just like #emphasisAt: does for font emphasis. =============== Diff against Collections-ul.669 =============== Item was added: + ----- Method: Text>>colorAt: (in category 'emphasis') ----- + colorAt: characterIndex + + ^ self colorAt: characterIndex ifNone: [Color black]! Item was added: + ----- Method: Text>>colorAt:ifNone: (in category 'emphasis') ----- + colorAt: characterIndex ifNone: block + + ^ (runs at: characterIndex) + detect: [:attr | attr class == TextColor] + ifFound: [:attr | attr color] + ifNone: block! From commits at source.squeak.org Thu Nov 12 09:08:21 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 09:08:23 2015 Subject: [squeak-dev] The Trunk: CollectionsTests-mt.259.mcz Message-ID: Marcel Taeumel uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-mt.259.mcz ==================== Summary ==================== Name: CollectionsTests-mt.259 Author: mt Time: 12 November 2015, 10:08:13.946 am UUID: a2346d8d-ec23-47dc-810e-680758375724 Ancestors: CollectionsTests-nice.258 Adds a test for text. =============== Diff against CollectionsTests-nice.258 =============== Item was added: + ----- Method: TextTest>>test01ColorAt (in category 'tests') ----- + test01ColorAt + + | text | + text := Text fromString: 'Hello'. + self assert: Color black equals: (text colorAt: 1). + self should: [text colorAt: 1 ifNone: [Error signal]] raise: Error. + + text := Text string: 'Hello' attribute: (TextColor color: Color gray). + self assert: Color gray equals: (text colorAt: 1). + ! From commits at source.squeak.org Thu Nov 12 09:11:00 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 09:11:02 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1034.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1034.mcz ==================== Summary ==================== Name: Morphic-mt.1034 Author: mt Time: 12 November 2015, 10:10:27.351 am UUID: c4e7c7d2-2f19-4f9f-b059-59f07edbe975 Ancestors: Morphic-mt.1033 Adds support for a text color to list morphs. =============== Diff against Morphic-mt.1033 =============== Item was changed: ----- Method: LazyListMorph>>display:atRow:on: (in category 'drawing') ----- display: item atRow: row on: canvas "display the given item at row row" | drawBounds emphasized rowColor itemAsText | itemAsText := item asStringOrText. "If it is a text, we will only use the first character's emphasis." emphasized := itemAsText isText ifTrue: [font emphasized: (itemAsText emphasisAt: 1)] ifFalse: [font]. + rowColor := itemAsText isText + ifTrue: [itemAsText colorAt: 1 ifNone: [self colorForRow: row]] + ifFalse: [self colorForRow: row]. - rowColor := self colorForRow: row. drawBounds := (self drawBoundsForRow: row) translateBy: (self hMargin @ 0). drawBounds := drawBounds intersect: self bounds. "Draw icon if existing. Adjust draw bounds in that case." (self icon: row) ifNotNil: [ :icon || top | top := drawBounds top + ((drawBounds height - icon height) // 2). canvas translucentImage: icon at: drawBounds left @ top. drawBounds := drawBounds left: drawBounds left + icon width + 2 ]. "Draw filter matches if any." (self filterOffsets: row) do: [:offset | canvas frameAndFillRoundRect: ((drawBounds left + offset first) @ drawBounds top corner: (drawBounds left + offset last) @ drawBounds bottom) radius: 3 fillStyle: self class listFilterHighlightColor borderWidth: 1 borderColor: self class listFilterHighlightColor twiceDarker]. "We will only draw strings here." canvas drawString: itemAsText asString in: drawBounds font: emphasized color: rowColor.! From commits at source.squeak.org Thu Nov 12 09:14:43 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 09:14:44 2015 Subject: [squeak-dev] The Trunk: Collections-mt.671.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.671.mcz ==================== Summary ==================== Name: Collections-mt.671 Author: mt Time: 12 November 2015, 10:14:25.954 am UUID: 54b6a544-b195-4ee2-90d6-6c70d89fdcfb Ancestors: Collections-mt.670 Just like #emphasisAt: tolerate null-texts when accessing color information. =============== Diff against Collections-mt.670 =============== Item was changed: ----- Method: Text>>colorAt:ifNone: (in category 'emphasis') ----- colorAt: characterIndex ifNone: block + self size = 0 ifTrue: [^ block value]. "null text tolerates access." + ^ (runs at: characterIndex) detect: [:attr | attr class == TextColor] ifFound: [:attr | attr color] ifNone: block! From commits at source.squeak.org Thu Nov 12 09:18:44 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 09:18:45 2015 Subject: [squeak-dev] The Trunk: Monticello-mt.624.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.624.mcz ==================== Summary ==================== Name: Monticello-mt.624 Author: mt Time: 12 November 2015, 10:18:22.808 am UUID: 542ab0ba-5adb-49f8-979b-d238acbb0b7e Ancestors: Monticello-pre.623 After preparation from Patrick and suggestion from Chris, make ignored changes gray and stike-out only reverted changes. We might want to get rid of the parenthesis? =============== Diff against Monticello-pre.623 =============== Item was changed: ----- Method: MCOperationsBrowser>>list (in category 'accessing') ----- list ^ self items collect: [:each | (self reverts includes: each) ifFalse: [each summary] + ifTrue: [Text string: '( ', each summary, ' )' attribute: TextEmphasis struckOut ]]! - ifTrue: [Text string: '( ', each summary, ' )' attributes: { TextEmphasis italic . TextEmphasis struckOut } ]]! Item was changed: ----- Method: MCSaveVersionDialog>>list (in category 'accessing') ----- list + ^ self items collect: [:each | + (self reverts includes: each) + ifFalse: [(self ignore includes: each) + ifFalse: [each summary] + ifTrue: [Text string: '( ', each summary, ' )' attribute: (TextColor color: Color gray)]] + ifTrue: [Text string: '( ', each summary, ' )' attribute: TextEmphasis struckOut ]]! - ^ self items collect: [:each | - (self reverts includes: each) - ifFalse: [(self ignore includes: each) - ifFalse: [each summary] - ifTrue: [Text string: '( ', each summary, ' )' attribute: TextEmphasis struckOut]] - ifTrue: [Text string: '( ', each summary, ' )' attributes: { TextEmphasis italic . TextEmphasis struckOut } ]]! From Marcel.Taeumel at hpi.de Thu Nov 12 09:31:58 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 12 09:46:04 2015 Subject: [squeak-dev] Re: The Inbox: Monticello-pre.623.mcz In-Reply-To: <10DC4274-6079-4ADE-B739-21A45749567C@gmx.de> References: <1447316415644-4860618.post@n4.nabble.com> <10DC4274-6079-4ADE-B739-21A45749567C@gmx.de> Message-ID: <1447320718852-4860652.post@n4.nabble.com> Done. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Monticello-pre-623-mcz-tp4860455p4860652.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Thu Nov 12 20:11:25 2015 From: tim at rowledge.org (tim Rowledge) Date: Thu Nov 12 20:11:32 2015 Subject: [squeak-dev] Slightly OT: pi-topCEED In-Reply-To: References: Message-ID: > On 11-11-2015, at 5:06 PM, Louis LaBrunda wrote: > > Hi Tim, > > Thanks for the link, it's pretty amazing. It?s also funded already. Now we wait ... tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Immune from any serious head injury. From asqueaker at gmail.com Thu Nov 12 20:37:50 2015 From: asqueaker at gmail.com (Chris Muller) Date: Thu Nov 12 20:37:53 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1034.mcz In-Reply-To: <564457a8.d1278c0a.6488d.2df6SMTPIN_ADDED_MISSING@mx.google.com> References: <564457a8.d1278c0a.6488d.2df6SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Rock on! Great fix! On Thu, Nov 12, 2015 at 3:10 AM, wrote: > Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-mt.1034.mcz > > ==================== Summary ==================== > > Name: Morphic-mt.1034 > Author: mt > Time: 12 November 2015, 10:10:27.351 am > UUID: c4e7c7d2-2f19-4f9f-b059-59f07edbe975 > Ancestors: Morphic-mt.1033 > > Adds support for a text color to list morphs. > > =============== Diff against Morphic-mt.1033 =============== > > Item was changed: > ----- Method: LazyListMorph>>display:atRow:on: (in category 'drawing') ----- > display: item atRow: row on: canvas > "display the given item at row row" > > | drawBounds emphasized rowColor itemAsText | > itemAsText := item asStringOrText. > > "If it is a text, we will only use the first character's emphasis." > emphasized := itemAsText isText > ifTrue: [font emphasized: (itemAsText emphasisAt: 1)] > ifFalse: [font]. > > + rowColor := itemAsText isText > + ifTrue: [itemAsText colorAt: 1 ifNone: [self colorForRow: row]] > + ifFalse: [self colorForRow: row]. > - rowColor := self colorForRow: row. > > drawBounds := (self drawBoundsForRow: row) translateBy: (self hMargin @ 0). > drawBounds := drawBounds intersect: self bounds. > > "Draw icon if existing. Adjust draw bounds in that case." > (self icon: row) ifNotNil: [ :icon || top | > top := drawBounds top + ((drawBounds height - icon height) // 2). > canvas translucentImage: icon at: drawBounds left @ top. > drawBounds := drawBounds left: drawBounds left + icon width + 2 ]. > > "Draw filter matches if any." > (self filterOffsets: row) do: [:offset | > canvas > frameAndFillRoundRect: ((drawBounds left + offset first) @ drawBounds top corner: (drawBounds left + offset last) @ drawBounds bottom) > radius: 3 > fillStyle: self class listFilterHighlightColor > borderWidth: 1 > borderColor: self class listFilterHighlightColor twiceDarker]. > > "We will only draw strings here." > canvas > drawString: itemAsText asString > in: drawBounds > font: emphasized > color: rowColor.! > > From nicolas.cellier.aka.nice at gmail.com Thu Nov 12 22:28:52 2015 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Thu Nov 12 22:28:56 2015 Subject: [squeak-dev] The Trunk: System-nice.777.mcz In-Reply-To: References: <201511111507.tABF7svw018773@shell.msen.com> <20151112040711.GA45520@shell.msen.com> <10AAFC2A-0D85-4A46-9A1F-B76AEA201627@gmail.com> Message-ID: The problem is with 2-bytes arrays (like ShortIntegerArray) which are not a primitive format, but rather emulated-in-image with 4-bytes word-arrays... We have to take a special swap-in-image for these arrays. I re-read primitive loadImageSegmentFrom:outPointers: and it correctly swap (4-bytes) word-arrays, but of course can't make any provision for image-side-short-emulated. So it's clear that I didn't correct correctly :( I just made the test pass if both image segment producer and consumer agree on endianness... Do you suggest adding an inst. var. to ImageSegment? I had the impression that it was not lightweight to maintain compatibility in this case, but maybe I'm wrong... 2015-11-12 5:38 GMT+01:00 Eliot Miranda : > What I mean is that if the system needs to know the endianness if the > segment after it has been loaded I don't see any problem with simply > checking the endianness of the segment before loading it and remembered by > the result in a variable. > > I get the need to have the tests pass by deleting an unnecessary test. > > _,,,^..^,,,_ (phone) > > > On Nov 11, 2015, at 8:35 PM, Eliot Miranda > wrote: > > > > Hi David, > > > >>> On Nov 11, 2015, at 8:07 PM, David T. Lewis > wrote: > >>> > >>> On Wed, Nov 11, 2015 at 03:07:30PM +0000, commits@source.squeak.org > wrote: > >>> Nicolas Cellier uploaded a new version of System to project The Trunk: > >>> http://source.squeak.org/trunk/System-nice.777.mcz > >>> > >>> ==================== Summary ==================== > >>> > >>> Name: System-nice.777 > >>> Author: nice > >>> Time: 11 November 2015, 4:07:14.754 pm > >>> UUID: 86751135-3a70-41f9-aad1-e9de96bf1c70 > >>> Ancestors: System-nice.776 > >>> > >>> Let ImageSegment tests pass on Spur by fixing the erroneous endianness > check. > >>> > >>> Details: > >>> > >>> In spur, primitive 98 which load an ImageSegment does become: the > WordArrayForSegment segment into an Array. So all information about > endianness is lost at this stage. > >>> > >>> I don't know if the primitive will handle all kind of endianness, but > it will eventually fail if it can't, and we won't get down to here, so the > very best thing is to assume that endianness problems are already solved. > > > > The primitive handles endianness reversals. But endianness can be > checked before invoking the primitive, so I don't understand what the > problem is here, if any. > > > > > >> Is this issue related to the Spur object format, or is it due to the > >> implementation of primitive 98 in the VM? > > > > It's to do with the fact that Sour doesn't provide object ordering. The > old VM allocated objects strictly ascending in memory, compacting objects > down when GCing, but preserving order. Sour provides a much more efficient > scavenging GC and an idiosyncratic compaction algorithm in old space, > neither of which preserve object ordering. > > > > Once a segment is loaded, the objects in the segment need to be visited > to send them post load messages so they can I thaw themselves correctly. > In the old system the objects could be enumerated by starting with the > truncated image segment object left behind after turning its contents into > objects because it occurs immediately before the objects in the segment. > Allocating an object immediately after creating the segment word array > provides an end marker. > > > > This just won't work in Spur. Very large objects get allocated in old > space, so there's no way to construct reliably an end marker, and if the GC > runs objects may be reordered anyway. So I chose to have the primitive > become the segment word array into an array of all the objects in the > segment iff the load succeeds. It is then trivial to enumerate the loaded > objects. > > > > I *could* have implemented a different original motive that answered the > set of loaded objects some other way, but the way it is now caused the > least disruption. > > > > I'm still interested in understanding what the endianness related issue > is. Anyone care to enlighten me? > > > > > >> I am experimenting with tracking > >> trunk changes in a 4.6 image, and I'm trying to understand if this > change > >> would be appropriate for a "trunk" image in the old V3 image format. I > >> think the answer is no, but I'm not sure so better to ask. > >> > >> Thanks, > >> Dave > > > > > > _,,,^..^,,,_ (phone) > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151112/8592c880/attachment-0001.htm From commits at source.squeak.org Thu Nov 12 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151112225502.12706.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009134.html Name: Monticello-pre.622 Ancestors: Monticello-cmm.621 Adds a keyboard shortcut for reverting changes to Monticello browsers which are showing changes. This should allow easy reversion of changes shown in diffs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009135.html Name: Monticello-pre.623 Ancestors: Monticello-pre.622 Adds a different rendering of reverted items in Monticello change browsers to allow developers to remember what was already removed. This integrates with the Ignore feature of the SaveDialog. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009136.html Name: Collections-mt.670 Ancestors: Collections-ul.669 Adds convenient color check method for texts. Just like #emphasisAt: does for font emphasis. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009137.html Name: CollectionsTests-mt.259 Ancestors: CollectionsTests-nice.258 Adds a test for text. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009138.html Name: Morphic-mt.1034 Ancestors: Morphic-mt.1033 Adds support for a text color to list morphs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009139.html Name: Collections-mt.671 Ancestors: Collections-mt.670 Just like #emphasisAt: tolerate null-texts when accessing color information. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009140.html Name: Monticello-mt.624 Ancestors: Monticello-pre.623 After preparation from Patrick and suggestion from Chris, make ignored changes gray and stike-out only reverted changes. We might want to get rid of the parenthesis? ============================================= From commits at source.squeak.org Thu Nov 12 23:37:50 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 23:37:51 2015 Subject: [squeak-dev] The Trunk: System-nice.778.mcz Message-ID: Nicolas Cellier uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-nice.778.mcz ==================== Summary ==================== Name: System-nice.778 Author: nice Time: 13 November 2015, 12:37:09.849 am UUID: cc54826e-9a26-4826-a459-9de589d4aee2 Ancestors: System-nice.777 Attempt a better fix for restoring endianness at ImageSegment materialization: 1) get the image segment endianess from the segment WordArray, before it is transformed into an Array. 2) use this information to later restoreEndianness: ifNeeded. This will require a slight semantic change of #startUpFrom: to which we pass a Boolean rather than an ImageSegment. =============== Diff against System-nice.777 =============== Item was changed: ----- Method: ImageSegment>>comeFullyUpOnReload: (in category 'fileIn/Out') ----- comeFullyUpOnReload: smartRefStream "fix up the objects in the segment that changed size. An object in the segment is the wrong size for the modern version of the class. Construct a fake class that is the old size. Replace the modern class with the old one in outPointers. Load the segment. Traverse the instances, making new instances by copying fields, and running conversion messages. Keep the new instances. Bulk forward become the old to the new. Let go of the fake objects and classes. After the install (below), arrayOfRoots is filled in. Globalize new classes. Caller may want to do some special install on certain objects in arrayOfRoots. May want to write the segment out to disk in its new form." + | mapFakeClassesToReal receiverClasses rootsToUnhiberhate myProject forgetDoItsClasses endianness | - | mapFakeClassesToReal receiverClasses rootsToUnhiberhate myProject forgetDoItsClasses | forgetDoItsClasses := Set new. RecentlyRenamedClasses := nil. "in case old data hanging around" mapFakeClassesToReal := smartRefStream reshapedClassesIn: outPointers. "Dictionary of just the ones that change shape. Substitute them in outPointers." self fixCapitalizationOfSymbols. + endianness := self endianness. arrayOfRoots := self loadSegmentFrom: segment outPointers: outPointers. self checkAndReportLoadError. "Can't use install. Not ready for rehashSets" mapFakeClassesToReal isEmpty ifFalse: [ self reshapeClasses: mapFakeClassesToReal refStream: smartRefStream ]. "When a Project is stored, arrayOfRoots has all objects in the project, except those in outPointers" arrayOfRoots do: [:importedObject | | existing | ((importedObject isMemberOf: WideString) or: [importedObject isMemberOf: WideSymbol]) ifTrue: [ importedObject mutateJISX0208StringToUnicode. importedObject class = WideSymbol ifTrue: [ "self halt." Symbol hasInterned: importedObject asString ifTrue: [:multiSymbol | multiSymbol == importedObject ifFalse: [ importedObject becomeForward: multiSymbol. ]. ]. ]. ]. (importedObject isKindOf: TTCFontSet) ifTrue: [ existing := TTCFontSet familyName: importedObject familyName pointSize: importedObject pointSize. "supplies default" existing == importedObject ifFalse: [importedObject becomeForward: existing]. ]. ]. "Smalltalk garbageCollect. MultiSymbol rehash. These take time and are not urgent, so don't to them. In the normal case, no bad MultiSymbols will be found." + receiverClasses := self restoreEndianness: (endianness ~~ Smalltalk endianness). "rehash sets" - receiverClasses := self restoreEndianness. "rehash sets" smartRefStream checkFatalReshape: receiverClasses. "Classes in this segment." arrayOfRoots do: [:importedObject | importedObject class class == Metaclass ifTrue: [ forgetDoItsClasses add: importedObject. self declare: importedObject]]. arrayOfRoots do: [:importedObject | importedObject isCompiledMethod ifTrue: [ importedObject sourcePointer > 0 ifTrue: [importedObject zapSourcePointer]]. (importedObject isKindOf: Project) ifTrue: [ myProject := importedObject. importedObject ensureChangeSetNameUnique. Project addingProject: importedObject. importedObject restoreReferences. self dependentsRestore: importedObject]]. rootsToUnhiberhate := arrayOfRoots select: [:importedObject | importedObject respondsTo: #unhibernate "ScriptEditors and ViewerFlapTabs" ]. myProject ifNotNil: [ myProject world setProperty: #thingsToUnhibernate toValue: rootsToUnhiberhate asArray. ]. mapFakeClassesToReal isEmpty ifFalse: [ mapFakeClassesToReal keysAndValuesDo: [:aFake :aReal | aFake removeFromSystemUnlogged. "do not assign the fake's hash to the real class" aFake becomeForward: aReal copyHash: false]. SystemOrganization removeEmptyCategories]. forgetDoItsClasses do: [:c | c forgetDoIts]. "^ self" ! Item was changed: ----- Method: ImageSegment>>restoreEndianness (in category 'fileIn/Out') ----- restoreEndianness + ^self restoreEndianness: self endianness ~~ Smalltalk endianness! - "Fix endianness (byte order) of any objects not already fixed. Do this by discovering classes that need a startUp message sent to each instance, and sending it. - I have just been brought in and converted to live objects. Find all Sets and Dictionaries in the newly created objects and rehash them. Segment is near then end of memory, since is was newly brought in (and a new object created for it). - Also, collect all classes of receivers of blocks which refer to instance variables. Return them. Caller will check if they have been reshaped." - - | hashedCollections receiverClasses noStartUpNeeded startUps | - - hashedCollections := OrderedCollection new. - receiverClasses := IdentitySet new. - noStartUpNeeded := IdentitySet new. "classes that don't have a per-instance startUp message" - startUps := IdentityDictionary new. "class -> MessageSend of a startUp message" - self allObjectsDo: - [:object| | cls msg | - object isInMemory ifTrue: - [(object isCollection and: [object isKindOf: HashedCollection]) ifTrue: - [hashedCollections add: object]. - (object isContext and: [object hasInstVarRef]) ifTrue: - [receiverClasses add: object receiver class]]. - (noStartUpNeeded includes: object class) ifFalse: - [cls := object class. - (msg := startUps at: cls ifAbsent: nil) ifNil: - [msg := cls startUpFrom: self. "a Message, if we need to swap bytes this time" - msg ifNil: [noStartUpNeeded add: cls] - ifNotNil: [startUps at: cls put: msg]]. - msg ifNotNil: [msg sentTo: object]]]. - hashedCollections do: [ :each | each compact ]. "our purpose" - ^ receiverClasses "our secondary job"! Item was added: + ----- Method: ImageSegment>>restoreEndianness: (in category 'fileIn/Out') ----- + restoreEndianness: endiannessHasToBeFixed + "If endiannessHasToBeFixed, then fix endianness (byte order) of any objects not already fixed. Do this by discovering classes that need a startUp message sent to each instance, and sending it.. + I have just been brought in and converted to live objects. Find all Sets and Dictionaries in the newly created objects and rehash them. Segment is near then end of memory, since is was newly brought in (and a new object created for it). + Also, collect all classes of receivers of blocks which refer to instance variables. Return them. Caller will check if they have been reshaped." + + | hashedCollections receiverClasses noStartUpNeeded startUps | + + hashedCollections := OrderedCollection new. + receiverClasses := IdentitySet new. + noStartUpNeeded := IdentitySet new. "classes that don't have a per-instance startUp message" + startUps := IdentityDictionary new. "class -> MessageSend of a startUp message" + self allObjectsDo: + [:object| | cls msg | + object isInMemory ifTrue: + [(object isCollection and: [object isKindOf: HashedCollection]) ifTrue: + [hashedCollections add: object]. + (object isContext and: [object hasInstVarRef]) ifTrue: + [receiverClasses add: object receiver class]]. + (noStartUpNeeded includes: object class) ifFalse: + [cls := object class. + (msg := startUps at: cls ifAbsent: nil) ifNil: + [msg := cls startUpFrom: endiannessHasToBeFixed. "a Message, if we need to swap bytes this time" + msg ifNil: [noStartUpNeeded add: cls] + ifNotNil: [startUps at: cls put: msg]]. + msg ifNotNil: [msg sentTo: object]]]. + hashedCollections do: [ :each | each compact ]. "our purpose" + ^ receiverClasses "our secondary job"! From commits at source.squeak.org Thu Nov 12 23:40:09 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 23:40:11 2015 Subject: [squeak-dev] The Trunk: Kernel-nice.968.mcz Message-ID: Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.968.mcz ==================== Summary ==================== Name: Kernel-nice.968 Author: nice Time: 13 November 2015, 12:39:29.775 am UUID: b9646909-d6f1-481e-b913-1e63f3ca5c45 Ancestors: Kernel-nice.967 Pass a boolean to startUpFrom: indicating whether the object came from a different endian machine or not. =============== Diff against Kernel-nice.967 =============== Item was changed: ----- Method: Behavior>>startUpFrom: (in category 'system startup') ----- + startUpFrom: endiannessHasToBeFixed - startUpFrom: anImageSegment "Override this when a per-instance startUp message needs to be sent. For example, to correct the order of 16-bit non-pointer data when it came from a different endian machine." ^ nil! From commits at source.squeak.org Thu Nov 12 23:40:56 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 12 23:40:58 2015 Subject: [squeak-dev] The Trunk: Balloon-nice.28.mcz Message-ID: Nicolas Cellier uploaded a new version of Balloon to project The Trunk: http://source.squeak.org/trunk/Balloon-nice.28.mcz ==================== Summary ==================== Name: Balloon-nice.28 Author: nice Time: 13 November 2015, 12:40:49.206 am UUID: a3acdfcd-9c29-4526-ac82-172c2d70f71c Ancestors: Balloon-eem.27 Pass a boolean to startUpFrom: indicating whether the object came from a different endian machine or not. =============== Diff against Balloon-eem.27 =============== Item was changed: ----- Method: ShortIntegerArray class>>startUpFrom: (in category 'class initialization') ----- + startUpFrom: endiannessHasToBeFixed - startUpFrom: anImageSegment "In this case, do we need to swap word halves when reading this segement?" + ^endiannessHasToBeFixed - ^ (Smalltalk endianness) ~~ (anImageSegment endianness) ifTrue: [Message selector: #swapShortObjects] "will be run on each instance" ifFalse: [nil]. ! Item was changed: ShortIntegerArray variableWordSubclass: #ShortPointArray instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Balloon-Collections'! + !ShortPointArray commentStamp: 'nice 11/12/2015 23:50' prior: 0! + This class stores points that are in short integer range (e.g., -32768 <= value <= 32767). It is used to pass data efficiently to the primitive level during high-bandwidth 2D graphics operations.! - !ShortPointArray commentStamp: '' prior: 0! - This class stores points that are in short integer range (e.g., -32767 <= value <= 32768). It is used to pass data efficiently to the primitive level during high-bandwidth 2D graphics operations.! Item was changed: ----- Method: ShortRunArray class>>startUpFrom: (in category 'class initialization') ----- + startUpFrom: endiannessHasToBeFixed - startUpFrom: anImageSegment "In this case, do we need to swap word halves when reading this segement?" + ^endiannessHasToBeFixed - ^Smalltalk endianness ~~ anImageSegment endianness ifTrue: [Message selector: #swapRuns "will be run on each instance"] ifFalse: [nil]! From commits at source.squeak.org Fri Nov 13 01:18:53 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 01:18:53 2015 Subject: [squeak-dev] The Trunk: System-eem.779.mcz Message-ID: Eliot Miranda uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-eem.779.mcz ==================== Summary ==================== Name: System-eem.779 Author: eem Time: 12 November 2015, 5:17:00.950228928 pm UUID: 91db5f9f-27ba-4514-bb9c-90c1bbcabd07 Ancestors: System-nice.778 Avoid isKindOf: in new endianness handling in ImageSegment. Nuke obsolete BreakpointManager method. Simplify endianness calculation given that this is Spur and the vmParameter can be assumed to be present. Provide accessors for the new (biut as yet unused) finalization scheme (in preparation). Add a method that answers unbound methods, useful for recmpile all shenannigans. =============== Diff against System-nice.778 =============== Item was removed: - ----- Method: BreakpointManager class>>breakpointMethodSourceFor:in: (in category 'private') ----- - breakpointMethodSourceFor: aSymbol in: aClass - "Compose new source containing a break statement (currently it will be the first, - later we want to insert it in any place)" - - | oldSource methodNode breakOnlyMethodNode sendBreakMessageNode | - oldSource := aClass sourceCodeAt: aSymbol. - methodNode := aClass newCompiler - compile: oldSource - in: aClass - notifying: nil - ifFail: [self error: '[breakpoint] unable to install breakpoint']. - breakOnlyMethodNode := aClass newCompiler - compile: 'temporaryMethodSelectorForBreakpoint - self break. - ^self' - in: aClass - notifying: nil - ifFail: [self error: '[breakpoint] unable to install breakpoint']. - sendBreakMessageNode := breakOnlyMethodNode block statements first. - methodNode block statements addFirst: sendBreakMessageNode. - ^methodNode printString - ! Item was changed: ----- Method: ImageSegment>>endianness (in category 'fileIn/Out') ----- endianness "Return which endian kind the incoming segment came from" + segment class isBits ifFalse: + ["Hope that primitive 98 did the right thing - anyway, we lost information about endianness, so pretend we share the image's endianness." + ^Smalltalk endianness]. + ^(segment first bitShift: -24) asCharacter == $d ifTrue: [#big] ifFalse: [#little]! - (segment isKindOf: WordArray) - ifFalse: - ["Hope that primitive 98 did the right thing - anyway, we lost information about endianness, so the pretend we share image endianness." - ^Smalltalk endianness]. - ^ (segment first bitShift: -24) asCharacter == $d ifTrue: [#big] ifFalse: [#little]! Item was changed: ----- Method: SmalltalkImage>>isRunningCog (in category 'system attributes') ----- isRunningCog "Answers if we're running on a Cog VM (JIT or StackInterpreter)" + ^(self vmParameterAt: 42) - ^( [self vmParameterAt: 42] on: Error do: [] ) ifNil: [false] ifNotNil: [:numStackPages| numStackPages > 0]! Item was added: + ----- Method: SmalltalkImage>>supportsQueueingFinalization (in category 'system attributes') ----- + supportsQueueingFinalization + "Answer whether the VM queues individual weak arrays for finalization, instead + of signalling the finalization semaphore once for all arrays and having the + WeakRegistry mechanism finalize all weak arrays, whether they need to or not." + "SmalltalkImage current supportsQueueingFinalization" + + ^(self vmParameterAt: 48) anyMask: 16! Item was added: + ----- Method: SmalltalkImage>>supportsQueueingFinalization: (in category 'system attributes') ----- + supportsQueueingFinalization: aBoolean + "Determine whether the VM queues individual weak arrays for finalization, instead + of signalling the finalization semaphore once for all arrays and having the + WeakRegistry mechanism finalize all weak arrays, whether they need to or not. + This flag persists across snapshots, stored in the image header." + "SmalltalkImage current supportsQueueingFinalization: true" + + self vmParameterAt: 48 put: ((self vmParameterAt: 48) bitClear: 16) + (aBoolean ifTrue: [16] ifFalse: [0])! Item was added: + ----- Method: SystemNavigation>>allUnboundMethods (in category 'query') ----- + allUnboundMethods + "Answer all CompiledMehtods that are not in the class hierarchy" + "self systemNavigation allUnboundMethods" + ^CompiledMethod allSubInstances select: + [:m| + m methodClass + ifNil: [true] + ifNotNil: + [:mc| + (mc compiledMethodAt: m selector ifAbsent: []) ~~ m]]! From commits at source.squeak.org Fri Nov 13 01:22:19 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 01:22:20 2015 Subject: [squeak-dev] The Trunk: Collections-eem.672.mcz Message-ID: Eliot Miranda uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-eem.672.mcz ==================== Summary ==================== Name: Collections-eem.672 Author: eem Time: 12 November 2015, 5:21:54.525 pm UUID: 9b35923c-464e-4b66-8541-2e307f79186b Ancestors: Collections-mt.671 Only print ByteArrays as literals, not every subclass of ByteArray that doesn't have its own print method. =============== Diff against Collections-mt.671 =============== Item was added: + ----- Method: ByteArray>>printAsLiteralByteArrayOn: (in category 'printing') ----- + printAsLiteralByteArrayOn: aStream + + aStream nextPutAll: '#['. + self + do: [ :each | each printOn: aStream ] + separatedBy: [ aStream nextPut: $ ]. + aStream nextPut: $]! Item was changed: ----- Method: ByteArray>>printOn: (in category 'printing') ----- printOn: aStream + self shouldBePrintedAsLiteral ifFalse: + [super printOn: aStream. + aStream space]. + self printAsLiteralByteArrayOn: aStream! - aStream nextPutAll: '#['. - self - do: [ :each | each printOn: aStream ] - separatedBy: [ aStream nextPut: $ ]. - aStream nextPut: $]! Item was added: + ----- Method: ByteArray>>storeAsLiteralByteArrayOn: (in category 'printing') ----- + storeAsLiteralByteArrayOn: aStream + aStream nextPutAll: '#['. + self + do: [ :each | each storeOn: aStream ] + separatedBy: [ aStream nextPut: $ ]. + aStream nextPut: $]! Item was changed: ----- Method: ByteArray>>storeOn: (in category 'printing') ----- storeOn: aStream + self shouldBePrintedAsLiteral + ifTrue: [self storeAsLiteralByteArrayOn: aStream] + ifFalse: [super storeOn: aStream]! - aStream nextPutAll: '#['. - self - do: [ :each | each storeOn: aStream ] - separatedBy: [ aStream nextPut: $ ]. - aStream nextPut: $]! From commits at source.squeak.org Fri Nov 13 01:24:24 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 01:24:25 2015 Subject: [squeak-dev] The Trunk: Environments-eem.58.mcz Message-ID: Eliot Miranda uploaded a new version of Environments to project The Trunk: http://source.squeak.org/trunk/Environments-eem.58.mcz ==================== Summary ==================== Name: Environments-eem.58 Author: eem Time: 12 November 2015, 5:24:15.411 pm UUID: 97d16f02-19ce-4b4f-af7a-4a431837172a Ancestors: Environments-cmm.57 Make sure we can collect; environments too. =============== Diff against Environments-cmm.57 =============== Item was added: + ----- Method: Environment>>collect: (in category 'emulating') ----- + collect: aBlock + ^ declarations collect: aBlock! From commits at source.squeak.org Fri Nov 13 01:30:37 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 01:30:40 2015 Subject: [squeak-dev] The Trunk: Kernel-eem.969.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.969.mcz ==================== Summary ==================== Name: Kernel-eem.969 Author: eem Time: 12 November 2015, 5:30:04.713 pm UUID: ec5388a5-1235-4c2d-8ec1-9ec28a9f617a Ancestors: Kernel-nice.968 Fix tow speeling sorres. Handle the case where a method compiled in the debugger has a large frame. =============== Diff against Kernel-nice.968 =============== Item was changed: ----- Method: InstructionPrinter>>callPrimitive: (in category 'instruction decoding') ----- callPrimitive: index + "Print the callPrimitive bytecode." - "Print the callPrimitive." + self print: 'callPrimitive: ' , index printString! - self print: 'callPrimtive: ' , index printString! Item was changed: ----- Method: Process>>restartTopWith: (in category 'changing suspended state') ----- restartTopWith: method "Rollback top context and replace with new method. Assumes self is suspended" method isQuick + ifTrue: [self popTo: suspendedContext sender] + ifFalse: + [suspendedContext method frameSize >= method frameSize + ifTrue: [suspendedContext privRefreshWith: method] + ifFalse: + [self assert: suspendedContext isExecutingBlock not. + suspendedContext := MethodContext + sender: suspendedContext sender + receiver: suspendedContext receiver + method: method + arguments: ((1 to: method numArgs) collect: + [:i| suspendedContext tempAt: i])]]. - ifTrue: [ self popTo: suspendedContext sender ] - ifFalse: [ suspendedContext privRefreshWith: method ]. ! Item was changed: ----- Method: SmallInteger>>objectForDataStream: (in category 'objects from disk') ----- objectForDataStream: refStrm + "In a 64-bit Spur VM, we may have to fake 32-bit SmallIntegers for compatibility." - "In a 64bits sput VM, we may have to fake 32bits SmallInteger for compatibility" | large | self > 16r3FFFFFFF ifTrue: [ large := LargePositiveInteger new: self digitLength neg: false. 1 to: self digitLength do: [:i | large digitAt: i put: (self digitAt: i)]. ^large]. self < -16r40000000 ifTrue: [ large := LargeNegativeInteger new: self digitLength neg: true. 1 to: self digitLength do: [:i | large digitAt: i put: (self digitAt: i)]. ^large]. + ^ self! - ^ self - ! From commits at source.squeak.org Fri Nov 13 09:13:24 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 09:13:27 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1035.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1035.mcz ==================== Summary ==================== Name: Morphic-mt.1035 Author: mt Time: 13 November 2015, 10:12:46.795 am UUID: 926c3239-11f3-4ae5-930a-3de5de1a8d7e Ancestors: Morphic-mt.1034 Adds multiple text undo/redo functionality. Preference allows to specify the maximum history depth. Each text editor has its own history. All histories will be purged when building a Squeak release. CMD+Z ... Undo CMD+SHIFT+Z ... Redo Note: The function #makeCapitalized: cannot be invoked via CMD+SHIFT+Z anymore. CMD+Y is undo primarily on Windows machines and already assigned to #swapChars:. Also, CMD+SHIFT+Z is more convenient for US-like keyboard layouts. =============== Diff against Morphic-mt.1034 =============== Item was removed: - Object subclass: #EditCommand - instanceVariableNames: 'textMorph phase replacedText replacedTextInterval newText newTextInterval lastSelectionInterval' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Text Support'! - - !EditCommand commentStamp: '' prior: 0! - This class handles all paragraph surgery in VI. In general, subclasses of EditCommand should be able to rely on the super class' undo/redo machinery -- only the repeat command needs to be overridden in most cases. This assumes, of course, that the newText, replacedText, newTextInterval, and replacedTextInterval have been set correctly. - - When setting the interval, use normal mode style selections, not insert mode selections (see class comment of VIMorphEditor). - - Possible useful expressions for doIt or printIt. - - Structure: - instVar1 type -- comment about the purpose of instVar1 - instVar2 type -- comment about the purpose of instVar2 - - Any further useful comments about the general approach of this implementation.! Item was removed: - ----- Method: EditCommand class>>textMorph:replacedText:replacedTextInterval:newText:newTextInterval: (in category 'instance creation') ----- - textMorph: tm - replacedText: replacedText - replacedTextInterval: replacedTextInterval - newText: newText - newTextInterval: newTextInterval - - - ^(self new) - textMorph: tm - replacedText: replacedText - replacedTextInterval: replacedTextInterval - newText: newText - newTextInterval: newTextInterval; - yourself - - ! Item was removed: - ----- Method: EditCommand>>doCommand (in category 'command execution') ----- - doCommand - - ^self redoCommand - - ! Item was removed: - ----- Method: EditCommand>>doSelectionInterval (in category 'selection') ----- - doSelectionInterval - ^self redoSelectionInterval! Item was removed: - ----- Method: EditCommand>>iEditCommand (in category 'accessors') ----- - iEditCommand - ^true! Item was removed: - ----- Method: EditCommand>>lastSelectionInterval (in category 'accessors') ----- - lastSelectionInterval - ^lastSelectionInterval! Item was removed: - ----- Method: EditCommand>>newText (in category 'accessors') ----- - newText - ^newText! Item was removed: - ----- Method: EditCommand>>newText: (in category 'accessors') ----- - newText: aText - ^newText := aText! Item was removed: - ----- Method: EditCommand>>newTextInterval (in category 'accessors') ----- - newTextInterval - ^newTextInterval! Item was removed: - ----- Method: EditCommand>>newTextInterval: (in category 'accessors') ----- - newTextInterval: anInterval - ^newText := anInterval! Item was removed: - ----- Method: EditCommand>>pEditor (in category 'accessors') ----- - pEditor - ^textMorph editor - ! Item was removed: - ----- Method: EditCommand>>phase (in category 'accessors') ----- - phase - ^phase - ! Item was removed: - ----- Method: EditCommand>>phase: (in category 'accessors') ----- - phase: aSymbol - ^phase := aSymbol - ! Item was removed: - ----- Method: EditCommand>>printOn: (in category 'accessors') ----- - printOn: aStream - - | | - aStream - nextPutAll: self class name; - nextPut: $[; - nextPutAll: ('new: ', newTextInterval asString,' -> "', newText, '", rText: ', replacedTextInterval asString,' -> "', replacedText, '"'); - nextPut: $].! Item was removed: - ----- Method: EditCommand>>redoCommand (in category 'command execution') ----- - redoCommand - - | | - - "Debug dShow: ('rInterval: ', replacedTextInterval asString, '. rText: ', replacedText string, ' nInterval: ', newTextInterval asString, ' nText: ', newText string)." - self textMorphEditor - noUndoReplace: replacedTextInterval - with: newText. - - "Debug dShow: ('lastSelInt: ', lastSelectionInterval asString)." - ! Item was removed: - ----- Method: EditCommand>>redoSelectionInterval (in category 'selection') ----- - redoSelectionInterval - "Return an interval to be displayed as a subtle selection after undo, or nil" - - ^newTextInterval - ! Item was removed: - ----- Method: EditCommand>>replacedText (in category 'accessors') ----- - replacedText - ^replacedText! Item was removed: - ----- Method: EditCommand>>replacedText: (in category 'accessors') ----- - replacedText: aText - ^replacedText := aText! Item was removed: - ----- Method: EditCommand>>replacedTextInterval (in category 'accessors') ----- - replacedTextInterval - ^replacedTextInterval! Item was removed: - ----- Method: EditCommand>>replacedTextInterval: (in category 'accessors') ----- - replacedTextInterval: anInterval - ^replacedTextInterval := anInterval! Item was removed: - ----- Method: EditCommand>>textMorph:replacedText:replacedTextInterval:newText:newTextInterval: (in category 'initialization') ----- - textMorph: tm - replacedText: rText - replacedTextInterval: rInterval - newText: nText - newTextInterval: nInterval - - - textMorph := tm. - replacedText := rText. - replacedTextInterval := rInterval. - newText := nText. - newTextInterval := nInterval. - - ! Item was removed: - ----- Method: EditCommand>>textMorphEditor (in category 'accessors') ----- - textMorphEditor - ^textMorph editor - ! Item was removed: - ----- Method: EditCommand>>textMorphString (in category 'accessors') ----- - textMorphString - ^textMorph text string - ! Item was removed: - ----- Method: EditCommand>>textMorphStringSize (in category 'accessors') ----- - textMorphStringSize - ^textMorph text string size - ! Item was removed: - ----- Method: EditCommand>>undoCommand (in category 'command execution') ----- - undoCommand - - "Debug dShow: ('new Interval: ', newTextInterval asString, '. rText: ', replacedText string)." - - self textMorphEditor - noUndoReplace: newTextInterval - with: replacedText. - - - ! Item was removed: - ----- Method: EditCommand>>undoSelection (in category 'selection') ----- - undoSelection - "Return an interval to be displayed as a selection after undo, or nil" - - ^replacedTextInterval first to: (replacedTextInterval first + replacedText size - 1) - ! Item was removed: - ----- Method: EditCommand>>undoSelectionInterval (in category 'selection') ----- - undoSelectionInterval - "Return an interval to be displayed as a selection after undo, or nil" - - | i | - i := (replacedTextInterval first min: self textMorphStringSize). - ^i to: i - 1 - ! Item was changed: ----- Method: Editor>>backspace: (in category 'typing/selecting keys') ----- backspace: aKeyboardEvent "Backspace over the last character." | startIndex | aKeyboardEvent shiftPressed ifTrue: [^ self backWord: aKeyboardEvent]. startIndex := self markIndex + (self hasCaret ifTrue: [0] ifFalse: [1]). startIndex := 1 max: startIndex - 1. + + ^ self backTo: startIndex! - self backTo: startIndex. - ^false! Item was changed: ----- Method: Editor>>firstWordBoundaryAfter: (in category 'private') ----- firstWordBoundaryAfter: position "If the character at position is whitespace, answer the position of the first character after position which is not whitespace. If the character at position is not whitespace, answer the position of the first character after position which is whitespace." | string index atWhitespace | string := self string. index := position. (atWhitespace := (string at: index) isSeparator) ifTrue: [ "find next non-separator" + [ (index <= string size) and: [ (string at: index) isSeparator ] ] whileTrue: [ index := index + 1 ] ] - [ (index - between: 1 - and: string size) and: [ (string at: index) isSeparator ] ] whileTrue: [ index := index + 1 ] ] ifFalse: [ "find next separator" + [ (index <= string size) and: [ (string at: index) isSeparator not ] ] whileTrue: [ index := index + 1 ] ]. - [ (index - between: 1 - and: string size) and: [ (string at: index) isSeparator ] ] whileFalse: [ index := index + 1 ] ]. ^ index! Item was changed: ----- Method: MenuIcons class>>itemsIcons (in category 'menu decoration') ----- itemsIcons "answer a collection of associations wordings -> icon to decorate the menus all over the image" | icons | icons := OrderedCollection new. "icons add: #('Test Runner' ) -> self smallTrafficIcon." " world menu" "icons add: #('previous project' 'go to previous project') -> self smallProjectBackIcon." icons add: #('go to next project') -> self smallProjectNextIcon. icons add: #('select' ) -> self smallSelectIcon. icons add: #('jump to project...' ) -> self smallProjectJumpIcon. icons add: #('open...' ) -> self smallOpenIcon. icons add: #('appearance...' ) -> self smallConfigurationIcon. icons add: #('help...' ) -> self smallHelpIcon. "icons add: #('windows...' ) -> self smallWindowIcon." icons add: #('changes...' ) -> self smallDocumentClockIcon. icons add: #('print PS to file...' ) -> self smallPrintIcon. icons add: #('debug...' ) -> self smallDebugIcon. icons add: #('export...' ) -> self smallExportIcon. icons add: #('save' ) -> self smallSaveIcon. "icons add: #('save project on file...' ) -> self smallProjectSaveIcon." "icons add: #('save as...') -> self smallSaveAsIcon. icons add: #('save as new version') -> self smallSaveNewIcon. icons add: #('save and quit' ) -> self smallQuitIcon." icons add: #('quit') -> self smallQuitNoSaveIcon. "icons add: #('load project from file...' ) -> self smallProjectLoadIcon." "" icons add: #('do it (d)' ) -> self smallDoItIcon. icons add: #('inspect it (i)' 'inspect world' 'explore world' 'inspect model' 'inspect morph' 'explore morph' 'inspect owner chain' 'explore' 'inspect' 'explore (I)' 'inspect (i)' 'basic inspect' ) -> self smallInspectItIcon. icons add: #('print it (p)' ) -> self smallPrintIcon. icons add: #('debug it (D)' ) -> self smallDebugIcon. icons add: #('tally it' ) -> self smallTimerIcon. "" icons add: #('copy (c)' 'copy to paste buffer' 'copy text' ) -> self smallCopyIcon. icons add: #('paste (v)') -> self smallPasteIcon. icons add: #('cut (x)' ) -> self smallCutIcon. "" icons add: #('accept (s)' 'yes' 'Yes' ) -> self smallOkIcon. icons add: #('cancel (l)' 'no' 'No' ) -> self smallCancelIcon. "" + icons add: #('redo (Z)' ) -> self smallRedoIcon. - icons add: #('do again (j)' ) -> self smallRedoIcon. icons add: #('undo (z)' ) -> self smallUndoIcon. "" icons add: #( 'find class... (f)' 'find method...' ) -> self smallSearchIcon. icons add: #('find...(f)') -> self smallFindIcon. "" icons add: #('remove' 'remove class (x)' 'delete method from changeset (d)' 'remove method from system (x)' 'delete class from change set (d)' 'remove class from system (x)' 'destroy change set (X)' ) -> self smallDeleteIcon. icons add: #('add item...' 'new category...' 'new change set... (n)' ) -> self smallNewIcon. "" icons add: #('objects (o)' ) -> self smallObjectCatalogIcon. icons add: #('authoring tools...') -> self smallAuthoringToolsIcon. icons add: #('projects...') -> self smallProjectIcon. "" icons add: #('make screenshot') -> self smallScreenshotIcon. "" icons add: #('leftFlush' ) -> self smallLeftFlushIcon. icons add: #('rightFlush' ) -> self smallRightFlushIcon. icons add: #('centered' 'set alignment... (u)' ) -> self smallCenteredIcon. icons add: #('justified' ) -> self smallJustifiedIcon. "" icons add: #('set font... (k)' 'list font...' 'set subtitles font' 'change font' 'system fonts...' 'change font...' 'default text font...' 'flaps font...' 'eToys font...' 'eToys title font...' 'halo label font...' 'menu font...' 'window-title font...' 'balloon-help font...' 'code font...' 'button font...') -> self smallFontsIcon. icons add: #('full screen on') -> self smallFullscreenOnIcon. icons add: #('full screen off' ) -> self smallFullscreenOffIcon. "" ^ icons! Item was changed: ----- Method: PasteUpMorph>>handleListenEvent: (in category 'events-processing') ----- handleListenEvent: aUserInputEvent "Handlers for *global* keys, regardless of which widget has keyboard focus." aUserInputEvent type = #keystroke ifTrue: [ aUserInputEvent commandKeyPressed ifTrue: [ aUserInputEvent keyValue = $R asciiValue ifTrue: [ Utilities browseRecentSubmissions ]. aUserInputEvent keyValue = $L asciiValue ifTrue: [ World findAFileList: aUserInputEvent ]. aUserInputEvent keyValue = $O asciiValue ifTrue: [ World findAMonticelloBrowser ]. aUserInputEvent keyValue = $P asciiValue ifTrue: [ World findAPreferencesPanel: aUserInputEvent ]. + "aUserInputEvent keyValue = $Z asciiValue ifTrue: [ ChangeList browseRecentLog ]." - aUserInputEvent keyValue = $Z asciiValue ifTrue: [ ChangeList browseRecentLog ]. aUserInputEvent keyValue = $] asciiValue ifTrue: [ Smalltalk snapshot: true andQuit: false ] ] ]! Item was added: + ----- Method: PluggableTextMorph>>findReplace (in category 'menu commands') ----- + findReplace + self handleEdit: [textMorph editor findReplace]! Item was added: + ----- Method: PluggableTextMorph>>redo (in category 'menu commands') ----- + redo + self handleEdit: [textMorph editor redo]! Item was changed: ----- Method: PluggableTextMorph>>update: (in category 'updating') ----- update: aSymbol aSymbol ifNil: [^self]. aSymbol == #flash ifTrue: [^self flash]. aSymbol == getTextSelector ifTrue: [ self setText: self getText. getSelectionSelector ifNotNil: [self setSelection: self getSelection]. ^ self]. aSymbol == getSelectionSelector ifTrue: [^self setSelection: self getSelection]. aSymbol == #acceptChanges ifTrue: [^ self accept]. aSymbol == #revertChanges ifTrue: [^ self cancel]. (aSymbol == #autoSelect and: [getSelectionSelector notNil]) ifTrue: [self handleEdit: [(textMorph editor) abandonChangeText; "no replacement!!" setSearch: model autoSelectString; + findAgain]]. - againOrSame: true]]. aSymbol == #clearUserEdits ifTrue: [^self hasUnacceptedEdits: false]. aSymbol == #wantToChange ifTrue: [self canDiscardEdits ifFalse: [^self promptForCancel]. ^self]. aSymbol == #appendEntry ifTrue: [self handleEdit: [self appendEntry]. ^self refreshWorld]. aSymbol == #appendEntryLater ifTrue: [self handleEdit: [self appendEntry]]. aSymbol == #clearText ifTrue: [self handleEdit: [self changeText: Text new]. ^self refreshWorld]. aSymbol == #bs ifTrue: [self handleEdit: [self bsText]. ^self refreshWorld]. aSymbol == #codeChangedElsewhere ifTrue: [self hasEditingConflicts: true. ^self changed]. aSymbol == #saveContents ifTrue: [^self saveContentsInFile]. ! Item was changed: ----- Method: SmalltalkEditor class>>initializeCmdKeyShortcuts (in category 'keyboard shortcut tables') ----- initializeCmdKeyShortcuts "Initialize the (unshifted) command-key (or alt-key) shortcut table." "NOTE: if you don't know what your keyboard generates, use Sensor kbdTest" "SmalltalkEditor initialize" | cmds | super initializeCmdKeyShortcuts. + cmds := #($b #browseIt: $d #doIt: $i #inspectIt: $l #cancel: $m #implementorsOfIt: $n #sendersOfIt: $o #spawnIt: $p #printIt: $q #querySymbol: $s #save: ). - cmds := #($b #browseIt: $d #doIt: $i #inspectIt: $j #doAgainOnce: $l #cancel: $m #implementorsOfIt: $n #sendersOfIt: $o #spawnIt: $p #printIt: $q #querySymbol: $s #save: ). 1 to: cmds size by: 2 do: [ : i | cmdActions at: (cmds at: i) asciiValue + 1 put: (cmds at: i + 1)]. "Set up type-method argument hot keys, 1-4.." '1234' do: [ : eachKeyboardChar | cmdActions at: eachKeyboardChar asciiValue + 1 put: #typeMethodArgument: ]! Item was changed: Editor subclass: #TextEditor + instanceVariableNames: 'model paragraph markBlock pointBlock beginTypeInIndex emphasisHere lastParenLocation otherInterval oldInterval typeAhead history' + classVariableNames: 'AutoEnclose AutoIndent ChangeText FindText' - instanceVariableNames: 'model paragraph markBlock pointBlock beginTypeInIndex emphasisHere lastParenLocation otherInterval oldInterval typeAhead' - classVariableNames: 'AutoEnclose AutoIndent ChangeText FindText UndoInterval UndoMessage UndoParagraph UndoSelection Undone' poolDictionaries: '' category: 'Morphic-Text Support'! TextEditor class instanceVariableNames: 'cmdActions shiftCmdActions yellowButtonMenu shiftedYellowButtonMenu'! !TextEditor commentStamp: '' 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 added: + ----- Method: TextEditor class>>cleanUp (in category 'class initialization') ----- + cleanUp + + TextEditor allSubInstancesDo: [:editor | + editor history ifNotNil: [:h | + h current ifNotNil: [editor closeTypeIn]. + h reset]].! Item was changed: ----- Method: TextEditor class>>initialize (in category 'class initialization') ----- initialize "Initialize the keyboard shortcut maps and the shared buffers for copying text across views and managing again and undo." "TextEditor initialize" + FindText := ChangeText := Text new. - UndoSelection := FindText := ChangeText := Text new. - UndoMessage := Message selector: #halt. self initializeCmdKeyShortcuts. self initializeShiftCmdKeyShortcuts. self initializeYellowButtonMenu. self initializeShiftedYellowButtonMenu! Item was changed: ----- Method: TextEditor class>>initializeCmdKeyShortcuts (in category 'keyboard shortcut tables') ----- initializeCmdKeyShortcuts "Initialize the (unshifted) command-key (or alt-key) shortcut table." "NOTE: if you don't know what your keyboard generates, use Sensor kbdTest" "TextEditor initialize" | cmdMap cmds | cmdMap := Array new: 256 withAll: #noop:. "use temp in case of a crash" cmdMap at: 1 + 1 put: #cursorHome:. "home key" cmdMap at: 4 + 1 put: #cursorEnd:. "end key" cmdMap at: 8 + 1 put: #backspace:. "ctrl-H or delete key" cmdMap at: 11 + 1 put: #cursorPageUp:. "page up key" cmdMap at: 12 + 1 put: #cursorPageDown:. "page down key" cmdMap at: 13 + 1 put: #crWithIndent:. "cmd-Return" cmdMap at: 27 + 1 put: #offerMenuFromEsc:. "escape key" cmdMap at: 28 + 1 put: #cursorLeft:. "left arrow key" cmdMap at: 29 + 1 put: #cursorRight:. "right arrow key" cmdMap at: 30 + 1 put: #cursorUp:. "up arrow key" cmdMap at: 31 + 1 put: #cursorDown:. "down arrow key" cmdMap at: 32 + 1 put: #selectWord:. "space bar key" cmdMap at: 127 + 1 put: #forwardDelete:. "del key" '0123456789-=' do: [:char | cmdMap at: char asciiValue + 1 put: #changeEmphasis:]. '([<{|"''' do: [:char | cmdMap at: char asciiValue + 1 put: #enclose:]. + cmds := #($a #selectAll: $c #copySelection: $e #exchange: $f #find: $g #findAgain: $h #setSearchString: $j #doAgain: $k #offerFontMenu: $u #align: $v #paste: $w #backWord: $x #cut: $y #swapChars: $z #undo:). - cmds := #($a #selectAll: $c #copySelection: $e #exchange: $f #find: $g #findAgain: $h #setSearchString: $k #offerFontMenu: $u #align: $v #paste: $w #backWord: $x #cut: $y #swapChars: $z #undo:). 1 to: cmds size by: 2 do: [:i | cmdMap at: (cmds at: i) asciiValue + 1 put: (cmds at: i + 1)]. cmdActions := cmdMap! Item was changed: ----- Method: TextEditor class>>initializeShiftCmdKeyShortcuts (in category 'keyboard shortcut tables') ----- initializeShiftCmdKeyShortcuts "Initialize the shift-command-key (or control-key) shortcut table." "NOTE: if you don't know what your keyboard generates, use Sensor kbdTest" "wod 11/3/1998: Fix setting of cmdMap for shifted keys to actually use the capitalized versions of the letters. TPR 2/18/99: add the plain ascii values back in for those VMs that don't return the shifted values." "TextEditor initialize" | cmdMap cmds | "shift-command and control shortcuts" cmdMap := Array new: 256 withAll: #noop:. "use temp in case of a crash" cmdMap at: ( 1 + 1) put: #cursorHome:. "home key" cmdMap at: ( 4 + 1) put: #cursorEnd:. "end key" cmdMap at: ( 8 + 1) put: #forwardDelete:. "ctrl-H or delete key" cmdMap at: (11 + 1) put: #cursorPageUp:. "page up key" cmdMap at: (12 + 1) put: #cursorPageDown:. "page down key" cmdMap at: (13 + 1) put: #crWithIndent:. "ctrl-Return" cmdMap at: (27 + 1) put: #offerMenuFromEsc:. "escape key" cmdMap at: (28 + 1) put: #cursorLeft:. "left arrow key" cmdMap at: (29 + 1) put: #cursorRight:. "right arrow key" cmdMap at: (30 + 1) put: #cursorUp:. "up arrow key" cmdMap at: (31 + 1) put: #cursorDown:. "down arrow key" cmdMap at: (32 + 1) put: #selectWord:. "space bar key" cmdMap at: (45 + 1) put: #changeEmphasis:. "cmd-sh-minus" cmdMap at: (61 + 1) put: #changeEmphasis:. "cmd-sh-plus" cmdMap at: (127 + 1) put: #forwardDelete:. "del key" "On some keyboards, these characters require a shift" '([<{|"''9' do: [:char | cmdMap at: char asciiValue + 1 put: #enclose:]. "NB: sw 12/9/2001 commented out the idiosyncratic line just below, which was grabbing shift-esc in the text editor and hence which argued with the wish to have shift-esc be a universal gesture for escaping the local context and calling up the desktop menu." "cmdMap at: (27 + 1) put: #shiftEnclose:." "ctrl-[" "'""''(' do: [ :char | cmdMap at: (char asciiValue + 1) put: #enclose:]." cmds := #( $c compareToClipboard: $h cursorTopHome: + $j doAgainUpToEnd: - $j doAgainMany: $k changeStyle: $m selectCurrentTypeIn: + $s findAgain: - $s search: $u changeLfToCr: $x makeLowercase: $y makeUppercase: + $z redo: "makeCapitalized:" - $z makeCapitalized: ). 1 to: cmds size by: 2 do: [ :i | cmdMap at: ((cmds at: i) asciiValue + 1) put: (cmds at: i + 1). "plain keys" cmdMap at: ((cmds at: i) asciiValue - 32 + 1) put: (cmds at: i + 1). "shifted keys" cmdMap at: ((cmds at: i) asciiValue - 96 + 1) put: (cmds at: i + 1). "ctrl keys" ]. shiftCmdActions := cmdMap! Item was changed: ----- Method: TextEditor class>>initializeYellowButtonMenu (in category 'keyboard shortcut tables') ----- initializeYellowButtonMenu "Initialize the yellow button pop-up menu and corresponding messages." "TextEditor initialize" yellowButtonMenu := MenuMorph fromArray: { {'find...(f)' translated. #find}. + {'find again (g)' translated. #findAgain}. + {'find and replace ...' translated. #findReplace}. + {'do/replace again (j)' translated. #again}. - {'find again (g)' translated. #findAgain}. - {'set search string (h)' translated. #setSearchString}. #-. - {'do again (j)' translated. #again}. {'undo (z)' translated. #undo}. + {'redo (Z)' translated. #redo}. #-. {'copy (c)' translated. #copySelection}. {'cut (x)' translated. #cut}. {'paste (v)' translated. #paste}. {'paste...' translated. #pasteRecent}. #-. {'set font... (k)' translated. #offerFontMenu}. {'set style... (K)' translated. #changeStyle}. {'set alignment...' translated. #chooseAlignment}. " #-. {'more...' translated. #shiftedTextPaneMenuRequest}. " }! Item was added: + ----- Method: TextEditor class>>resetAllHistory (in category 'class initialization') ----- + resetAllHistory + + TextEditor allSubInstances do: [:editor | + editor history reset]. + + ! Item was changed: ----- Method: TextEditor>>addString: (in category 'typing support') ----- addString: aString + morph readOnly ifTrue: [^ self]. + + "If we modifying the text like backward or forward delete, we have to finish that operation." + (self isTypingIn and: [self history current type notNil]) + ifTrue: [self closeTypeIn]. + self typeAhead nextPutAll: aString.! Item was changed: ----- Method: TextEditor>>again (in category 'menu messages') ----- again + "Do the same replace command again. Unlike #findReplaceAgain, this looks up the editor's own command history and uses the previous command." + + self history hasPrevious ifFalse: [morph flash. ^ self]. + + self history previous hasReplacedSomething + ifFalse: [morph flash. ^ self] + ifTrue: [ + "Reset shared find/replace state." + FindText := self history previous contentsBefore. + ChangeText := self history previous contentsAfter. + + self selectAt: self stopIndex. + self findReplaceAgain].! - "Text substitution. If the left shift key is down, the substitution is made - throughout the entire Paragraph. Otherwise, only the next possible - substitution is made. - Undoer & Redoer: #undoAgain:andReselect:typedKey:." - - "If last command was also 'again', use same keys as before" - self againOrSame: (UndoMessage sends: #undoAgain:andReselect:typedKey:)! Item was removed: - ----- Method: TextEditor>>againOnce: (in category 'private') ----- - againOnce: indices - "Find the next occurrence of FindText. If none, answer false. - Append the start index of the occurrence to the stream indices, and, if - ChangeText is not the same object as FindText, replace the occurrence by it. - Note that the search is case-sensitive for replacements, otherwise not." - - | where | - where := self text - findString: FindText - startingAt: self stopIndex - caseSensitive: ((ChangeText ~~ FindText) or: [Preferences caseSensitiveFinds]). - where = 0 ifTrue: [^ false]. - - self deselect; selectInvisiblyFrom: where to: where + FindText size - 1. "Repeat it here. Senders beware: only one of these should last" - - ChangeText ~~ FindText ifTrue: [ self zapSelectionWith: ChangeText ]. - indices nextPut: where. - ^ true! Item was removed: - ----- Method: TextEditor>>againOrSame: (in category 'private') ----- - againOrSame: useOldKeys - "Subroutine of search: and again. If useOldKeys, use same FindText and ChangeText as before. - 1/26/96 sw: real worked moved to againOrSame:many:" - - self againOrSame: useOldKeys many: false. - - (morph respondsTo: #editView) - ifTrue: [morph editView selectionInterval: self selectionInterval]! Item was removed: - ----- Method: TextEditor>>againOrSame:many: (in category 'private') ----- - againOrSame: useOldKeys many: many - "Subroutine of search: and again. If useOldKeys, use same FindText and ChangeText as before. If many is true, do it repeatedly. Created 1/26/96 sw by adding the many argument to #againOrSame." - - | home indices wasTypedKey | - - home := self selectionInterval. "what was selected when 'again' was invoked" - - "If new keys are to be picked..." - useOldKeys ifFalse: [ "Choose as FindText..." - FindText := UndoSelection. "... the last thing replaced." - "If the last command was in another paragraph, ChangeText is set..." - paragraph == UndoParagraph ifTrue: [ "... else set it now as follows." - UndoInterval ~= home ifTrue: [self selectInterval: UndoInterval]. "blink" - ChangeText := ((UndoMessage sends: #undoCutCopy:) and: [self hasSelection]) - ifTrue: [FindText] "== objects signal no model-locking by 'undo copy'" - ifFalse: [self selection]]]. "otherwise, change text is last-replaced text" - - (wasTypedKey := FindText size = 0) - ifTrue: [ "just inserted at a caret" - home := self selectionInterval. - self replaceSelectionWith: self nullText. "delete search key..." - FindText := ChangeText] "... and search for it, without replacing" - ifFalse: [ "Show where the search will start" - home last = self selectionInterval last ifFalse: [ - self selectInterval: home]]. - - "Find and Change, recording start indices in the array" - indices := WriteStream on: (Array new: 20). "an array to store change locs" - [(self againOnce: indices) & many] whileTrue. "<-- this does the work" - "Last find was also stored in markBlock / pointBlock" - indices isEmpty ifTrue: [ "none found" - self flash. - wasTypedKey ifFalse: [^self]]. - - (many | wasTypedKey) ifFalse: [ "after undo, select this replacement" - home := self startIndex to: - self startIndex + UndoSelection size - 1]. - - self undoer: #undoAgain:andReselect:typedKey: with: indices contents with: home with: wasTypedKey! Item was added: + ----- Method: TextEditor>>againUpToEnd (in category 'menu messages') ----- + againUpToEnd + "Find and replace until the end." + + | interval pivot isFirst last | + self history hasPrevious ifFalse: [morph flash. ^ self]. + + pivot := self history previous. + pivot hasReplacedSomething ifFalse: [morph flash. ^ self]. + + "Reset shared find/replace state." + FindText := pivot contentsBefore. + ChangeText := pivot contentsAfter. + + isFirst := true. + last := pivot. + [self selectionInterval ~= interval] whileTrue: [ + last ~= pivot ifTrue: [ + last + isCompositeUndo: isFirst not; + isCompositeRedo: true. + isFirst := false]. + last := self history previous. + interval := self selectionInterval. + + self selectAt: self stopIndex. "No selection to make find work." + self findReplaceAgain]. + + last isCompositeRedo: false.! Item was changed: ----- Method: TextEditor>>autoEncloseFor: (in category 'typing support') ----- autoEncloseFor: typedChar "Answer whether typeChar was handled by auto-enclosure. Caller should call normalCharacter if not." | openers closers | openers := '([{'. closers := ')]}'. (closers includes: typedChar) ifTrue: [ | pos | self blinkPrevParen: typedChar. ((pos := self indexOfNextNonwhitespaceCharacter) notNil and: [ (paragraph string at: pos) = typedChar ]) ifTrue: [ self moveCursor: [ : position | position + pos - pointBlock stringIndex + 1 ] forward: true select: false. ^ true ] ifFalse: [ ^ false ] ]. + (openers includes: typedChar) ifTrue: [ + self + openTypeIn; + addString: typedChar asString; + addString: (closers at: (openers indexOf: typedChar)) asString ; + insertAndCloseTypeIn ; - (self class autoEnclose and: [ openers includes: typedChar ]) ifTrue: - [ self - addString: (closers at: (openers indexOf: typedChar)) asString ; - insertTypeAhead ; moveCursor: [ : position | position - 1 ] forward: false select: false. + ^ true ]. - ^ false ]. ^ false! Item was changed: ----- Method: TextEditor>>backTo: (in category 'typing support') ----- backTo: startIndex + "During typing, backspace to startIndex. If there already is a selection, just delete that selection. Otherwise, check if we did something else than backward-deletion and start a new command if so." - "During typing, backspace to startIndex. Deleted characters fall into three - clusters, from left to right in the text: (1) preexisting characters that were - backed over; (2) newly typed characters that were backed over; - (3) preexisting characters that - were highlighted before typing began. If typing has not yet been opened, - open it and watch for the first and third cluster. If typing has been opened, - watch for the first and second cluster. Save characters from the first and third - cluster in UndoSelection. Tally characters from the first cluster in UndoMessage's parameter. - Delete all the clusters. Do not alter Undoer or UndoInterval (except via - openTypeIn). The code is shorter than the comment." - | saveLimit newBackovers | morph readOnly ifTrue: [^ self]. + + self hasSelection ifTrue: [ + "Add checkpoint in undo history." + self replaceSelectionWith: self nullText. + ^ true]. + + startIndex > self text size ifTrue: [^ false]. + + self selectInvisiblyFrom: startIndex to: self stopIndex-1. + + self isTypingIn ifTrue: [ + self history current type = #backward + ifFalse: [self closeTypeIn] + ifTrue: [ + "Accumulate all deleted characters in current undo command." + self history current contentsBefore replaceFrom: 1 to: 0 with: self selection. + self history current intervalBefore in: [:i | + self history current intervalBefore: (startIndex to: i last)]]]. + + self openTypeInFor: #backward. - saveLimit := beginTypeInIndex - ifNil: [self openTypeIn. UndoSelection := self nullText. self stopIndex]. - markBlock := paragraph characterBlockForIndex: startIndex. - startIndex < saveLimit ifTrue: [ - newBackovers := beginTypeInIndex - startIndex. - beginTypeInIndex := self startIndex. - UndoSelection replaceFrom: 1 to: 0 with: - (self text copyFrom: startIndex to: saveLimit - 1). - UndoMessage arguments size > 0 ifTrue: [ - UndoMessage argument: (UndoMessage argument ifNil: [1]) + newBackovers]]. self zapSelectionWith: self nullText. + + ^ false! - self unselect! Item was changed: ----- Method: TextEditor>>changeParagraph: (in category 'initialize-release') ----- changeParagraph: aParagraph "Install aParagraph as the one to be edited by the receiver." - UndoParagraph == paragraph ifTrue: [UndoParagraph := nil]. paragraph := aParagraph. self resetState! Item was changed: ----- Method: TextEditor>>changeSelectionFontTo: (in category 'attributes') ----- changeSelectionFontTo: aFont | attr | aFont ifNil: [ ^ self ]. attr := TextFontReference toFont: aFont. + + self openTypeIn. + paragraph text addAttribute: attr from: self startIndex to: (self hasSelection ifTrue: [ self stopIndex - 1 min: paragraph text size ] ifFalse: [ paragraph text size ]). + + self closeTypeIn. + paragraph composeAll. self recomputeSelection. morph changed! Item was changed: ----- Method: TextEditor>>closeTypeIn (in category 'typing support') ----- closeTypeIn "See comment in openTypeIn. It is important to call closeTypeIn before executing any non-typing key, making a new selection, etc. It is called automatically for + menu commands." - menu commands. - Undoer & Redoer: undoAndReselect:redoAndReselect:." | begin stop | beginTypeInIndex ifNotNil: [ + begin := beginTypeInIndex. + stop := self stopIndex. + + self history current + contentsAfter: (stop <= begin + ifTrue: [self nullText] + ifFalse: [paragraph text copyFrom: begin to: stop-1]); + intervalAfter: (stop to: stop-1); + intervalBetween: (stop < begin + ifTrue: [stop to: stop-1] + ifFalse: [begin to: stop-1]); + messageToUndo: (Message selector: #undoAndReselect); + messageToRedo: (Message selector: #redoAndReselect). + + self history finishRemember. + - (UndoMessage sends: #noUndoer) ifTrue: [ "should always be true, but just in case..." - begin := beginTypeInIndex. - stop := self stopIndex. - self undoer: #undoAndReselect:redoAndReselect: - with: (begin + UndoMessage argument to: begin + UndoSelection size - 1) - with: (stop to: stop - 1). - UndoInterval := begin to: stop - 1]. beginTypeInIndex := nil]! Item was removed: - ----- Method: TextEditor>>completeSymbol:lastOffering: (in category 'private') ----- - completeSymbol: hintText lastOffering: selectorOrNil - "Invoked by Ctrl-q when there is only a caret. - Do selector-completion, i.e., try to replace the preceding identifier by a - selector that begins with those characters & has as many keywords as possible. - Leave two spaces after each colon (only one after the last) as space for - arguments. Put the caret after the space after the first keyword. If the - user types Ctrl-q again immediately, choose a different selector. - Undoer: #undoQuery:lastOffering:; Redoer: itself. - If redoing, just redisplay the last offering, selector[OrNil]." - - | firstTime input prior caret newStart sym kwds outStream | - firstTime := self isRedoing - ifTrue: [prior := sym := selectorOrNil. true] - ifFalse: [hintText isNil]. - firstTime - ifTrue: "Initial Ctrl-q (or redo)" - [caret := self startIndex. - self selectPrecedingIdentifier. - input := self selection] - ifFalse: "Repeated Ctrl-q" - [caret := UndoInterval first + hintText size. - self selectInvisiblyFrom: UndoInterval first to: UndoInterval last. - input := hintText. - prior := selectorOrNil]. - (input size ~= 0 and: [sym ~~ nil or: - [(sym := Symbol thatStarts: input string skipping: prior) ~~ nil]]) - ifTrue: "found something to offer" - [newStart := self startIndex. - outStream := WriteStream on: (String new: 2 * sym size). - 1 to: (kwds := sym keywords) size do: - [:i | - outStream nextPutAll: (kwds at: i). - i = 1 ifTrue: [caret := newStart + outStream contents size + 1]. - outStream nextPutAll: - (i < kwds size ifTrue: [' '] ifFalse: [' '])]. - UndoSelection := input. - self deselect; zapSelectionWith: outStream contents asText. - self undoer: #undoQuery:lastOffering: with: input with: sym] - ifFalse: "no more matches" - [firstTime ifFalse: "restore original text & set up for a redo" - [UndoSelection := self selection. - self deselect; zapSelectionWith: input. - self undoer: #completeSymbol:lastOffering: with: input with: prior. - Undone := true]. - morph flash]. - self selectAt: caret! Item was changed: ----- Method: TextEditor>>copySelection (in category 'menu messages') ----- copySelection + "Copy the current selection and store it in the paste buffer, unless a caret." - "Copy the current selection and store it in the paste buffer, unless a caret. Undoer & Redoer: undoCutCopy" self lineSelectAndEmptyCheck: [^ self]. + self clipboardTextPut: self selection.! - - "Simulate 'substitute: self selection' without locking the controller" - UndoSelection := self selection. - self undoer: #undoCutCopy: with: self clipboardText. - UndoInterval := self selectionInterval. - self clipboardTextPut: UndoSelection! Item was changed: ----- Method: TextEditor>>cut (in category 'menu messages') ----- cut "Cut out the current selection and redisplay the paragraph if necessary. Undoer & Redoer: undoCutCopy:" self lineSelectAndEmptyCheck: [^ self]. + self clipboardTextPut: self selection. + self replaceSelectionWith: self nullText.! - self replaceSelectionWith: self nullText. - self undoer: #undoCutCopy: with: self clipboardText. - self clipboardTextPut: UndoSelection! 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." + - "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." + (Character separators includes: typedChar) + ifTrue: [self closeTypeIn]. + + "Handle one-line input fields." + (typedChar == Character cr and: [morph acceptOnCR]) + ifTrue: [^ true]. + + "Clear highlight for last opened parenthesis." - ((typedChar := aKeyboardEvent keyCharacter) == Character cr and: [ morph acceptOnCR ]) ifTrue: - [ self closeTypeIn. - ^ true ]. 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 and: [self hasSelection]) ifTrue: [ + aKeyboardEvent shiftPressed + ifTrue: [self outdent: aKeyboardEvent] + ifFalse: [self indent: aKeyboardEvent]. + ^ true]. + + honorCommandKeys := Preferences cmdKeysInText. + + (honorCommandKeys and: [typedChar == Character enter]) + ifTrue: [^ self dispatchOnEnterWith: aKeyboardEvent]. + - aKeyboardEvent keyValue = 13 ifTrue: - [ aKeyboardEvent controlKeyPressed ifTrue: [ ^ self normalCharacter: aKeyboardEvent ]. - aKeyboardEvent shiftPressed ifTrue: [ ^ self lf: aKeyboardEvent ]. - aKeyboardEvent commandKeyPressed ifTrue: [ ^ self crlf: aKeyboardEvent ]. - ^ self crWithIndent: aKeyboardEvent ]. - (aKeyboardEvent keyCharacter = Character tab and: [ self selection notEmpty ]) ifTrue: - [ aKeyboardEvent shiftPressed - ifTrue: [ self outdent: aKeyboardEvent ] - ifFalse: [ self indent: aKeyboardEvent ]. - ^ true ]. - ((honorCommandKeys := Preferences cmdKeysInText) 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]]. + - ((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]]. + - ((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." - (honorCommandKeys and: [ aKeyboardEvent controlKeyPressed ]) ifTrue: [ ^ self - perform: (self class shiftCmdActions at: aKeyboardEvent keyValue + 1) - with: aKeyboardEvent ]. self class autoEnclose + ifTrue: [((self hasSelection and: [self enclose: aKeyboardEvent]) + or: [self autoEncloseFor: typedChar]) + ifTrue: [^ true]]. + + self normalCharacter: aKeyboardEvent. - ifTrue: - [ (self autoEncloseFor: typedChar) ifFalse: [ self normalCharacter: aKeyboardEvent ] ] - ifFalse: [ self normalCharacter: aKeyboardEvent ]. ^ false! Item was added: + ----- Method: TextEditor>>doAgain: (in category 'typing/selecting keys') ----- + doAgain: aKeyboardEvent + "Do the previous thing again once. 1/26/96 sw" + + self insertAndCloseTypeIn. + self again. + ^ true! Item was removed: - ----- Method: TextEditor>>doAgainMany: (in category 'typing/selecting keys') ----- - doAgainMany: aKeyboardEvent - "Do the previous thing again repeatedly. 1/26/96 sw" - - self insertAndCloseTypeIn. - self againOrSame: (UndoMessage sends: #undoAgain:andReselect:typedKey:) many: true. - ^ true! Item was removed: - ----- Method: TextEditor>>doAgainOnce: (in category 'typing/selecting keys') ----- - doAgainOnce: aKeyboardEvent - "Do the previous thing again once. 1/26/96 sw" - - self insertAndCloseTypeIn. - self again. - ^ true! Item was added: + ----- Method: TextEditor>>doAgainUpToEnd: (in category 'typing/selecting keys') ----- + doAgainUpToEnd: aKeyboardEvent + "Do the previous thing again once. 1/26/96 sw" + + self insertAndCloseTypeIn. + self againUpToEnd. + ^ true! Item was removed: - ----- Method: TextEditor>>doneTyping (in category 'typing support') ----- - doneTyping - beginTypeInIndex := nil! 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 which t | character := aKeyboardEvent shiftPressed ifTrue: ['{}|"<>' at: ('[]\'',.' indexOf: aKeyboardEvent keyCharacter) ifAbsent: [aKeyboardEvent keyCharacter]] ifFalse: [aKeyboardEvent keyCharacter]. self closeTypeIn. startIndex := self startIndex. stopIndex := self stopIndex. oldSelection := self selection. + which := '([<{|"''9' indexOf: character ifAbsent: [ ^false ]. - which := '([<{|"''9' indexOf: character ifAbsent: [ ^true ]. "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! Item was changed: ----- Method: TextEditor>>exchange (in category 'menu messages') ----- exchange "See comment in exchangeWith:" + self exchangeWith: otherInterval.! - self exchangeWith: otherInterval! Item was changed: ----- Method: TextEditor>>exchangeWith: (in category 'private') ----- exchangeWith: prior "If the prior selection is non-overlapping and legal, exchange the text of it with the current selection and leave the currently selected text selected in the location of the prior selection (or leave a caret after a non-caret if it was exchanged with a caret). If both selections are carets, flash & do nothing. + Don't affect the paste buffer." - Don't affect the paste buffer. Undoer: itself; Redoer: Undoer." | start stop before selection priorSelection delta altInterval | start := self startIndex. stop := self stopIndex - 1. + + (((prior first <= prior last) and: [start <= stop]) + and: [self isDisjointFrom: prior]) + ifFalse: [morph flash. ^ self]. + + before := prior last < start. + selection := self selection. + priorSelection := paragraph text copyFrom: prior first to: prior last. + delta := before ifTrue: [0] ifFalse: [priorSelection size - selection size]. + + "Create first undo command." + self replaceSelectionWith: priorSelection. + self history previous isCompositeRedo: true. + + self selectInvisiblyFrom: prior first + delta to: prior last + delta. + delta := before ifTrue: [stop - prior last] ifFalse: [start - prior first]. - ((prior first <= prior last) | (start <= stop) "Something to exchange" and: - [self isDisjointFrom: prior]) - ifTrue: - [before := prior last < start. - selection := self selection. - priorSelection := paragraph text copyFrom: prior first to: prior last. + "Create second undo command." + self replaceSelectionWith: selection. + self history previous isCompositeUndo: true. - delta := before ifTrue: [0] ifFalse: [priorSelection size - selection size]. - self zapSelectionWith: priorSelection. - self selectFrom: prior first + delta to: prior last + delta. + altInterval := prior first + delta to: prior last + delta. + + "If one was a caret, make it otherInterval & leave the caret after the other" + prior first > prior last ifTrue: [self selectAt: prior last + 1]. + otherInterval := start > stop + ifTrue: [self selectAt: altInterval last + 1. prior] + ifFalse: [altInterval]! - delta := before ifTrue: [stop - prior last] ifFalse: [start - prior first]. - self zapSelectionWith: selection. - altInterval := prior first + delta to: prior last + delta. - self undoer: #exchangeWith: with: altInterval. - "If one was a caret, make it otherInterval & leave the caret after the other" - prior first > prior last ifTrue: [self selectAt: UndoInterval last + 1]. - otherInterval := start > stop - ifTrue: [self selectAt: altInterval last + 1. UndoInterval] - ifFalse: [altInterval]] - ifFalse: - [morph flash]! Item was changed: ----- Method: TextEditor>>find (in category 'menu messages') ----- find "Prompt the user for a string to search for, and search the receiver from the current selection onward for it. 1/26/96 sw" + (UIManager default request: 'Find what to select? ' initialAnswer: (self selection ifEmpty: [FindText])) + ifEmpty: [^ self] + ifNotEmpty: [:reply | + self setSearch: reply. + self findAgain].! - | reply | - reply := UIManager default request: 'Find what? ' initialAnswer: ''. - reply size = 0 ifTrue: [ - ^ self]. - self setSearch: reply. - ChangeText := FindText. "Implies no replacement to againOnce: method" - self againOrSame: true. - - morph installEditorToReplace: self! Item was changed: ----- Method: TextEditor>>findAgain (in category 'menu messages') ----- findAgain - "Find the text-to-find again. 1/24/96 sw" + | where | + where := self text + findString: FindText + startingAt: self stopIndex + caseSensitive: Preferences caseSensitiveFinds. + + where = 0 ifTrue: [^ false]. + + self selectFrom: where to: where + FindText size - 1. + + ^ true! - self againOrSame: true! Item was changed: ----- Method: TextEditor>>findAgain: (in category 'typing/selecting keys') ----- findAgain: aKeyboardEvent "Find the desired text again. 1/24/96 sw" self insertAndCloseTypeIn. + self findAgain. - self againOrSame: true many: aKeyboardEvent shiftPressed. ^ true! Item was added: + ----- Method: TextEditor>>findReplace (in category 'menu messages') ----- + findReplace + + (UIManager default request: 'Find what to replace?' initialAnswer: (self selection ifEmpty: [FindText])) + ifEmpty: [^ self] + ifNotEmpty: [:find | + (UIManager default request: ('Replace ''{1}'' with?' format: {find}) initialAnswer: (ChangeText ifEmpty: [find])) + ifEmpty: [^ self] + ifNotEmpty: [:replace | + FindText := find. + ChangeText := replace. + self findReplaceAgain]]! Item was added: + ----- Method: TextEditor>>findReplace: (in category 'typing/selecting keys') ----- + findReplace: aKeyboardEvent + + self insertAndCloseTypeIn. + self findReplace. + ^ true! Item was added: + ----- Method: TextEditor>>findReplaceAgain (in category 'menu messages') ----- + findReplaceAgain + + | where | + self hasSelection ifTrue: [ + "Search from the beginning of the current selection. Supports a nice combination with regular find feature." + self selectInvisiblyFrom: self startIndex to: self startIndex - 1]. + + where := self text + findString: FindText + startingAt: self stopIndex + caseSensitive: Preferences caseSensitiveFinds. + + where = 0 ifTrue: [^ false]. + + self selectInvisiblyFrom: where to: where + FindText size - 1. + self replaceSelectionWith: ChangeText. + + ^ true! Item was added: + ----- Method: TextEditor>>findReplaceAgain: (in category 'typing/selecting keys') ----- + findReplaceAgain: aKeyboardEvent + + self insertAndCloseTypeIn. + self findReplaceAgain. + ^ true! Item was changed: ----- Method: TextEditor>>forwardDelete: (in category 'typing/selecting keys') ----- forwardDelete: aKeyboardEvent "Delete forward over the next character. Make Undo work on the whole type-in, not just the one char. wod 11/3/1998: If there was a selection use #zapSelectionWith: rather than #backspace: which was 'one off' in deleting the selection. Handling of things like undo or typeIn area were not fully considered." + + | startIndex stopIndex | + morph readOnly ifTrue: [^ self]. + - | startIndex usel upara uinterval ind stopIndex | - startIndex := self markIndex. - startIndex > self text size ifTrue: [ - ^ false]. self hasSelection ifTrue: [ + "Create checkpoint in history." + self replaceSelectionWith: self nullText. + ^ true]. + + startIndex := self markIndex. + startIndex > self text size ifTrue: [^ false]. + - "there was a selection" - self zapSelectionWith: self nullText. - ^ false]. - "Null selection - do the delete forward" - beginTypeInIndex ifNil: [ "no previous typing. openTypeIn" - self openTypeIn. UndoSelection := self nullText]. - uinterval := UndoInterval copy. - upara := UndoParagraph copy. stopIndex := startIndex. + + "Forward delete next word" + self flag: #consistency. "mt: We might want to implemented it like #backspace: and #backWord:." + aKeyboardEvent shiftPressed - (aKeyboardEvent keyValue = 127 and: [ aKeyboardEvent shiftPressed ]) ifTrue: [stopIndex := (self firstWordBoundaryAfter: stopIndex) - 1]. + + self selectInvisiblyFrom: startIndex to: stopIndex. + + self isTypingIn ifTrue: [ + self history current type = #forwardDelete + ifFalse: [self closeTypeIn] + ifTrue: [ + "Append next characters that will be removed." + self history current contentsBefore append: self selection. + self history current intervalBefore in: [:i | + self history current intervalBefore: (i first to: i last + (stopIndex - startIndex + 1))]]]. + + self openTypeInFor: #forwardDelete. + self zapSelectionWith: self nullText. + + ^ false! - self selectFrom: startIndex to: stopIndex. - self replaceSelectionWith: self nullText. - self selectFrom: startIndex to: startIndex-1. - UndoParagraph := upara. UndoInterval := uinterval. - UndoMessage selector == #noUndoer ifTrue: [ - (UndoSelection isText) ifTrue: [ - usel := UndoSelection. - ind := startIndex. "UndoInterval startIndex" - usel replaceFrom: usel size + 1 to: usel size with: - (UndoParagraph text copyFrom: ind to: ind). - UndoParagraph text replaceFrom: ind to: ind with: self nullText]]. - ^false! Item was added: + ----- Method: TextEditor>>history (in category 'accessing') ----- + history + ^ history! Item was added: + ----- Method: TextEditor>>history: (in category 'accessing') ----- + history: commandHistory + history := commandHistory.! Item was changed: ----- Method: TextEditor>>insertAndSelect:at: (in category 'new selection') ----- insertAndSelect: aString at: anInteger + self closeTypeIn. + + self selectInvisiblyFrom: anInteger to: anInteger - 1. + self openTypeIn. + + self + replace: self selectionInterval + with: (Text string: (' ', aString) attributes: emphasisHere) + and: [self]. + + self closeTypeIn.! - self replace: (anInteger to: anInteger - 1) - with: (Text string: (' ' , aString) - attributes: emphasisHere) - and: [self ]! Item was removed: - ----- Method: TextEditor>>isDoing (in category 'undo support') ----- - isDoing - "Call from a doer/undoer/redoer any time to see which it is." - - ^(self isUndoing | self isRedoing) not! Item was removed: - ----- Method: TextEditor>>isRedoing (in category 'undo support') ----- - isRedoing - "Call from a doer/undoer/redoer any time to see which it is." - - ^UndoParagraph == #redoing! Item was added: + ----- Method: TextEditor>>isTypingIn (in category 'typing support') ----- + isTypingIn + ^ beginTypeInIndex notNil! Item was removed: - ----- Method: TextEditor>>isUndoing (in category 'undo support') ----- - isUndoing - "Call from a doer/undoer/redoer any time to see which it is." - - ^UndoParagraph == #undoing! Item was changed: ----- Method: TextEditor>>keyStroke: (in category 'events') ----- keyStroke: anEvent self resetTypeAhead; deselect. + (self dispatchOnKeyboardEvent: anEvent) + ifTrue: [ + self closeTypeIn. - ifTrue: - [self doneTyping. self storeSelectionInParagraph. ^self]. + self openTypeIn. - self hasSelection ifTrue: [ "save highlighted characters" - UndoSelection := self selection]. self + zapSelectionWith: self typeAhead contents; + resetTypeAhead; + unselect; + storeSelectionInParagraph.! - zapSelectionWith: self typeAhead contents ; - resetTypeAhead ; - unselect ; - storeSelectionInParagraph! Item was changed: ----- Method: TextEditor>>makeCapitalized: (in category 'editing keys') ----- makeCapitalized: aKeyboardEvent + "Force the current selection to uppercase." - "Force the current selection to uppercase. Triggered by Cmd-X." | prev | prev := $-. "not a letter" self replaceSelectionWith: (self selection string collect: [:c | prev := prev isLetter ifTrue: [c asLowercase] ifFalse: [c asUppercase]]). ^ true! Item was removed: - ----- Method: TextEditor>>noUndoer (in category 'undo support') ----- - noUndoer - "The Undoer to use when the command can not be undone. Checked for - specially by readKeyboard." - - UndoMessage := Message selector: #noUndoer! Item was changed: ----- Method: TextEditor>>openTypeIn (in category 'typing support') ----- openTypeIn - "Set up UndoSelection to null text (to be added to by readKeyboard and backTo:), - beginTypeInBlock to keep track of the leftmost backspace, and UndoParameter to tally - how many deleted characters were backspaced over rather than 'cut'. - You can't undo typing until after closeTypeIn." + self openTypeInFor: nil.! - beginTypeInIndex ifNil: [ - UndoSelection := self nullText. - self undoer: #noUndoer with: 0. - beginTypeInIndex := self startIndex]! Item was added: + ----- Method: TextEditor>>openTypeInFor: (in category 'typing support') ----- + openTypeInFor: editType + "Set up UndoSelection to null text (to be added to by readKeyboard and backTo:), + beginTypeInBlock to keep track of the leftmost backspace, and UndoParameter to tally + how many deleted characters were backspaced over rather than 'cut'. + You can't undo typing until after closeTypeIn." + + beginTypeInIndex ifNil: [ + beginTypeInIndex := self startIndex. + self history beginRemember: (TextEditorCommand new + type: editType; + contentsBefore: (self hasSelection ifTrue: [self selection] ifFalse: [self nullText]); + intervalBefore: (beginTypeInIndex to: self stopIndex-1) + yourself)].! Item was added: + ----- Method: TextEditor>>paste (in category 'menu messages') ----- + paste + "Update command history." + + self openTypeIn. + super paste. + self closeTypeIn.! Item was changed: ----- Method: TextEditor>>querySymbol: (in category 'typing/selecting keys') ----- querySymbol: aKeyboardEvent + "Invoked by Ctrl-q to query the Symbol table and display alternate symbols." - "Invoked by Ctrl-q to query the Symbol table and display alternate symbols. - See comment in completeSymbol:lastOffering: for details." + | hintText lastOffering offering | + self isTypingIn + ifFalse: [ + self selectPrecedingIdentifier. + hintText := self selection string] + ifTrue: [ + self history current type = #query + ifFalse: [ + self closeTypeIn. + self selectPrecedingIdentifier. + hintText := self selection string] + ifTrue: [ + self history hasPrevious + ifFalse: [morph flash. self closeTypeIn. ^ true]. + + hintText := self history previous contentsAfter string. + hintText := hintText copyFrom: (hintText + lastIndexOfAnyOf: Character separators, #($#) + startingAt: hintText size ifAbsent: [0])+1 to: hintText size. + + self selectPrecedingIdentifier. + lastOffering := self selection string]]. + + offering := '-'. + [offering allSatisfy: [:ea | ea tokenish]] whileFalse: [ + offering := (Symbol thatStarts: hintText skipping: lastOffering) ifNil: [hintText]. + lastOffering := offering]. + + self openTypeInFor: #query. + self typeAhead nextPutAll: offering. + + ^ false! - self insertAndCloseTypeIn. - self hasCaret - ifTrue: "Ctrl-q typed when a caret" - [self perform: #completeSymbol:lastOffering: withArguments: - ((UndoParagraph == paragraph and: [UndoMessage sends: #undoQuery:lastOffering:]) - ifTrue: [UndoMessage arguments] "repeated Ctrl-q" - ifFalse: [Array with: nil with: nil])] "initial Ctrl-q" - ifFalse: "Ctrl-q typed when statements were highlighted" - [morph flash]. - ^true! Item was added: + ----- Method: TextEditor>>redo (in category 'menu messages') ----- + redo + + self closeTypeIn. + self history redoIn: self.! Item was added: + ----- Method: TextEditor>>redo: (in category 'editing keys') ----- + redo: aKeyboardEvent + "Redo the last edit." + + self insertAndCloseTypeIn. + self redo. + ^true! Item was added: + ----- Method: TextEditor>>redoAndReselect (in category 'undoers') ----- + redoAndReselect + + self + replace: self history current intervalBefore + with: self history current contentsAfter + and: [self selectInterval: self history current intervalAfter].! Item was added: + ----- Method: TextEditor>>replace:with: (in category 'accessing') ----- + replace: interval with: newText + + self + replace: interval + with: newText + and: ["Do nothing."].! Item was changed: ----- Method: TextEditor>>replace:with:and: (in category 'accessing') ----- replace: xoldInterval with: newText and: selectingBlock "Replace the text in oldInterval with newText and execute selectingBlock to establish the new selection. Create an undoAndReselect:redoAndReselect: undoer to allow perfect undoing." | undoInterval | undoInterval := self selectionInterval. undoInterval = xoldInterval ifFalse: [self selectInterval: xoldInterval]. + - UndoSelection := self selection. self zapSelectionWith: newText. selectingBlock value. + + otherInterval := self selectionInterval.! - otherInterval := self selectionInterval. - self undoer: #undoAndReselect:redoAndReselect: with: undoInterval with: otherInterval! Item was changed: ----- Method: TextEditor>>replaceSelectionWith: (in category 'accessing') ----- replaceSelectionWith: aText "Remember the selection text in UndoSelection. Deselect, and replace the selection text by aText. Remember the resulting selectionInterval in UndoInterval and PriorInterval. Set up undo to use UndoReplace." + self openTypeIn. - beginTypeInIndex ifNotNil: [^self zapSelectionWith: aText]. "called from old code" - UndoSelection := self selection. self zapSelectionWith: aText. + self closeTypeIn.! - self undoer: #undoReplace! Item was changed: ----- Method: TextEditor>>resetState (in category 'initialize-release') ----- resetState "Establish the initial conditions for editing the paragraph: place caret before first character, set the emphasis to that of the first character, and save the paragraph for purposes of canceling." pointBlock := markBlock := paragraph defaultCharacterBlock. beginTypeInIndex := nil. + otherInterval := 1 to: 0. - UndoInterval := otherInterval := 1 to: 0. self setEmphasisHere. selectionShowing := false! Item was removed: - ----- Method: TextEditor>>search: (in category 'typing/selecting keys') ----- - search: aKeyboardEvent - "Invoked by Ctrl-S. Same as 'again', but always uses the existing FindText - and ChangeText regardless of the last edit." - - self insertAndCloseTypeIn. - self - againOrSame: true "true means use same keys" - many: aKeyboardEvent shiftPressed. - ^true! Item was changed: ----- Method: TextEditor>>selectCurrentTypeIn: (in category 'nonediting/nontyping keys') ----- selectCurrentTypeIn: aKeyboardEvent "Select what would be replaced by an undo (e.g., the last typeIn)." | prior | + self flag: #buggy. self insertAndCloseTypeIn. prior := otherInterval. self insertAndCloseTypeIn. - self selectInterval: UndoInterval. otherInterval := prior. ^ true! Item was changed: ----- Method: TextEditor>>setSearch: (in category 'accessing') ----- setSearch: aStringOrText - "Set the FindText and ChangeText to seek aString; except if already seeking aString, leave ChangeText alone so again will repeat last replacement." + FindText := aStringOrText. + ChangeText := self nullText.! - FindText = aStringOrText - ifFalse: [FindText := ChangeText := aStringOrText]! Item was changed: ----- Method: TextEditor>>stateArray (in category 'initialize-release') ----- stateArray ^ {ChangeText. FindText. + history ifNil: [TextEditorCommandHistory new]. "Convert old instances" - UndoInterval. - UndoMessage. - UndoParagraph. - UndoSelection. - Undone. self selectionInterval. self startOfTyping. emphasisHere}! Item was changed: ----- Method: TextEditor>>stateArrayPut: (in category 'initialize-release') ----- stateArrayPut: stateArray | sel | ChangeText := stateArray at: 1. FindText := stateArray at: 2. + history := stateArray at: 3. + sel := stateArray at: 4. - UndoInterval := stateArray at: 3. - UndoMessage := stateArray at: 4. - UndoParagraph := stateArray at: 5. - UndoSelection := stateArray at: 6. - Undone := stateArray at: 7. - sel := stateArray at: 8. self selectFrom: sel first to: sel last. + beginTypeInIndex := stateArray at: 5. + emphasisHere := stateArray at: 6! - beginTypeInIndex := stateArray at: 9. - emphasisHere := stateArray at: 10! Item was changed: ----- Method: TextEditor>>undo (in category 'menu messages') ----- undo - "Reset the state of the paragraph prior to the previous edit. - If another ParagraphEditor instance did that edit, UndoInterval is invalid; - just recover the contents of the undo-buffer at the start of the paragraph." self closeTypeIn. + self history undoIn: self. + self history hasPrevious ifFalse: [morph hasUnacceptedEdits: false].! - - UndoParagraph == paragraph ifFalse: [ "Can't undo another paragraph's edit" - UndoMessage := Message selector: #undoReplace. - UndoInterval := 1 to: 0. - Undone := true]. - UndoInterval ~= self selectionInterval ifTrue: [ "blink the actual target" - self selectInterval: UndoInterval]. - - "Leave a signal of which phase is in progress" - UndoParagraph := Undone ifTrue: [#redoing] ifFalse: [#undoing]. - UndoMessage sentTo: self. - UndoParagraph := paragraph! Item was removed: - ----- Method: TextEditor>>undoAgain:andReselect:typedKey: (in category 'undoers') ----- - undoAgain: indices andReselect: home typedKey: wasTypedKey - "The last command was again. Undo it. Redoer: itself." - - | findSize substText | - (self isRedoing & wasTypedKey) ifTrue: "redelete search key" - [self selectInterval: home. - self zapSelectionWith: self nullText]. - - findSize := (self isRedoing ifTrue: [FindText] ifFalse: [ChangeText]) size. - substText := self isUndoing ifTrue: [FindText] ifFalse: [ChangeText]. - (self isUndoing ifTrue: [indices size to: 1 by: -1] ifFalse: [1 to: indices size]) do: - [:i | - | index subject | - index := indices at: i. - (subject := index to: index + findSize - 1) = self selectionInterval ifFalse: - [self selectInterval: subject]. - FindText == ChangeText ifFalse: [self zapSelectionWith: substText]]. - - self isUndoing - ifTrue: "restore selection to where it was when 'again' was invoked" - [wasTypedKey - ifTrue: "search started by typing key at a caret; restore it" - [self selectAt: home first. - self zapSelectionWith: FindText. - self selectAt: home last + 1] - ifFalse: [self selectInterval: home]]. - - self undoMessage: UndoMessage forRedo: self isUndoing! Item was added: + ----- Method: TextEditor>>undoAndReselect (in category 'undoers') ----- + undoAndReselect + + self + replace: self history current intervalBetween + with: self history current contentsBefore + and: [self selectInterval: self history current intervalBefore].! Item was removed: - ----- Method: TextEditor>>undoAndReselect:redoAndReselect: (in category 'undoers') ----- - undoAndReselect: undoHighlight redoAndReselect: redoHighlight - "Undo typing, cancel, paste, and other operations that are like replaces - but the selection is not the whole restored text after undo, redo, or both. - undoHighlight is selected after this phase and redoHighlight after the next phase. - Redoer: itself." - - self replace: self selectionInterval with: UndoSelection and: - [self selectInterval: undoHighlight]. - self undoMessage: (UndoMessage argument: redoHighlight) forRedo: self isUndoing - ! Item was removed: - ----- Method: TextEditor>>undoCutCopy: (in category 'undoers') ----- - undoCutCopy: oldPasteBuffer - "Undo of a cut, copy, or any edit that changed CurrentSelection. Be sure - undo-copy does not lock the model. Redoer: itself, so never isRedoing." - - | recentCut | - recentCut := self clipboardText. - UndoSelection size = UndoInterval size - ifFalse: [self replaceSelectionWith: UndoSelection]. - self clipboardTextPut: oldPasteBuffer. - self undoer: #undoCutCopy: with: recentCut! Item was removed: - ----- Method: TextEditor>>undoMessage:forRedo: (in category 'undo support') ----- - undoMessage: aMessage forRedo: aBoolean - "Call this from an undoer/redoer to set up UndoMessage as the - corresponding redoer/undoer. Also set up UndoParagraph, as well - as the state variable Undone. It is assumed that UndoInterval has been - established (generally by zapSelectionWith:) and that UndoSelection has been - saved (generally by replaceSelectionWith: or replace:With:and:)." - - self isDoing ifTrue: [UndoParagraph := paragraph]. - UndoMessage := aMessage. - Undone := aBoolean! Item was removed: - ----- Method: TextEditor>>undoQuery:lastOffering: (in category 'undoers') ----- - undoQuery: hintText lastOffering: selectorOrNil - "Undo ctrl-q. selectorOrNil (if not nil) is the previously offered selector. - hintText is the original hint. Redoer: completeSymbol." - - self zapSelectionWith: UndoSelection. - self undoMessage: (Message selector: #completeSymbol:lastOffering: arguments: UndoMessage arguments) forRedo: true. - self selectAt: self stopIndex! Item was removed: - ----- Method: TextEditor>>undoReplace (in category 'undoers') ----- - undoReplace - "Undo of any command that replaced a selection by other text that it left - highlighted, and that is undone and redone by simple reversal of the - operation. This is the most common Undoer; call replaceSelectionWith: - to get this setup. Redoer: itself, so never isRedoing." - - self replaceSelectionWith: UndoSelection! Item was removed: - ----- Method: TextEditor>>undoer: (in category 'undo support') ----- - undoer: aSelector - "See comment in undoMessage:. Use this version when aSelector has no arguments, and you are doing or redoing and want to prepare for undoing." - - self undoMessage: (Message selector: aSelector) forRedo: false! Item was removed: - ----- Method: TextEditor>>undoer:with: (in category 'undo support') ----- - undoer: aSelector with: arg1 - "See comment in undoMessage:. Use this version when aSelector has one argument, and you are doing or redoing and want to prepare for undoing." - - self undoMessage: (Message selector: aSelector argument: arg1) forRedo: false! Item was removed: - ----- Method: TextEditor>>undoer:with:with: (in category 'undo support') ----- - undoer: aSelector with: arg1 with: arg2 - "See comment in undoMessage:. Use this version when aSelector has two arguments, and you are doing or redoing and want to prepare for undoing." - - self undoMessage: (Message selector: aSelector arguments: (Array with: arg1 with: arg2)) forRedo: false! Item was removed: - ----- Method: TextEditor>>undoer:with:with:with: (in category 'undo support') ----- - undoer: aSelector with: arg1 with: arg2 with: arg3 - "See comment in undoMessage:. Use this version when aSelector has three arguments, and you are doing or redoing and want to prepare for undoing." - - self undoMessage: (Message selector: aSelector arguments: (Array with: arg1 with: arg2 with: arg3)) forRedo: false! Item was changed: ----- Method: TextEditor>>zapSelectionWith: (in category 'mvc compatibility') ----- zapSelectionWith: replacement | start stop rep | morph readOnly ifTrue: [^ self]. self deselect. start := self startIndex. stop := self stopIndex. (replacement isEmpty and: [stop > start]) ifTrue: [ "If deleting, then set emphasisHere from 1st character of the deletion" emphasisHere := (self text attributesAt: start) select: [:att | att mayBeExtended]]. (start = stop and: [ replacement isEmpty ]) ifFalse: [ replacement isText ifTrue: [ rep := replacement] ifFalse: [ rep := Text string: replacement attributes: emphasisHere ]. self text replaceFrom: start to: stop - 1 with: rep. paragraph recomposeFrom: start to: start + rep size - 1 delta: rep size - (stop-start). self markIndex: start pointIndex: start + rep size. + otherInterval := self selectionInterval]. - UndoInterval := otherInterval := self selectionInterval]. self userHasEdited " -- note text now dirty"! Item was added: + Object subclass: #TextEditorCommand + instanceVariableNames: 'interval message paragraph selection contentsBefore contentsAfter intervalBefore intervalAfter valid messageToUndo messageToRedo intervalBetween type isCompositeUndo isCompositeRedo' + classVariableNames: '' + poolDictionaries: '' + category: 'Morphic-Text Support'! Item was added: + ----- Method: TextEditorCommand>>contentsAfter (in category 'accessing') ----- + contentsAfter + + ^ contentsAfter! Item was added: + ----- Method: TextEditorCommand>>contentsAfter: (in category 'accessing') ----- + contentsAfter: anObject + + contentsAfter := anObject! Item was added: + ----- Method: TextEditorCommand>>contentsBefore (in category 'accessing') ----- + contentsBefore + + ^ contentsBefore! Item was added: + ----- Method: TextEditorCommand>>contentsBefore: (in category 'accessing') ----- + contentsBefore: anObject + + contentsBefore := anObject! Item was added: + ----- Method: TextEditorCommand>>hasReplacedSomething (in category 'testing') ----- + hasReplacedSomething + + ^ self contentsBefore size > 0! Item was added: + ----- Method: TextEditorCommand>>intervalAfter (in category 'accessing') ----- + intervalAfter + + ^ intervalAfter! Item was added: + ----- Method: TextEditorCommand>>intervalAfter: (in category 'accessing') ----- + intervalAfter: anObject + + intervalAfter := anObject! Item was added: + ----- Method: TextEditorCommand>>intervalBefore (in category 'accessing') ----- + intervalBefore + + ^ intervalBefore! Item was added: + ----- Method: TextEditorCommand>>intervalBefore: (in category 'accessing') ----- + intervalBefore: anObject + + intervalBefore := anObject! Item was added: + ----- Method: TextEditorCommand>>intervalBetween (in category 'accessing') ----- + intervalBetween + + ^ intervalBetween! Item was added: + ----- Method: TextEditorCommand>>intervalBetween: (in category 'accessing') ----- + intervalBetween: anObject + + intervalBetween := anObject! Item was added: + ----- Method: TextEditorCommand>>isCompositeRedo (in category 'accessing') ----- + isCompositeRedo + + ^ isCompositeRedo! Item was added: + ----- Method: TextEditorCommand>>isCompositeRedo: (in category 'accessing') ----- + isCompositeRedo: boolean + + isCompositeRedo := boolean.! Item was added: + ----- Method: TextEditorCommand>>isCompositeUndo (in category 'accessing') ----- + isCompositeUndo + + ^ isCompositeUndo! Item was added: + ----- Method: TextEditorCommand>>isCompositeUndo: (in category 'accessing') ----- + isCompositeUndo: boolean + + isCompositeUndo := boolean.! Item was added: + ----- Method: TextEditorCommand>>messageToRedo (in category 'accessing') ----- + messageToRedo + ^ messageToRedo! Item was added: + ----- Method: TextEditorCommand>>messageToRedo: (in category 'accessing') ----- + messageToRedo: msg + messageToRedo := msg.! Item was added: + ----- Method: TextEditorCommand>>messageToUndo (in category 'accessing') ----- + messageToUndo + ^ messageToUndo! Item was added: + ----- Method: TextEditorCommand>>messageToUndo: (in category 'accessing') ----- + messageToUndo: msg + messageToUndo := msg.! Item was added: + ----- Method: TextEditorCommand>>postCopy (in category 'copying') ----- + postCopy + + super postCopy. + + contentsAfter := contentsAfter copy. + contentsBefore := contentsBefore copy. + intervalAfter := intervalAfter copy. + intervalBefore := intervalBefore copy. + intervalBetween := intervalBetween copy. + + messageToUndo := messageToUndo copy. + messageToRedo := messageToRedo copy.! Item was added: + ----- Method: TextEditorCommand>>redoIn: (in category 'undo/redo') ----- + redoIn: editor + + self messageToRedo sendTo: editor.! Item was added: + ----- Method: TextEditorCommand>>type (in category 'accessing') ----- + type + + ^ type! Item was added: + ----- Method: TextEditorCommand>>type: (in category 'accessing') ----- + type: symbol + + type := symbol.! Item was added: + ----- Method: TextEditorCommand>>undoIn: (in category 'undo/redo') ----- + undoIn: editor + + self messageToUndo sendTo: editor.! Item was added: + Object subclass: #TextEditorCommandHistory + instanceVariableNames: 'commands currentIndex' + classVariableNames: 'MaximumTextHistoryDepth' + poolDictionaries: '' + category: 'Morphic-Text Support'! Item was added: + ----- Method: TextEditorCommandHistory class>>maximumTextHistoryDepth (in category 'preferences') ----- + maximumTextHistoryDepth + + ^ MaximumTextHistoryDepth ifNil: [500]! Item was added: + ----- Method: TextEditorCommandHistory class>>maximumTextHistoryDepth: (in category 'preferences') ----- + maximumTextHistoryDepth: number + + MaximumTextHistoryDepth := number.! Item was added: + ----- Method: TextEditorCommandHistory>>beginRemember: (in category 'undo/redo') ----- + beginRemember: command + + commands := commands + copyFrom: (1 max: (currentIndex + 2 - self class maximumTextHistoryDepth)) + to: (currentIndex min: commands size). + commands := commands, {command}. + currentIndex := commands size - 1. "Select the new command."! Item was added: + ----- Method: TextEditorCommandHistory>>current (in category 'accessing') ----- + current + + ^ self next! Item was added: + ----- Method: TextEditorCommandHistory>>detect: (in category 'enumeration') ----- + detect: block + + self do: [:command | + (block value: command) ifTrue: [^ command]]. + ^ nil! Item was added: + ----- Method: TextEditorCommandHistory>>do: (in category 'enumeration') ----- + do: block + + ((currentIndex min: commands size) to: 1 by: -1) + do: [:i | block value: (commands at: i)].! Item was added: + ----- Method: TextEditorCommandHistory>>finishRemember (in category 'undo/redo') ----- + finishRemember + + currentIndex := commands size.! Item was added: + ----- Method: TextEditorCommandHistory>>hasNext (in category 'accessing') ----- + hasNext + + ^ currentIndex < commands size! Item was added: + ----- Method: TextEditorCommandHistory>>hasPrevious (in category 'accessing') ----- + hasPrevious + + ^ currentIndex > 0! Item was added: + ----- Method: TextEditorCommandHistory>>initialize (in category 'initialization') ----- + initialize + + super initialize. + self reset.! Item was added: + ----- Method: TextEditorCommandHistory>>next (in category 'accessing') ----- + next + + ^ self hasNext + ifTrue: [commands at: currentIndex+1] + ifFalse: [nil]! Item was added: + ----- Method: TextEditorCommandHistory>>previous (in category 'accessing') ----- + previous + + ^ self hasPrevious + ifTrue: [commands at: currentIndex] + ifFalse: [nil]! Item was added: + ----- Method: TextEditorCommandHistory>>redoIn: (in category 'undo/redo') ----- + redoIn: editor + + self hasNext ifFalse: [^ self]. + + [self current redoIn: editor] + ensure: [currentIndex := currentIndex + 1]. + + self previous isCompositeRedo == true ifTrue: [self redoIn: editor].! Item was added: + ----- Method: TextEditorCommandHistory>>reset (in category 'initialization') ----- + reset + + commands := #(). + currentIndex := 0.! Item was added: + ----- Method: TextEditorCommandHistory>>undoIn: (in category 'undo/redo') ----- + undoIn: editor + + self hasPrevious ifFalse: [^ self]. + + currentIndex := currentIndex - 1. + self current undoIn: editor. + + self current isCompositeUndo == true ifTrue: [self undoIn: editor].! Item was added: + ----- Method: TextMorph class>>cleanUp (in category 'class initialization') ----- + cleanUp + + TextMorph allSubInstancesDo: [:m | m releaseEditor].! Item was changed: ----- Method: TextMorph>>installEditorToReplace: (in category 'private') ----- installEditorToReplace: priorEditor "Install an editor for my paragraph. This constitutes 'hasFocus'. If priorEditor is not nil, then initialize the new editor from its state. We may want to rework this so it actually uses the prior editor." | stateArray | priorEditor ifNotNil: [stateArray := priorEditor stateArray]. editor := self editorClass new morph: self. editor changeParagraph: self paragraph. + priorEditor + ifNil: [editor history: TextEditorCommandHistory new] + ifNotNil: [editor stateArrayPut: stateArray]. - priorEditor ifNotNil: [editor stateArrayPut: stateArray]. self selectionChanged. ^ editor! From commits at source.squeak.org Fri Nov 13 09:14:28 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 09:14:30 2015 Subject: [squeak-dev] The Trunk: System-mt.780.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.780.mcz ==================== Summary ==================== Name: System-mt.780 Author: mt Time: 13 November 2015, 10:13:57.316 am UUID: 3678da65-4d47-4fdd-8c82-8b390a567b0e Ancestors: System-eem.779 Removes obsolete preference for multiple text undo. =============== Diff against System-eem.779 =============== Item was removed: - ----- Method: Preferences class>>multipleTextUndo (in category 'standard queries') ----- - multipleTextUndo - ^ self - valueOfFlag: #multipleTextUndo - ifAbsent: [ false ]! From commits at source.squeak.org Fri Nov 13 09:15:52 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 09:15:54 2015 Subject: [squeak-dev] The Trunk: Tools-mt.650.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.650.mcz ==================== Summary ==================== Name: Tools-mt.650 Author: mt Time: 13 November 2015, 10:15:26.075 am UUID: d6d83392-6813-4adc-ab71-85e6246bc622 Ancestors: Tools-cmm.649 Adapts text edit menus for offer new text undo functionality. =============== Diff against Tools-cmm.649 =============== Item was changed: ----- Method: FileList>>mainFileContentsMenu: (in category 'file list menu') ----- mainFileContentsMenu: aMenu "Construct aMenu to have items appropriate for the file browser's code pane, for the unshifted state" ^ aMenu addTranslatedList: #( + ('find... (f)' find) - ('find...(f)' find) ('find again (g)' findAgain) + ('find and replace... ' findReplace) + ('do/replace again (j)' again) - ('set search string (h)' setSearchString) - - ('do again (j)' again) ('undo (z)' undo) + ('redo (Z)' redo) - ('copy (c)' copySelection) ('cut (x)' cut) ('paste (v)' paste) ('paste...' pasteRecent) - ('do it (d)' doIt) ('print it (p)' printIt) ('inspect it (i)' inspectIt) ('fileIn selection (G)' fileItIn) - ('accept (s)' accept) ('cancel (l)' cancel) - ('more...' shiftedYellowButtonActivity)); yourself ! Item was changed: ----- Method: InspectorBrowser>>msgPaneMenu:shifted: (in category 'as yet unclassified') ----- msgPaneMenu: aMenu shifted: shifted ^ aMenu labels: + 'find... (f) - 'find...(f) find again (g) + find and replace... + do/replace again (j) - set search string (h) - do again (j) undo (z) + redo (Z) copy (c) cut (x) paste (v) do it (d) print it (p) inspect it (i) accept (s) cancel (l)' + lines: #(0 4 6 9 12) + selections: #(find findAgain findReplace again undo redo copySelection cut paste doIt printIt inspectIt accept cancel)! - lines: #(0 3 5 8 11) - selections: #(find findAgain setSearchString again undo copySelection cut paste doIt printIt inspectIt accept cancel)! Item was changed: ----- Method: StringHolder class>>yellowButtonMenuItems (in category '*Tools-yellow button menu') ----- yellowButtonMenuItems "Returns the standard yellow button menu items" ^{ #-. {'set font... (k)' translated. #offerFontMenu}. {'set style... (K)' translated. #changeStyle}. {'set alignment... (u)' translated. #chooseAlignment}. #-. {'make project link (P)' translated. #makeProjectLink}. #-. {'find...(f)' translated. #find}. {'find again (g)' translated. #findAgain}. + {'find and replace ...' translated. #findReplace}. + {'do/replace again (j)' translated. #again}. - {'set search string (h)' translated. #setSearchString}. #-. - {'do again (j)' translated. #again}. {'undo (z)' translated. #undo}. + {'redo (Z)' translated. #redo}. #-. {'copy (c)' translated. #copySelection}. {'cut (x)' translated. #cut}. {'paste (v)' translated. #paste}. {'paste...' translated. #pasteRecent}. #-. {'do it (d)' translated. #doIt}. {'debug it (D)' translated. #debugIt}. {'print it (p)' translated. #printIt}. {'inspect it (i)' translated. #inspectIt}. {'explore it (I)' translated. #exploreIt}. {'button for it' translated. #buttonForIt}. {'tally it' translated. #tallyIt}. {'spy on it' translated. #spyOnIt}. #-. {'accept (s)' translated. #accept}. {'cancel (l)' translated. #cancel}. #-. {'show bytecodes' translated. #showBytecodes}. #-. {'copy html' translated. #copyHtml}. #-. {'more...' translated. #shiftedTextPaneMenuRequest}. }! From commits at source.squeak.org Fri Nov 13 09:16:19 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 09:16:20 2015 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.12.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.12.mcz ==================== Summary ==================== Name: 51Deprecated-mt.12 Author: mt Time: 13 November 2015, 10:16:11.223 am UUID: 3f1371bf-2a60-4201-8314-9621e81b9f74 Ancestors: 51Deprecated-mt.11 Adds deprecated EditCommand class. =============== Diff against 51Deprecated-mt.11 =============== Item was changed: SystemOrganization addCategory: #'51Deprecated-Files-Kernel'! SystemOrganization addCategory: #'51Deprecated-Morphic-Support'! + SystemOrganization addCategory: #'51Deprecated-Morphic-Text Support'! Item was added: + Object subclass: #EditCommand + instanceVariableNames: 'textMorph phase replacedText replacedTextInterval newText newTextInterval lastSelectionInterval' + classVariableNames: '' + poolDictionaries: '' + category: '51Deprecated-Morphic-Text Support'! + + !EditCommand commentStamp: '' prior: 0! + This class handles all paragraph surgery in VI. In general, subclasses of EditCommand should be able to rely on the super class' undo/redo machinery -- only the repeat command needs to be overridden in most cases. This assumes, of course, that the newText, replacedText, newTextInterval, and replacedTextInterval have been set correctly. + + When setting the interval, use normal mode style selections, not insert mode selections (see class comment of VIMorphEditor). + + Possible useful expressions for doIt or printIt. + + Structure: + instVar1 type -- comment about the purpose of instVar1 + instVar2 type -- comment about the purpose of instVar2 + + Any further useful comments about the general approach of this implementation.! Item was added: + ----- Method: EditCommand class>>textMorph:replacedText:replacedTextInterval:newText:newTextInterval: (in category 'instance creation') ----- + textMorph: tm + replacedText: replacedText + replacedTextInterval: replacedTextInterval + newText: newText + newTextInterval: newTextInterval + + + ^(self new) + textMorph: tm + replacedText: replacedText + replacedTextInterval: replacedTextInterval + newText: newText + newTextInterval: newTextInterval; + yourself + + ! Item was added: + ----- Method: EditCommand>>doCommand (in category 'command execution') ----- + doCommand + + ^self redoCommand + + ! Item was added: + ----- Method: EditCommand>>doSelectionInterval (in category 'selection') ----- + doSelectionInterval + ^self redoSelectionInterval! Item was added: + ----- Method: EditCommand>>iEditCommand (in category 'accessors') ----- + iEditCommand + ^true! Item was added: + ----- Method: EditCommand>>lastSelectionInterval (in category 'accessors') ----- + lastSelectionInterval + ^lastSelectionInterval! Item was added: + ----- Method: EditCommand>>newText (in category 'accessors') ----- + newText + ^newText! Item was added: + ----- Method: EditCommand>>newText: (in category 'accessors') ----- + newText: aText + ^newText := aText! Item was added: + ----- Method: EditCommand>>newTextInterval (in category 'accessors') ----- + newTextInterval + ^newTextInterval! Item was added: + ----- Method: EditCommand>>newTextInterval: (in category 'accessors') ----- + newTextInterval: anInterval + ^newText := anInterval! Item was added: + ----- Method: EditCommand>>pEditor (in category 'accessors') ----- + pEditor + ^textMorph editor + ! Item was added: + ----- Method: EditCommand>>phase (in category 'accessors') ----- + phase + ^phase + ! Item was added: + ----- Method: EditCommand>>phase: (in category 'accessors') ----- + phase: aSymbol + ^phase := aSymbol + ! Item was added: + ----- Method: EditCommand>>printOn: (in category 'accessors') ----- + printOn: aStream + + | | + aStream + nextPutAll: self class name; + nextPut: $[; + nextPutAll: ('new: ', newTextInterval asString,' -> "', newText, '", rText: ', replacedTextInterval asString,' -> "', replacedText, '"'); + nextPut: $].! Item was added: + ----- Method: EditCommand>>redoCommand (in category 'command execution') ----- + redoCommand + + | | + + "Debug dShow: ('rInterval: ', replacedTextInterval asString, '. rText: ', replacedText string, ' nInterval: ', newTextInterval asString, ' nText: ', newText string)." + self textMorphEditor + noUndoReplace: replacedTextInterval + with: newText. + + "Debug dShow: ('lastSelInt: ', lastSelectionInterval asString)." + ! Item was added: + ----- Method: EditCommand>>redoSelectionInterval (in category 'selection') ----- + redoSelectionInterval + "Return an interval to be displayed as a subtle selection after undo, or nil" + + ^newTextInterval + ! Item was added: + ----- Method: EditCommand>>replacedText (in category 'accessors') ----- + replacedText + ^replacedText! Item was added: + ----- Method: EditCommand>>replacedText: (in category 'accessors') ----- + replacedText: aText + ^replacedText := aText! Item was added: + ----- Method: EditCommand>>replacedTextInterval (in category 'accessors') ----- + replacedTextInterval + ^replacedTextInterval! Item was added: + ----- Method: EditCommand>>replacedTextInterval: (in category 'accessors') ----- + replacedTextInterval: anInterval + ^replacedTextInterval := anInterval! Item was added: + ----- Method: EditCommand>>textMorph:replacedText:replacedTextInterval:newText:newTextInterval: (in category 'initialization') ----- + textMorph: tm + replacedText: rText + replacedTextInterval: rInterval + newText: nText + newTextInterval: nInterval + + + textMorph := tm. + replacedText := rText. + replacedTextInterval := rInterval. + newText := nText. + newTextInterval := nInterval. + + ! Item was added: + ----- Method: EditCommand>>textMorphEditor (in category 'accessors') ----- + textMorphEditor + ^textMorph editor + ! Item was added: + ----- Method: EditCommand>>textMorphString (in category 'accessors') ----- + textMorphString + ^textMorph text string + ! Item was added: + ----- Method: EditCommand>>textMorphStringSize (in category 'accessors') ----- + textMorphStringSize + ^textMorph text string size + ! Item was added: + ----- Method: EditCommand>>undoCommand (in category 'command execution') ----- + undoCommand + + "Debug dShow: ('new Interval: ', newTextInterval asString, '. rText: ', replacedText string)." + + self textMorphEditor + noUndoReplace: newTextInterval + with: replacedText. + + + ! Item was added: + ----- Method: EditCommand>>undoSelection (in category 'selection') ----- + undoSelection + "Return an interval to be displayed as a selection after undo, or nil" + + ^replacedTextInterval first to: (replacedTextInterval first + replacedText size - 1) + ! Item was added: + ----- Method: EditCommand>>undoSelectionInterval (in category 'selection') ----- + undoSelectionInterval + "Return an interval to be displayed as a selection after undo, or nil" + + | i | + i := (replacedTextInterval first min: self textMorphStringSize). + ^i to: i - 1 + ! From commits at source.squeak.org Fri Nov 13 09:19:40 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 09:19:43 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1036.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1036.mcz ==================== Summary ==================== Name: Morphic-mt.1036 Author: mt Time: 13 November 2015, 10:18:21.393 am UUID: 5bd8b928-83eb-46c4-a0ce-0a4bef9ea695 Ancestors: Morphic-mt.1035 Add postscript to update all open tools for using new text edit history function. =============== Diff against Morphic-mt.1035 =============== Item was changed: + (PackageInfo named: 'Morphic') postscript: 'Editor initialize. + MenuIcons initializeTranslations. + TextMorph allSubInstancesDo: [:tm | tm releaseEditor]. + Preferences removePreference: #multipleTextUndo. + '! - (PackageInfo named: 'Morphic') postscript: '"Initialize the key bindings and menus" - Editor initialize. - - "apply the new icons" - MenuIcons initializeIcons'! From commits at source.squeak.org Fri Nov 13 09:37:16 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 09:37:18 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1037.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1037.mcz ==================== Summary ==================== Name: Morphic-mt.1037 Author: mt Time: 13 November 2015, 10:36:18.051 am UUID: e9616683-5d82-4b62-9edc-0d499513037e Ancestors: Morphic-mt.1036 Make both window labels for inspector and explorer consistent. =============== Diff against Morphic-mt.1036 =============== Item was changed: ----- Method: Morph>>defaultLabelForInspector (in category 'user interface') ----- defaultLabelForInspector "Answer the default label to be used for an Inspector window on the receiver." + ^ self printStringLimitedTo: 40! - ^ super printString truncateTo: 40! From commits at source.squeak.org Fri Nov 13 09:37:39 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 09:37:41 2015 Subject: [squeak-dev] The Trunk: Tools-mt.651.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.651.mcz ==================== Summary ==================== Name: Tools-mt.651 Author: mt Time: 13 November 2015, 10:36:56.582 am UUID: bbc97892-6c95-482f-a50d-d752a50492c9 Ancestors: Tools-mt.650 Make both window labels for inspector and explorer consistent. =============== Diff against Tools-mt.650 =============== Item was changed: ----- Method: ObjectExplorer>>label (in category 'accessing') ----- label + ^ self rootObject printStringLimitedTo: 40! - ^ self rootObject printStringLimitedTo: 32! From asqueaker at gmail.com Fri Nov 13 15:56:49 2015 From: asqueaker at gmail.com (Chris Muller) Date: Fri Nov 13 15:56:51 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1035.mcz In-Reply-To: <5645a9c1.454a370a.fed0a.6153SMTPIN_ADDED_MISSING@mx.google.com> References: <5645a9c1.454a370a.fed0a.6153SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Bravo Marcel!! After years of no credible Undo / Redo, now we finally have it. Command+Shift+Z is the right choice for redo -- because "modifier keys" (like Shift) are good choices to "modify" behaviors of the same key with no modifier is pressed.. Undo / Redo are a pair... From karlramberg at gmail.com Fri Nov 13 16:14:31 2015 From: karlramberg at gmail.com (karl ramberg) Date: Fri Nov 13 16:14:35 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1035.mcz In-Reply-To: References: <5645a9c1.454a370a.fed0a.6153SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Great enhancement Karl On Fri, Nov 13, 2015 at 4:56 PM, Chris Muller wrote: > Bravo Marcel!! After years of no credible Undo / Redo, now we finally > have it. > > Command+Shift+Z is the right choice for redo -- because "modifier > keys" (like Shift) are good choices to "modify" behaviors of the same > key with no modifier is pressed.. Undo / Redo are a pair... > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151113/c736d2e3/attachment.htm From asqueaker at gmail.com Fri Nov 13 16:48:19 2015 From: asqueaker at gmail.com (Chris Muller) Date: Fri Nov 13 16:48:22 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1035.mcz In-Reply-To: <5645a9c1.454a370a.fed0a.6153SMTPIN_ADDED_MISSING@mx.google.com> References: <5645a9c1.454a370a.fed0a.6153SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Looking at "undo" Preferences, we have: infiniteUndo purgeUndoOnQuit useUndo Maximum text edit (undo/redo) history depth I assume yours is just the last one.. From commits at source.squeak.org Fri Nov 13 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 22:55:05 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151113225502.23564.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009141.html Name: System-nice.778 Ancestors: System-nice.777 Attempt a better fix for restoring endianness at ImageSegment materialization: 1) get the image segment endianess from the segment WordArray, before it is transformed into an Array. 2) use this information to later restoreEndianness: ifNeeded. This will require a slight semantic change of #startUpFrom: to which we pass a Boolean rather than an ImageSegment. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009142.html Name: Kernel-nice.968 Ancestors: Kernel-nice.967 Pass a boolean to startUpFrom: indicating whether the object came from a different endian machine or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009143.html Name: Balloon-nice.28 Ancestors: Balloon-eem.27 Pass a boolean to startUpFrom: indicating whether the object came from a different endian machine or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009144.html Name: System-eem.779 Ancestors: System-nice.778 Avoid isKindOf: in new endianness handling in ImageSegment. Nuke obsolete BreakpointManager method. Simplify endianness calculation given that this is Spur and the vmParameter can be assumed to be present. Provide accessors for the new (biut as yet unused) finalization scheme (in preparation). Add a method that answers unbound methods, useful for recmpile all shenannigans. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009145.html Name: Collections-eem.672 Ancestors: Collections-mt.671 Only print ByteArrays as literals, not every subclass of ByteArray that doesn't have its own print method. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009146.html Name: Environments-eem.58 Ancestors: Environments-cmm.57 Make sure we can collect; environments too. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009147.html Name: Kernel-eem.969 Ancestors: Kernel-nice.968 Fix tow speeling sorres. Handle the case where a method compiled in the debugger has a large frame. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009148.html Name: Morphic-mt.1035 Ancestors: Morphic-mt.1034 Adds multiple text undo/redo functionality. Preference allows to specify the maximum history depth. Each text editor has its own history. All histories will be purged when building a Squeak release. CMD+Z ... Undo CMD+SHIFT+Z ... Redo Note: The function #makeCapitalized: cannot be invoked via CMD+SHIFT+Z anymore. CMD+Y is undo primarily on Windows machines and already assigned to #swapChars:. Also, CMD+SHIFT+Z is more convenient for US-like keyboard layouts. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009149.html Name: System-mt.780 Ancestors: System-eem.779 Removes obsolete preference for multiple text undo. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009150.html Name: Tools-mt.650 Ancestors: Tools-cmm.649 Adapts text edit menus for offer new text undo functionality. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009151.html Name: 51Deprecated-mt.12 Ancestors: 51Deprecated-mt.11 Adds deprecated EditCommand class. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009152.html Name: Morphic-mt.1036 Ancestors: Morphic-mt.1035 Add postscript to update all open tools for using new text edit history function. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009153.html Name: Morphic-mt.1037 Ancestors: Morphic-mt.1036 Make both window labels for inspector and explorer consistent. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009154.html Name: Tools-mt.651 Ancestors: Tools-mt.650 Make both window labels for inspector and explorer consistent. ============================================= From commits at source.squeak.org Fri Nov 13 23:40:34 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 23:40:36 2015 Subject: [squeak-dev] The Trunk: Graphics-tpr.319.mcz Message-ID: tim Rowledge uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-tpr.319.mcz ==================== Summary ==================== Name: Graphics-tpr.319 Author: tpr Time: 13 November 2015, 3:40:15.027 pm UUID: ea659db8-1afb-4241-9600-37ed16edd7b6 Ancestors: Graphics-tpr.318 Second try - Add support for Pi-accelerating bitblt colour testing calls. Make StrikeFont loading methods actually work. Change Form>asFormOfDepth: - this may possibly be contentious but it certainly makes Scratch image loading more reliable =============== Diff against Graphics-eem.317 =============== Item was added: + ----- Method: BitBlt>>primCompareColor:to:test: (in category 'private') ----- + primCompareColor: colorValueA to: colorValueB test: testID + "Call the prim that compares pixel color values and can tell if two Forms that overlap in some manner when composited are touching colors as defined by the testID. + " + + "to signal failure without an error we'll return -1" + ^-1! Item was added: + ----- Method: Form class>>compareMatchColor (in category 'mode constants') ----- + compareMatchColor + "The primCompare test id values are + compareMatchColors -> 0 + compareNotColorANotColorB -> 1 + compareNotColorAMatchColorB -> 2" + ^0! Item was added: + ----- Method: Form class>>compareNotColorAMatchColorB (in category 'mode constants') ----- + compareNotColorAMatchColorB + "The primCompare test id values are + compareMatchColors -> 0 + compareNotColorANotColorB -> 1 + compareNotColorAMatchColorB -> 2" + ^2! Item was added: + ----- Method: Form class>>compareNotColorANotColorB (in category 'mode constants') ----- + compareNotColorANotColorB + "The primCompare test id values are + compareMatchColors -> 0 + compareNotColorANotColorB -> 1 + compareNotColorAMatchColorB -> 2" + ^1! Item was added: + ----- Method: Form class>>compareTallyFlag (in category 'mode constants') ----- + compareTallyFlag + "The primCompare test id values are ORR'd with 8 to indicate tallying rather than simply reporting the first hit" + ^8! Item was added: + ----- Method: Form class>>exampleColorSees (in category 'examples') ----- + exampleColorSees + "Form exampleColorSees" + "First column as above shows the sneaky red/yellow pirate sneaking up on the blue/peach galleon. + Second column shows the 1bpp made from the red/yellow/transparent - white -> ignore this, black -> test this + Third shows the hit area - where red touches blue - superimposed on the original scene. + Fourth column is the tally of hits via the old algorithm + Last column shows the tally of hits via the new prim" + + |formA formB maskA offset tally map intersection left top dCanvas sensitiveColor soughtColor index| + formA := formB := maskA := offset := tally := map := intersection := nil. "just to shut up the compiler when testing" + ActiveWorld restoreMorphicDisplay; doOneCycle. + + sensitiveColor := Color red. + soughtColor := Color blue. + + top := 50. + dCanvas := FormCanvas on: Display. + -50 to: 80 by: 10 do:[:p| + offset:= p@0. "vary this to check different states" + left := 10. + + formA := (Form extent: 100@50 depth: 32) asFormOfDepth: 16 "so we can try original forms of other depths". + formB := Form extent: 100@50 depth: 32. + + "make a red square in the middle of the form" + (FormCanvas on: formA) fillRectangle: (25@25 extent: 50@5) fillStyle: sensitiveColor. + (FormCanvas on: formA) fillRectangle: (25@30 extent: 50@5) fillStyle: Color transparent. + (FormCanvas on: formA) fillRectangle: (25@35 extent: 50@50) fillStyle: Color yellow. + "formA displayOn: Display at: left@top rule: Form paint. + dCanvas frameRectangle: (left@top extent: formA extent) width:2 color: Color green. + left := left + 150." + + "make a blue block on the right half of the form" + (FormCanvas on: formB) fillRectangle: (50@0 extent: 50@100) fillStyle: soughtColor. + (FormCanvas on: formB) fillRectangle: (60@0 extent: 10@100) fillStyle: Color palePeach. + "formB displayOn: Display at: left@top rule: Form paint. + dCanvas frameRectangle: (left@top extent: formA extent) width:2 color: Color green. + left := left + 150." + + intersection := (formA boundingBox translateBy: offset) intersect: (formB boundingBox). + + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 150. + + maskA := Form extent: intersection extent depth: 1. + + map := Bitmap new: (1 bitShift: (formA depth min: 15)). + map at: (index := sensitiveColor indexInMap: map) put: 1. + + maskA copyBits: (intersection translateBy: offset negated) from: formA at: 0@0 colorMap: map. + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + maskA displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. left := left + 150. + + "intersect world pixels of the color we're looking for with sensitive pixels mask" + map at: index put: 0. "clear map and reuse it" + map at: (soughtColor indexInMap: map) put: 1. + + maskA + copyBits: intersection + from: formB at: 0@0 clippingBox: formB boundingBox + rule: Form and + fillColor: nil + map: map. + + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + maskA displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 170. + + (maskA tallyPixelValues at: 2) asString asDisplayText displayOn: Display at: left@(top +20). + left := left + 70. + + "now try using the new primitive" + tally := (BitBlt + destForm: formB + sourceForm: formA + fillColor: nil + combinationRule: 3 "really ought to work with nil but prim code checks" + destOrigin: intersection origin + sourceOrigin: (offset negated max: 0@0) + extent: intersection extent + clipRect: intersection) + primCompareColor: ((sensitiveColor pixelValueForDepth: formA depth) ) to: ((soughtColor pixelValueForDepth: formB depth) ) test: (Form compareMatchColor bitOr: Form compareTallyFlag). + tally asString asDisplayText displayOn: Display at: left@(top +20). + top:= top + 60] + + ! Item was added: + ----- Method: Form class>>exampleTouchTest (in category 'examples') ----- + exampleTouchTest + "Form exampleTouchTest" + "Demonstrate the algorithm used in Scratch code to determine if a sprite's non-transparent pixels touch a + non-transparent pixel of the background upon which it is displayed. + First column shows a form with a red block in the midst of transparent area sneaking up on a form with a transparent LHS and blue RHS. The green frame shows the intersection area. + Second column shows in grey the part of the red that is within the intersection. + Third column shows in black the blue that is within the intersection. + Fourth column shows just the A touching B area. + Fifth column is the tally of hits via the old algorithm + Last column shows the tally of hits via the new prim" + |formA formB maskA maskB offset tally map intersection left top dCanvas| + formA := formB := maskA := maskB := offset := tally := map := intersection := nil. "just to shut up the compiler when testing" + + ActiveWorld restoreMorphicDisplay; doOneCycle. + + top := 50. + dCanvas := FormCanvas on: Display. + -50 to: 80 by: 10 do:[:p| + offset:= p@0. "vary this to check different states" + left := 10. + + formA := Form extent: 100@50 depth: 32. + formB := Form extent: 100@50 depth: 16. + + "make a red square in the middle of the form" + (FormCanvas on: formA) fillRectangle: (25@25 extent: 50@5) fillStyle: Color yellow. + (FormCanvas on: formA) fillRectangle: (25@30 extent: 50@5) fillStyle: Color transparent. + (FormCanvas on: formA) fillRectangle: (25@35 extent: 50@50) fillStyle: Color red. + "formA displayOn: Display at: left@top rule: Form paint. + dCanvas frameRectangle: (left@top extent: formA extent) width:2 color: Color green. + left := left + 150." + + "make a blue block on the right half of the form" + (FormCanvas on: formB) fillRectangle: (50@0 extent: 50@100) fillStyle: Color blue. + (FormCanvas on: formB) fillRectangle: (60@0 extent: 10@100) fillStyle: Color palePeach. + "formB displayOn: Display at: left@top rule: Form paint. + dCanvas frameRectangle: (left@top extent: formA extent) width:2 color: Color green. + left := left + 150." + + intersection := (formA boundingBox translateBy: offset) intersect: (formB boundingBox). + + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 150. + + maskA := Form extent: intersection extent depth: 2. + formA displayOn: maskA at: offset - intersection origin rule: Form paint. + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + maskA displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 150. + + maskB := Form extent: intersection extent depth: 2. + formB displayOn: maskB at: intersection origin negated rule: Form paint. + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + maskB displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 150. + + map := Bitmap new: 4 withAll: 1. + map at: 1 put: 0. "transparent" + + maskA copyBits: maskA boundingBox from: maskA at: 0@0 colorMap: map. + "maskA displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 150." + + maskB copyBits: maskB boundingBox from: maskB at: 0@0 colorMap: map. + "maskB displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 150." + + maskB displayOn: maskA at: 0@0 rule: Form and. + maskA displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 170. + + (maskA boundingBox area -( maskA tallyPixelValues at: 1)) asString asDisplayText displayOn: Display at: left@(top +20). + left := left + 70. + + "now try using the new primitive" + tally := (BitBlt + destForm: formB + sourceForm: formA + fillColor: nil + combinationRule: 3 "really ought to work with nil but prim code checks" + destOrigin: intersection origin + sourceOrigin: (offset negated max: 0@0) + extent: intersection extent + clipRect: intersection) + primCompareColor: ((Color transparent pixelValueForDepth: formA depth) bitAnd: 16rFFFFFF) to: ((Color transparent pixelValueForDepth: formB depth) bitAnd: 16rFFFFFF) test: (Form compareNotColorANotColorB bitOr: Form compareTallyFlag). + tally asString asDisplayText displayOn: Display at: left@(top +20). + top:= top + 60] + + + ! Item was added: + ----- Method: Form class>>exampleTouchingColor (in category 'examples') ----- + exampleTouchingColor + "Form exampleTouchingColor" + "Demonstrate the algorithm used in Scratch code to determine if a sprite's non-transparent pixels touch a + particular color pixel of the background upon which it is displayed. + First column as above shows the sneaky red/yellow pirate sneaking up on the blue/peach galleon. + Second column shows the 1bpp made from the red/yellow/transparent - white -> ignore this, black -> test this + Third shows the hit area (black) superimposed on the original scene + Fourth column is the tally of hits via the old algorithm + Last column shows the tally of hits via the new prim" + |formA formB maskA offset tally map intersection left top dCanvas ignoreColor soughtColor| + formA := formB := maskA := offset := tally := map := intersection := nil. "just to shut up the compiler when testing" + ActiveWorld restoreMorphicDisplay; doOneCycle. + + ignoreColor := Color transparent. + soughtColor := Color blue. + + top := 50. + dCanvas := FormCanvas on: Display. + -50 to: 80 by: 10 do:[:p| + offset:= p@0. "vary this to check different states" + left := 10. + + formA := (Form extent: 100@50 depth: 32) asFormOfDepth: 16 "so we can try original forms of other depths". + formB := Form extent: 100@50 depth: 32. + + "make a red square in the middle of the form" + (FormCanvas on: formA) fillRectangle: (25@25 extent: 50@5) fillStyle: Color red. + (FormCanvas on: formA) fillRectangle: (25@30 extent: 50@5) fillStyle: Color transparent. + (FormCanvas on: formA) fillRectangle: (25@35 extent: 50@50) fillStyle: Color yellow. + "formA displayOn: Display at: left@top rule: Form paint. + dCanvas frameRectangle: (left@top extent: formA extent) width:2 color: Color green. + left := left + 150." + + "make a blue block on the right half of the form" + (FormCanvas on: formB) fillRectangle: (50@0 extent: 50@100) fillStyle: soughtColor. + (FormCanvas on: formB) fillRectangle: (60@0 extent: 10@100) fillStyle: Color palePeach. + "formB displayOn: Display at: left@top rule: Form paint. + dCanvas frameRectangle: (left@top extent: formA extent) width:2 color: Color green. + left := left + 150." + + intersection := (formA boundingBox translateBy: offset) intersect: (formB boundingBox). + + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 150. + + maskA := Form extent: intersection extent depth: 1. + + map := Bitmap new: (1 bitShift: (formA depth min: 15)). + map atAllPut: 1. + map at: ( ignoreColor indexInMap: map) put: 0. + + maskA copyBits: (intersection translateBy: offset negated) from: formA at: 0@0 colorMap: map. + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + maskA displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. left := left + 150. + + "intersect world pixels of the color we're looking for with sensitive pixels mask" + map atAllPut: 0. "clear map and reuse it" + map at: (soughtColor indexInMap: map) put: 1. + + maskA + copyBits: intersection + from: formB at: 0@0 clippingBox: formB boundingBox + rule: Form and + fillColor: nil + map: map. + + formB displayOn: Display at: left@top rule: Form paint. + formA displayOn: Display at: (left@top) + offset rule: Form paint. + maskA displayOn: Display at: (left@top) + intersection origin rule: Form paint. + dCanvas frameRectangle: (intersection translateBy: left@top) width:2 color: Color green. + left := left + 170. + + (maskA tallyPixelValues at: 2) asString asDisplayText displayOn: Display at: left@(top +20). + left := left + 70. + + "now try using the new primitive" + tally := (BitBlt + destForm: formB + sourceForm: formA + fillColor: nil + combinationRule: 3 "really ought to work with nil but prim code checks" + destOrigin: intersection origin + sourceOrigin: (offset negated max: 0@0) + extent: intersection extent + clipRect: intersection) + primCompareColor: ((ignoreColor pixelValueForDepth: formA depth) bitAnd: 16rFFFFFF) to: ((soughtColor pixelValueForDepth: formB depth) bitAnd: 16rFFFFFF) test: (Form compareNotColorAMatchColorB bitOr: Form compareTallyFlag). + tally asString asDisplayText displayOn: Display at: left@(top +20). + top:= top + 60] + ! Item was changed: ----- Method: Form>>asFormOfDepth: (in category 'converting') ----- asFormOfDepth: d + "Create a copy of me with depth 'd'. Includes a correction for some bitmaps that when imported have poorly set up transparency" | newForm | d = self depth ifTrue:[^self]. newForm := Form extent: self extent depth: d. (BitBlt toForm: newForm) colorMap: (self colormapIfNeededFor: newForm); copy: (self boundingBox) from: 0@0 in: self fillColor: nil rule: Form over. "Special case: For a 16 -> 32 bit conversion fill the alpha channel because it gets lost in translation." + d = 32 ifTrue:[newForm fixAlpha]. - (self depth = 16 and:[d= 32]) ifTrue:[newForm fillAlpha: 255]. ^newForm! Item was changed: ----- Method: StrikeFont class>>readStrikeFont2Family: (in category 'examples') ----- readStrikeFont2Family: familyName "StrikeFont readStrikeFont2Family: 'Lucida'" + ^self readStrikeFont2Family: familyName fromDirectory: FileDirectory default! Item was changed: ----- Method: StrikeFont class>>readStrikeFont2Family:fromDirectory: (in category 'examples') ----- readStrikeFont2Family: familyName fromDirectory: aDirectory "StrikeFont readStrikeFont2Family: 'Lucida' fromDirectory: FileDirectory default" "This utility reads all available .sf2 StrikeFont files for a given family from the current directory. It returns an Array, sorted by size, suitable for handing to TextStyle newFontArray: ." "For this utility to work as is, the .sf2 files must be named 'familyNN.sf2'." | fileNames strikeFonts | fileNames := aDirectory fileNamesMatching: familyName , '##.sf2'. + strikeFonts := fileNames collect: [:fname | StrikeFont new readFromStrike2: (aDirectory fullNameFor: fname)]. - strikeFonts := fileNames collect: [:fname | StrikeFont new readFromStrike2: fname]. strikeFonts do: [ :font | font reset ]. ^strikeFonts asArray sort: [:a :b | a height < b height]. + "TextConstants at: #Lucida put: (TextStyle fontArray: (StrikeFont readStrikeFont2Family: 'Lucida' fromDirectory: FileDirectory default))."! - "TextConstants at: #Lucida put: (TextStyle fontArray: (StrikeFont - readStrikeFont2Family: 'Lucida'))."! Item was changed: ----- Method: StrikeFont>>readFromStrike2: (in category 'file in/out') ----- readFromStrike2: fileName "StrikeFont new readFromStrike2: 'Palatino14.sf2'" "Build an instance from the strike font stored in strike2 format. fileName is of the form: .sf2" | file | ('*.sf2' match: fileName) ifFalse: [self halt. "likely incompatible"]. + name := FileDirectory baseNameFor: ( FileDirectory localNameFor: fileName). "Drop filename extension" - name := fileName copyUpTo: $. . "Drop filename extension" file := FileStream readOnlyFileNamed: fileName. file binary. [self readFromStrike2Stream: file] ensure: [file close]! From commits at source.squeak.org Fri Nov 13 23:50:28 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 13 23:50:30 2015 Subject: [squeak-dev] The Trunk: Sound-tpr.45.mcz Message-ID: tim Rowledge uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-tpr.45.mcz ==================== Summary ==================== Name: Sound-tpr.45 Author: tpr Time: 13 November 2015, 3:50:17.879 pm UUID: 257002b4-8961-45b2-86d2-9b8e1f85cd1f Ancestors: Sound-tpr.44 Sounds changes ported across from Scratch work; you really don't want an error raising prim call inside a critical block if possible. =============== Diff against Sound-topa.43 =============== Item was added: + ----- Method: Envelope>>computeSustainValueAtMSecs: (in category 'applying') ----- + computeSustainValueAtMSecs: mSecs + "Return the value of this envelope at the given number of milliseconds from its onset. Return zero for times outside the time range of this envelope." + "Note: Unlike the private method incrementalComputeValueAtMSecs:, this method does is not increment. Thus it is slower, but it doesn't depend on being called sequentially at fixed time intervals. + Note: this is the same as computeValueAtMSecs: apart from removing the first section that requires loopEndMSecs t obe nil; this appears to cause a problem when a sound in playing and is stopped whilst the #computeSlopeAtMSecs: method is run inside the SoundPlayer loop" + + | t i | + mSecs < 0 ifTrue: [^ 0.0]. + + mSecs < loopStartMSecs ifTrue: [ "attack phase" + i := self indexOfPointAfterMSecs: mSecs startingAt: 1. + i = 1 ifTrue: [^ (points at: 1) y * scale]. + ^ self interpolate: mSecs between: (points at: i - 1) and: (points at: i)]. + + "sustain phase" + loopMSecs = 0 ifTrue: [^ (points at: loopEndIndex) y * scale]. "looping on a single point" + t := loopStartMSecs + ((mSecs - loopStartMSecs) \\ loopMSecs). + i := self indexOfPointAfterMSecs: t startingAt: loopStartIndex. + + ^ self interpolate: t between: (points at: i - 1) and: (points at: i) + ! Item was removed: - ----- Method: Envelope>>computeValueAtMSecs: (in category 'applying') ----- - computeValueAtMSecs: mSecs - "Return the value of this envelope at the given number of milliseconds from its onset. Return zero for times outside the time range of this envelope." - "Note: Unlike the private method incrementalComputeValueAtMSecs:, this method does is not increment. Thus it is slower, but it doesn't depend on being called sequentially at fixed time intervals." - - | t i | - mSecs < 0 ifTrue: [^ 0.0]. - - ((loopEndMSecs ~~ nil) and: [mSecs >= loopEndMSecs]) ifTrue: [ "decay phase" - t := (points at: loopEndIndex) x + (mSecs - loopEndMSecs). - i := self indexOfPointAfterMSecs: t startingAt: loopEndIndex. - i == nil ifTrue: [^ 0.0]. "past end" - ^ (self interpolate: t between: (points at: i - 1) and: (points at: i)) * decayScale]. - - mSecs < loopStartMSecs ifTrue: [ "attack phase" - i := self indexOfPointAfterMSecs: mSecs startingAt: 1. - i = 1 ifTrue: [^ (points at: 1) y * scale]. - ^ self interpolate: mSecs between: (points at: i - 1) and: (points at: i)]. - - "sustain phase" - loopMSecs = 0 ifTrue: [^ (points at: loopEndIndex) y * scale]. "looping on a single point" - t := loopStartMSecs + ((mSecs - loopStartMSecs) \\ loopMSecs). - i := self indexOfPointAfterMSecs: t startingAt: loopStartIndex. - - ^ self interpolate: t between: (points at: i - 1) and: (points at: i) - ! Item was changed: ----- Method: Envelope>>sustainEnd: (in category 'applying') ----- sustainEnd: mSecs + "Set the ending time of the sustain phase of this envelope; the decay phase will start this + point. Typically derived from a note's duration. + Details: to avoid a sharp transient, the decay phase is scaled so that the beginning of the + decay matches the envelope's instantaneous value when the decay phase starts." - "Set the ending time of the sustain phase of this envelope; the decay phase will start this point. Typically derived from a note's duration." - "Details: to avoid a sharp transient, the decay phase is scaled so that the beginning of the decay matches the envelope's instantaneous value when the decay phase starts." | vIfSustaining firstVOfDecay | + loopEndMSecs := mSecs. "no longer set to nil in order to pretend to be sustaining" - loopEndMSecs := nil. "pretend to be sustaining" decayScale := 1.0. nextRecomputeTime := 0. + vIfSustaining := self computeSustainValueAtMSecs: mSecs. "get value at end of sustain phase" + "loopEndMSecs := mSecs. not required any more" - vIfSustaining := self computeValueAtMSecs: mSecs. "get value at end of sustain phase" - loopEndMSecs := mSecs. firstVOfDecay := (points at: loopEndIndex) y * scale. firstVOfDecay = 0.0 ifTrue: [decayScale := 1.0] ifFalse: [decayScale := vIfSustaining / firstVOfDecay]. ! Item was changed: ----- Method: SimpleMIDIPort>>midiCmd:channel:byte: (in category 'output') ----- midiCmd: cmd channel: channel byte: dataByte + "Immediately output the given MIDI command with the given channel and + argument byte to this MIDI port. Assume that the port is open." - "Immediately output the given MIDI command with the given channel and argument byte to this MIDI port. Assume that the port is open." accessSema critical: [ + self primMIDIWriteNoErrorPort: portNumber - self primMIDIWritePort: portNumber from: (ByteArray with: (cmd bitOr: channel) with: dataByte) at: 0]. ! Item was changed: ----- Method: SimpleMIDIPort>>midiCmd:channel:byte:byte: (in category 'output') ----- midiCmd: cmd channel: channel byte: dataByte1 byte: dataByte2 + "Immediately output the given MIDI command with the given channel + and argument bytes to this MIDI port. Assume that the port is open." - "Immediately output the given MIDI command with the given channel and argument bytes to this MIDI port. Assume that the port is open." accessSema critical: [ + self primMIDIWriteNoErrorPort: portNumber - self primMIDIWritePort: portNumber from: (ByteArray with: (cmd bitOr: channel) with: dataByte1 with: dataByte2) at: 0]. ! From nicolas.cellier.aka.nice at gmail.com Sat Nov 14 00:12:00 2015 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sat Nov 14 00:12:02 2015 Subject: [squeak-dev] The Trunk: Kernel-eem.969.mcz In-Reply-To: <56453d43.766b8c0a.dbeaa.0c7eSMTPIN_ADDED_MISSING@mx.google.com> References: <56453d43.766b8c0a.dbeaa.0c7eSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: 2015-11-13 2:30 GMT+01:00 : > Eliot Miranda uploaded a new version of Kernel to project The Trunk: > http://source.squeak.org/trunk/Kernel-eem.969.mcz > > ==================== Summary ==================== > > Name: Kernel-eem.969 > Author: eem > Time: 12 November 2015, 5:30:04.713 pm > UUID: ec5388a5-1235-4c2d-8ec1-9ec28a9f617a > Ancestors: Kernel-nice.968 > > Fix tow speeling sorres. > Worse than that, words are so short in English, it's not amazing that any typo find an entry in the urban dictionary ;) http://www.urbandictionary.com/define.php?term=sput > Handle the case where a method compiled in the debugger has a large frame. > > =============== Diff against Kernel-nice.968 =============== > > Item was changed: > ----- Method: InstructionPrinter>>callPrimitive: (in category > 'instruction decoding') ----- > callPrimitive: index > + "Print the callPrimitive bytecode." > - "Print the callPrimitive." > > + self print: 'callPrimitive: ' , index printString! > - self print: 'callPrimtive: ' , index printString! > > Item was changed: > ----- Method: Process>>restartTopWith: (in category 'changing suspended > state') ----- > restartTopWith: method > "Rollback top context and replace with new method. Assumes self > is suspended" > > method isQuick > + ifTrue: [self popTo: suspendedContext sender] > + ifFalse: > + [suspendedContext method frameSize >= method > frameSize > + ifTrue: [suspendedContext privRefreshWith: > method] > + ifFalse: > + [self assert: suspendedContext > isExecutingBlock not. > + suspendedContext := MethodContext > + > sender: suspendedContext sender > + > receiver: suspendedContext receiver > + > method: method > + > arguments: ((1 to: method numArgs) collect: > + > [:i| suspendedContext > tempAt: i])]]. > - ifTrue: [ self popTo: suspendedContext sender ] > - ifFalse: [ suspendedContext privRefreshWith: method ]. > ! > > Item was changed: > ----- Method: SmallInteger>>objectForDataStream: (in category 'objects > from disk') ----- > objectForDataStream: refStrm > + "In a 64-bit Spur VM, we may have to fake 32-bit SmallIntegers for > compatibility." > - "In a 64bits sput VM, we may have to fake 32bits SmallInteger for > compatibility" > > | large | > self > 16r3FFFFFFF ifTrue: [ > large := LargePositiveInteger new: self digitLength neg: > false. > 1 to: self digitLength do: [:i | large digitAt: i put: > (self digitAt: i)]. > ^large]. > self < -16r40000000 ifTrue: [ > large := LargeNegativeInteger new: self digitLength neg: > true. > 1 to: self digitLength do: [:i | large digitAt: i put: > (self digitAt: i)]. > ^large]. > + ^ self! > - ^ self > - ! > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151114/9fdce34c/attachment.htm From commits at source.squeak.org Sat Nov 14 00:23:50 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 14 00:23:52 2015 Subject: [squeak-dev] The Trunk: Sound-nice.46.mcz Message-ID: Nicolas Cellier uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-nice.46.mcz ==================== Summary ==================== Name: Sound-nice.46 Author: nice Time: 14 November 2015, 1:23:37.588 am UUID: b477c1a5-5650-43b0-8105-1867382b077c Ancestors: Sound-tpr.45 Pass a boolean to startUpFrom: indicating whether the object came from a different endian machine or not. =============== Diff against Sound-tpr.45 =============== Item was changed: ----- Method: SoundBuffer class>>startUpFrom: (in category 'objects from disk') ----- + startUpFrom: endiannessHasToBeFixed - startUpFrom: anImageSegment "In this case, do we need to swap word halves when reading this segment?" + ^endiannessHasToBeFixed - ^Smalltalk endianness ~~ anImageSegment endianness ifTrue: [Message selector: #swapHalves "will be run on each instance"] ifFalse: [nil]! From eliot.miranda at gmail.com Sat Nov 14 01:01:19 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Nov 14 01:01:22 2015 Subject: [squeak-dev] The Trunk: Kernel-eem.969.mcz In-Reply-To: References: <56453d43.766b8c0a.dbeaa.0c7eSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: On Fri, Nov 13, 2015 at 4:12 PM, Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com> wrote: > > > 2015-11-13 2:30 GMT+01:00 : > >> Eliot Miranda uploaded a new version of Kernel to project The Trunk: >> http://source.squeak.org/trunk/Kernel-eem.969.mcz >> >> ==================== Summary ==================== >> >> Name: Kernel-eem.969 >> Author: eem >> Time: 12 November 2015, 5:30:04.713 pm >> UUID: ec5388a5-1235-4c2d-8ec1-9ec28a9f617a >> Ancestors: Kernel-nice.968 >> >> Fix tow speeling sorres. >> > > Worse than that, words are so short in English, it's not amazing that any > typo find an entry in the urban dictionary ;) > http://www.urbandictionary.com/define.php?term=sput > :-) Sput, man, you right!! > > > >> Handle the case where a method compiled in the debugger has a large frame. >> >> =============== Diff against Kernel-nice.968 =============== >> >> Item was changed: >> ----- Method: InstructionPrinter>>callPrimitive: (in category >> 'instruction decoding') ----- >> callPrimitive: index >> + "Print the callPrimitive bytecode." >> - "Print the callPrimitive." >> >> + self print: 'callPrimitive: ' , index printString! >> - self print: 'callPrimtive: ' , index printString! >> >> Item was changed: >> ----- Method: Process>>restartTopWith: (in category 'changing suspended >> state') ----- >> restartTopWith: method >> "Rollback top context and replace with new method. Assumes self >> is suspended" >> >> method isQuick >> + ifTrue: [self popTo: suspendedContext sender] >> + ifFalse: >> + [suspendedContext method frameSize >= method >> frameSize >> + ifTrue: [suspendedContext >> privRefreshWith: method] >> + ifFalse: >> + [self assert: suspendedContext >> isExecutingBlock not. >> + suspendedContext := MethodContext >> + >> sender: suspendedContext sender >> + >> receiver: suspendedContext receiver >> + >> method: method >> + >> arguments: ((1 to: method numArgs) collect: >> + >> [:i| >> suspendedContext tempAt: i])]]. >> - ifTrue: [ self popTo: suspendedContext sender ] >> - ifFalse: [ suspendedContext privRefreshWith: method ]. >> ! >> >> Item was changed: >> ----- Method: SmallInteger>>objectForDataStream: (in category 'objects >> from disk') ----- >> objectForDataStream: refStrm >> + "In a 64-bit Spur VM, we may have to fake 32-bit SmallIntegers >> for compatibility." >> - "In a 64bits sput VM, we may have to fake 32bits SmallInteger for >> compatibility" >> >> | large | >> self > 16r3FFFFFFF ifTrue: [ >> large := LargePositiveInteger new: self digitLength neg: >> false. >> 1 to: self digitLength do: [:i | large digitAt: i put: >> (self digitAt: i)]. >> ^large]. >> self < -16r40000000 ifTrue: [ >> large := LargeNegativeInteger new: self digitLength neg: >> true. >> 1 to: self digitLength do: [:i | large digitAt: i put: >> (self digitAt: i)]. >> ^large]. >> + ^ self! >> - ^ self >> - ! >> >> >> > > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151113/669af98d/attachment.htm From tim at rowledge.org Sat Nov 14 02:55:51 2015 From: tim at rowledge.org (tim Rowledge) Date: Sat Nov 14 02:55:58 2015 Subject: [squeak-dev] Missing MC notification Message-ID: Well this is odd; a couple of hours ago I committed a revision to the Morphic package but no message has arrived from commits@source.squeak.org. Did I kill something? OK, so just as a way to avoid nasty surprises, there is the commit comment - DockingBarMorph - don't allow editing of menu items unless a preference is set. It isn't something you want in a production application. The squeak menu ought to be a DockingBarMenuMorph, not a plain menu morph. MenuMorph>popUpAdjacentTo:forHand:from: misuses 'owner owner' instead of 'world' Add option for dragged Morphs to tell the Hand that they handlewhat happens when being dragged; useful for dragging Morphs that take a long time to draw the shadow, or perhaps want to render quite differently etc. The ugly bit I don?t like is DockingBarItemMorph>>#wantsKeyboardFocusOnShiftClick and how it seems I need to handle the preference. To add pref more directly would require modification of a System package, which seems overkill. Ideas? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: GLV: Ground the Line Voltage From euanmee at gmail.com Sat Nov 14 05:02:53 2015 From: euanmee at gmail.com (EuanM) Date: Sat Nov 14 05:02:55 2015 Subject: [squeak-dev] New Introductory Tutorial Message-ID: I've created Yet Another Smalltalk First Steps tutorial. This is intended as one of a series. It is designed to be cross-platform across Squeak 5 Pharo 4 Seaside 3.1 Cuis Dolphin 6 If you have experience running any of these systems on Windows, Linux or MacOS, please check to see if I have the instructions correct for your chosen pairing of Smalltalk and OS platform. (As you'll see when you look, I do not have detailed instructions for aspects of MacOS). The document is at: http://smalltalkinsmallsteps.blogspot.co.uk/2015/11/get-smalltalk-up-and-running.html (It's intended to move to a different blog after this review process). I feel the need to do this as cross-Smalltalks tutorial because of findings and 4 charts I've placed at: http://smalltalkinsmallsteps.blogspot.co.uk/2015/11/mindshare-of-smalltalk-in-development.html Essentially, Smalltalk mindshare and use is incredibly tiny, compared to other languages in the same space. (We all know this, but seeing it represented graphically has a more visceral effect, IMO) Aggregating interest in all the Smalltalks still does not bring more than a tiny proportion of the interest in, and use of, Ruby. In turn, Ruby is (quite understandably) small in comparison to JavaScript. Comparing interest in any specific Smalltalk is, predictably, smaller than the aggregate interest in Smalltalk. Our community seems determined to split itself into smaller and smaller sub-communities. I think we do ourselves a disservice this way. My initial contribution will be to try to provide some explicitly pan-Smalltalk beginners' tutorials, like this one. Cheers, and happy Smalltalking, EuanM From Marcel.Taeumel at hpi.de Sat Nov 14 06:56:28 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Nov 14 07:10:47 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1035.mcz In-Reply-To: References: Message-ID: <1447484188310-4860997.post@n4.nabble.com> Yes. The other thing might be that system window close undo thingy. Not sure. The world menu has an undo. The is a more gobal command pattern for the Morphic land. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1035-mcz-tp4860812p4860997.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Nov 14 07:01:55 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Nov 14 07:16:14 2015 Subject: [squeak-dev] Re: Missing MC notification In-Reply-To: References: Message-ID: <1447484515609-4861000.post@n4.nabble.com> Hi Tim, there is no upddate from you available for the Morphic package. :-/ Last version in the update stream is mt.1037. Best, Marcel -- View this message in context: http://forum.world.st/Missing-MC-notification-tp4860985p4861000.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From btc at openinworld.com Sat Nov 14 17:01:33 2015 From: btc at openinworld.com (Ben Coman) Date: Sat Nov 14 17:01:56 2015 Subject: [squeak-dev] New Introductory Tutorial In-Reply-To: References: Message-ID: On Sat, Nov 14, 2015 at 1:02 PM, EuanM wrote: > I've created Yet Another Smalltalk First > Steps tutorial. > > This is intended as one of a series. > > It is designed to be cross-platform across > > Squeak 5 > Pharo 4 > Seaside 3.1 > Cuis > Dolphin 6 > > If you have experience running any of these systems on Windows, Linux > or MacOS, please check to see if I have the instructions correct for > your chosen pairing of Smalltalk and OS platform. > > (As you'll see when you look, I do not have detailed instructions for > aspects of MacOS). > > The document is at: > http://smalltalkinsmallsteps.blogspot.co.uk/2015/11/get-smalltalk-up-and-running.html > > (It's intended to move to a different blog after this review process). > > I feel the need to do this as cross-Smalltalks tutorial because of > findings and 4 charts I've placed at: > http://smalltalkinsmallsteps.blogspot.co.uk/2015/11/mindshare-of-smalltalk-in-development.html > Hi Euan, I don't understand what this measures... "The Top Ten most popular questions on Stack Overflow, for each Tag" ...maybe the sum count of votes for those top ten questions? cheers -ben From asqueaker at gmail.com Sat Nov 14 17:33:08 2015 From: asqueaker at gmail.com (Chris Muller) Date: Sat Nov 14 17:33:10 2015 Subject: [squeak-dev] Missing MC notification In-Reply-To: References: Message-ID: > Well this is odd; a couple of hours ago I committed a revision to the Morphic package but no message has arrived from commits@source.squeak.org. Did I kill something? > > OK, so just as a way to avoid nasty surprises, there is the commit comment - > > DockingBarMorph - don't allow editing of menu items unless a preference is set. It isn't something you want in a production application. Why? Users often like to label things to their purpose or liking. It seems harmless enough....? > The squeak menu ought to be a DockingBarMenuMorph, not a plain menu morph. Hmm, a docking bar docks against the edge of the screen, a plain menu doesn't.. > MenuMorph>popUpAdjacentTo:forHand:from: misuses 'owner owner' instead of 'world' > Add option for dragged Morphs to tell the Hand that they handlewhat happens when being dragged; useful for dragging Morphs that take a long time to draw the shadow, or perhaps want to render quite differently etc. > > The ugly bit I don?t like is DockingBarItemMorph>>#wantsKeyboardFocusOnShiftClick and how it seems I need to handle the preference. To add pref more directly would require modification of a System package, which seems overkill. Ideas? Maybe instead of a new preference how about simply removing StringMorph>>#handlesMouseDown: and let external apps register / unregister their own eventHandler (see Morph>>#handlesMouseDown:)? From commits at source.squeak.org Sat Nov 14 19:31:56 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 14 19:31:58 2015 Subject: [squeak-dev] The Trunk: Morphic-tpr.1038.mcz Message-ID: tim Rowledge uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tpr.1038.mcz ==================== Summary ==================== Name: Morphic-tpr.1038 Author: tpr Time: 13 November 2015, 4:49:05.868 pm UUID: 677751c2-0b1e-4ae5-ab35-183319ec6919 Ancestors: Morphic-mt.1037, Morphic-tpr.996 DockingBarMorph - don't allow editing of menu items unless a preference is set. It isn't something you want in a production application. The squeak menu ought to be a DockingBarMenuMorph, not a plain menu morph. MenuMorph>popUpAdjacentTo:forHand:from: misuses 'owner owner' instead of 'world' Add option for dragged Morphs to tell the Hand that they handlewhat happens when being dragged; useful for dragging Morphs that take a long time to draw the shadow, or perhaps want to render quite differently etc. =============== Diff against Morphic-mt.1037 =============== Item was changed: ----- Method: DockingBarItemMorph>>mouseDown: (in category 'events') ----- mouseDown: evt "Handle a mouse down event. Menu items get activated when the mouse is over them." + (evt shiftPressed and:[self wantsKeyboardFocusOnShiftClick]) ifTrue: [ ^super mouseDown: evt ]. "enable label editing" - evt shiftPressed ifTrue: [ ^super mouseDown: evt ]. "enable label editing" isSelected ifTrue: [ evt hand newMouseFocus: nil. owner selectItem: nil event: evt. ] ifFalse: [ (self containsPoint: evt position) ifFalse: [ self halt ]. owner activate: evt. "Redirect to menu for valid transitions" owner selectItem: self event: evt. ] ! Item was added: + ----- Method: DockingBarItemMorph>>wantsKeyboardFocusOnShiftClick (in category 'events') ----- + wantsKeyboardFocusOnShiftClick + "set this preference to false to prevent user editing of docking bar menu items" + ^Preferences enable: #allowMenubarItemEditing! Item was changed: ----- Method: DockingBarMorph class>>squeakMenu (in category 'samples') ----- squeakMenu | menu | + menu := DockingBarMenuMorph new defaultTarget: self. - menu := MenuMorph new defaultTarget: self. menu add: 'Hello' target: self selector: #inform: argument: 'Hello World!!'. menu add: 'Long Hello' target: self selector: #inform: argument: 'Helloooo World!!'. menu add: 'A very long Hello' target: self selector: #inform: argument: 'Hellooooooooooooooo World!!'. menu add: 'An incredible long Hello' target: self selector: #inform: argument: 'Hellooooooooooooooooooooooo World!!'. ^ menu! Item was changed: ----- Method: HandMorph>>fullDrawOn: (in category 'drawing') ----- fullDrawOn: aCanvas "A HandMorph has unusual drawing requirements: 1. the hand itself (i.e., the cursor) appears in front of its submorphs 2. morphs being held by the hand cast a shadow on the world/morphs below The illusion is that the hand plucks up morphs and carries them above the world." "Note: This version caches an image of the morphs being held by the hand for better performance. This cache is invalidated if one of those morphs changes." | disableCaching subBnds | self visible ifFalse: [^self]. (aCanvas isVisible: self fullBounds) ifFalse: [^self]. (self hasProperty: #errorOnDraw) ifTrue:[^self drawErrorOn: aCanvas]. disableCaching := false. disableCaching ifTrue: [self nonCachingFullDrawOn: aCanvas. ^self]. submorphs isEmpty ifTrue: [cacheCanvas := nil. ^self drawOn: aCanvas]. "just draw the hand itself" + + "special handling of a single submorph that wants to do its own thing + when being dragged" + (submorphs size = 1 + and: [submorphs first handledOwnDraggingBy: self on: aCanvas]) + ifTrue: [^ self drawOn: aCanvas]. + subBnds := Rectangle merging: (submorphs collect: [:m | m fullBounds]). self updateCacheCanvas: aCanvas. (cacheCanvas isNil or: [cachedCanvasHasHoles and: [cacheCanvas depth = 1]]) ifTrue: ["could not use caching due to translucency; do full draw" self nonCachingFullDrawOn: aCanvas. ^self]. "draw the shadow" aCanvas asShadowDrawingCanvas translateBy: self shadowOffset during: [:shadowCanvas | cachedCanvasHasHoles ifTrue: ["Have to draw the real shadow of the form" shadowCanvas paintImage: cacheCanvas form at: subBnds origin] ifFalse: ["Much faster if only have to shade the edge of a solid rectangle" (subBnds areasOutside: (subBnds translateBy: self shadowOffset negated)) do: [:r | shadowCanvas fillRectangle: r color: Color black]]]. "draw morphs in front of the shadow using the cached Form" cachedCanvasHasHoles ifTrue: [aCanvas paintImage: cacheCanvas form at: subBnds origin] ifFalse: [aCanvas drawImage: cacheCanvas form at: subBnds origin sourceRect: cacheCanvas form boundingBox]. self drawOn: aCanvas "draw the hand itself in front of morphs"! Item was changed: ----- Method: MenuMorph>>popUpAdjacentTo:forHand:from: (in category 'control') ----- popUpAdjacentTo: rightOrLeftPoint forHand: hand from: sourceItem "Present this menu at the given point under control of the given hand." | tryToPlace selectedOffset rightPoint leftPoint | hand world startSteppingSubmorphsOf: self. popUpOwner := sourceItem. self fullBounds. self updateColor. "ensure layout is current" selectedOffset := (selectedItem ifNil: [self items first]) position - self position. tryToPlace := [:where :mustFit | | delta | self position: where - selectedOffset. delta := self boundsInWorld amountToTranslateWithin: sourceItem worldBounds. (delta x = 0 or: [mustFit]) ifTrue: [delta = (0 @ 0) ifFalse: [self position: self position + delta]. + sourceItem world addMorphFront: self. - sourceItem owner owner addMorphFront: self. ^ self]]. rightPoint := rightOrLeftPoint first + ((self layoutInset + self borderWidth) @ 0). leftPoint := rightOrLeftPoint last - ((self layoutInset + self borderWidth + self width) @ 0). tryToPlace value: rightPoint value: false; value: leftPoint value: false; value: rightPoint value: true.! Item was added: + ----- Method: Morph>>handledOwnDraggingBy:on: (in category 'dropping/grabbing') ----- + handledOwnDraggingBy: aHandMorph on: aCanvas + "this is my chance to do something differrent to the normal dragging work. return true if I did what I wanted, false if not" + ^false! From commits at source.squeak.org Sat Nov 14 19:33:39 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 14 19:33:41 2015 Subject: [squeak-dev] The Trunk: Morphic-tpr.1039.mcz Message-ID: tim Rowledge uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tpr.1039.mcz ==================== Summary ==================== Name: Morphic-tpr.1039 Author: tpr Time: 14 November 2015, 11:33:01.516 am UUID: 692c74f8-6f76-42a7-8581-64200e813180 Ancestors: Morphic-tpr.1038 Fix mistaken usage of preference in DockingBarItemMorph>>#wantsKeyboardFocusOnShiftClick =============== Diff against Morphic-tpr.1038 =============== Item was changed: ----- Method: DockingBarItemMorph>>wantsKeyboardFocusOnShiftClick (in category 'events') ----- wantsKeyboardFocusOnShiftClick "set this preference to false to prevent user editing of docking bar menu items" + ^Preferences valueOfPreference: #allowMenubarItemEditing ifAbsent: [true]! - ^Preferences enable: #allowMenubarItemEditing! From tim at rowledge.org Sat Nov 14 19:34:56 2015 From: tim at rowledge.org (tim Rowledge) Date: Sat Nov 14 19:35:00 2015 Subject: [squeak-dev] Missing MC notification In-Reply-To: <1447484515609-4861000.post@n4.nabble.com> References: <1447484515609-4861000.post@n4.nabble.com> Message-ID: > On 13-11-2015, at 11:01 PM, marcel.taeumel wrote: > > Hi Tim, > > there is no upddate from you available for the Morphic package. :-/ Last > version in the update stream is mt.1037. Apparently I sent it to http://source.squeak.org/squeak50 instead of trunk. I?ve just now worked out that ?copy? can move a package, so that might fix it. I *don?t know how to remove the unwanted package from the squeak50 repository. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: IA: Illogical And From tim at rowledge.org Sat Nov 14 19:39:38 2015 From: tim at rowledge.org (tim Rowledge) Date: Sat Nov 14 19:39:42 2015 Subject: [squeak-dev] Missing MC notification In-Reply-To: References: Message-ID: > On 14-11-2015, at 9:33 AM, Chris Muller wrote: >> DockingBarMorph - don't allow editing of menu items unless a preference is set. It isn't something you want in a production application. > > Why? Users often like to label things to their purpose or liking. It > seems harmless enough?.? Really? Having kids able to mangle the UI and mess up a lesson doesn?t seem like a good idea to me. Not to mention that the editing isn?t done terribly attractively - the fonts don?t match, the colours used are grody etc. For developers, okay, whatever. End-users? Not so much. > >> The squeak menu ought to be a DockingBarMenuMorph, not a plain menu morph. > > Hmm, a docking bar docks against the edge of the screen, a plain menu doesn't.. Err, wrong class. The menus for a docking bar need to be a little different. The squeakMenu was left behind and just needed bringing into the fold. > >> MenuMorph>popUpAdjacentTo:forHand:from: misuses 'owner owner' instead of 'world' >> Add option for dragged Morphs to tell the Hand that they handlewhat happens when being dragged; useful for dragging Morphs that take a long time to draw the shadow, or perhaps want to render quite differently etc. >> >> The ugly bit I don?t like is DockingBarItemMorph>>#wantsKeyboardFocusOnShiftClick and how it seems I need to handle the preference. To add pref more directly would require modification of a System package, which seems overkill. Ideas? > > Maybe instead of a new preference how about simply removing > StringMorph>>#handlesMouseDown: and let external apps register / > unregister their own eventHandler (see Morph>>#handlesMouseDown:)? No idea. If it would work better and allow me to lock it out of the range of Scratch using kids I don?t care how it?s done. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: PFM: Pray For Miracle From lewis at mail.msen.com Sat Nov 14 19:59:50 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Nov 14 19:59:53 2015 Subject: [squeak-dev] Missing MC notification In-Reply-To: References: <1447484515609-4861000.post@n4.nabble.com> Message-ID: <20151114195950.GA14336@shell.msen.com> On Sat, Nov 14, 2015 at 11:34:56AM -0800, tim Rowledge wrote: > > > On 13-11-2015, at 11:01 PM, marcel.taeumel wrote: > > > > Hi Tim, > > > > there is no upddate from you available for the Morphic package. :-/ Last > > version in the update stream is mt.1037. > > Apparently I sent it to http://source.squeak.org/squeak50 instead of trunk. I???ve just now worked out that ???copy??? can move a package, so that might fix it. I *don???t know how to remove the unwanted package from the squeak50 repository. > I deleted it from squeak50. You can do this from the source.squeak.org web interface. Go to the "latest" tab, find the version you want to get rid of, click "details" then click on the "Delete Version" option on the left side of the page under "Actions". Dave From commits at source.squeak.org Sat Nov 14 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 14 22:55:05 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151114225502.11478.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009155.html Name: Graphics-tpr.319 Ancestors: Graphics-tpr.318 Second try - Add support for Pi-accelerating bitblt colour testing calls. Make StrikeFont loading methods actually work. Change Form>asFormOfDepth: - this may possibly be contentious but it certainly makes Scratch image loading more reliable ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009156.html Name: Sound-tpr.45 Ancestors: Sound-tpr.44 Sounds changes ported across from Scratch work; you really don't want an error raising prim call inside a critical block if possible. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009157.html Name: Sound-nice.46 Ancestors: Sound-tpr.45 Pass a boolean to startUpFrom: indicating whether the object came from a different endian machine or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009158.html Name: Morphic-tpr.1038 Ancestors: Morphic-mt.1037, Morphic-tpr.996 DockingBarMorph - don't allow editing of menu items unless a preference is set. It isn't something you want in a production application. The squeak menu ought to be a DockingBarMenuMorph, not a plain menu morph. MenuMorph>popUpAdjacentTo:forHand:from: misuses 'owner owner' instead of 'world' Add option for dragged Morphs to tell the Hand that they handlewhat happens when being dragged; useful for dragging Morphs that take a long time to draw the shadow, or perhaps want to render quite differently etc. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009159.html Name: Morphic-tpr.1039 Ancestors: Morphic-tpr.1038 Fix mistaken usage of preference in DockingBarItemMorph>>#wantsKeyboardFocusOnShiftClick ============================================= From Marcel.Taeumel at hpi.de Sun Nov 15 12:21:06 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Nov 15 12:35:34 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1035.mcz In-Reply-To: <1447484188310-4860997.post@n4.nabble.com> References: <1447484188310-4860997.post@n4.nabble.com> Message-ID: <1447590066382-4861112.post@n4.nabble.com> Note that I am reviewing a possible integration with the CommandHistory hierarchy/mechanism. I am aware of it's rough idea and that it used to be used for multi-level text undo in Squeak 3.9. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1035-mcz-tp4860812p4861112.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Das.Linux at gmx.de Sun Nov 15 18:11:17 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Sun Nov 15 18:11:21 2015 Subject: [squeak-dev] Undo and 5.0 Message-ID: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> Hi all, now that we have a non-broken (ie, working) text-undo in trunk, we surely should backport it to 4.6/5.0. It is broken there[1] and we should fix that bug. Are there any reasons not to? Best regards -Tobias [1]: (and already annoying newcomers in our courses) From commits at source.squeak.org Mon Nov 16 04:18:55 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 16 04:18:57 2015 Subject: [squeak-dev] The Trunk: SMBase-cmm.135.mcz Message-ID: Chris Muller uploaded a new version of SMBase to project The Trunk: http://source.squeak.org/trunk/SMBase-cmm.135.mcz ==================== Summary ==================== Name: SMBase-cmm.135 Author: cmm Time: 15 November 2015, 10:18:47.603 pm UUID: a9aa0793-91e8-42f4-b71c-8d6509093832 Ancestors: SMBase-eem.134 Minor fix. =============== Diff against SMBase-eem.134 =============== Item was changed: ----- Method: SMPackage>>releaseWithId: (in category 'services') ----- releaseWithId: anIdString - "Look up a specific package release of mine. Return nil if missing. - They are few so we just do a #select:." - | anId | anId := UUID fromString: anIdString. + ^ releases + detect: [ : each | each id = anId ] + ifNone: [ nil ]! - releases detect: [:rel | rel id = anId ]. - ^nil! From commits at source.squeak.org Mon Nov 16 05:07:29 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 16 05:07:31 2015 Subject: [squeak-dev] The Trunk: Morphic-cmm.1040.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1040.mcz ==================== Summary ==================== Name: Morphic-cmm.1040 Author: cmm Time: 15 November 2015, 11:06:42.328 pm UUID: 912689c9-ab7b-461d-92b3-177f671fde54 Ancestors: Morphic-tpr.1039 - Consolidate Command+hg into, more-simply, Command+g, recovering the lowercase "h" hot-key for future use. Hot keys have become a valuable commodity. - Fix the in-place search-and-replace function. Command+g and j now function together, harmoniously, for the user. =============== Diff against Morphic-tpr.1039 =============== Item was changed: ----- Method: TextEditor class>>initializeCmdKeyShortcuts (in category 'keyboard shortcut tables') ----- initializeCmdKeyShortcuts "Initialize the (unshifted) command-key (or alt-key) shortcut table." "NOTE: if you don't know what your keyboard generates, use Sensor kbdTest" "TextEditor initialize" | cmdMap cmds | cmdMap := Array new: 256 withAll: #noop:. "use temp in case of a crash" cmdMap at: 1 + 1 put: #cursorHome:. "home key" cmdMap at: 4 + 1 put: #cursorEnd:. "end key" cmdMap at: 8 + 1 put: #backspace:. "ctrl-H or delete key" cmdMap at: 11 + 1 put: #cursorPageUp:. "page up key" cmdMap at: 12 + 1 put: #cursorPageDown:. "page down key" cmdMap at: 13 + 1 put: #crWithIndent:. "cmd-Return" cmdMap at: 27 + 1 put: #offerMenuFromEsc:. "escape key" cmdMap at: 28 + 1 put: #cursorLeft:. "left arrow key" cmdMap at: 29 + 1 put: #cursorRight:. "right arrow key" cmdMap at: 30 + 1 put: #cursorUp:. "up arrow key" cmdMap at: 31 + 1 put: #cursorDown:. "down arrow key" cmdMap at: 32 + 1 put: #selectWord:. "space bar key" cmdMap at: 127 + 1 put: #forwardDelete:. "del key" '0123456789-=' do: [:char | cmdMap at: char asciiValue + 1 put: #changeEmphasis:]. '([<{|"''' do: [:char | cmdMap at: char asciiValue + 1 put: #enclose:]. + cmds := #($a #selectAll: $c #copySelection: $e #exchange: $f #find: $g #findAgain: $j #doAgain: $k #offerFontMenu: $u #align: $v #paste: $w #backWord: $x #cut: $y #swapChars: $z #undo:). - cmds := #($a #selectAll: $c #copySelection: $e #exchange: $f #find: $g #findAgain: $h #setSearchString: $j #doAgain: $k #offerFontMenu: $u #align: $v #paste: $w #backWord: $x #cut: $y #swapChars: $z #undo:). 1 to: cmds size by: 2 do: [:i | cmdMap at: (cmds at: i) asciiValue + 1 put: (cmds at: i + 1)]. cmdActions := cmdMap! Item was changed: ----- Method: TextEditor>>findAgain: (in category 'typing/selecting keys') ----- findAgain: aKeyboardEvent + | previousHistory | + previousHistory := self history previous. + self + insertAndCloseTypeIn ; + findAgainSettingSearch: (previousHistory isNil or: [ previousHistory hasReplacedSomething not ]). - "Find the desired text again. 1/24/96 sw" - - self insertAndCloseTypeIn. - self findAgain. ^ true! Item was added: + ----- Method: TextEditor>>findAgainSettingSearch: (in category 'menu messages') ----- + findAgainSettingSearch: aBoolean + aBoolean ifTrue: + [ self hasSelection ifTrue: + [ self setSearch: self selection string ] ]. + self findAgain! Item was changed: ----- Method: TextEditor>>findReplaceAgain (in category 'menu messages') ----- findReplaceAgain | where | self hasSelection ifTrue: [ "Search from the beginning of the current selection. Supports a nice combination with regular find feature." self selectInvisiblyFrom: self startIndex to: self startIndex - 1]. where := self text findString: FindText + startingAt: self stopIndex-FindText size - startingAt: self stopIndex caseSensitive: Preferences caseSensitiveFinds. where = 0 ifTrue: [^ false]. self selectInvisiblyFrom: where to: where + FindText size - 1. self replaceSelectionWith: ChangeText. ^ true! Item was changed: ----- Method: TextEditor>>mouseMove: (in category 'events') ----- + mouseMove: evt - mouseMove: evt "Change the selection in response to mouse-down drag" - pointBlock := paragraph characterBlockAtPoint: evt position. + self + storeSelectionInParagraph ; + setSearch: self selection string! - self storeSelectionInParagraph! Item was changed: ----- Method: TextEditor>>selectFrom:to: (in category 'new selection') ----- selectFrom: start to: stop "Select the specified characters inclusive." self selectInvisiblyFrom: start to: stop. self closeTypeIn. self storeSelectionInParagraph. "Preserve current emphasis if selection is empty" stop > start ifTrue: [ + self setEmphasisHere ]. + self hasSelection ifTrue: [ self setSearch: self selection string ]! - self setEmphasisHere ]! Item was removed: - ----- Method: TextEditor>>setSearchString: (in category 'nonediting/nontyping keys') ----- - setSearchString: aKeyboardEvent - "Establish the current selection as the current search string." - - | aString | - self insertAndCloseTypeIn. - self lineSelectAndEmptyCheck: [^ true]. - aString := self selection string. - aString size = 0 - ifTrue: - [self flash] - ifFalse: - [self setSearch: aString]. - ^ true! From ma.chris.m at gmail.com Mon Nov 16 05:17:22 2015 From: ma.chris.m at gmail.com (Chris Muller) Date: Mon Nov 16 05:18:04 2015 Subject: [squeak-dev] undo question Message-ID: Hi Marcel, the new undo is great but I couldn't make it work across cmd+l (cancelEdits) and cmd+s #accept, because it seems that the 'history' is discarded with the entire 'editor' by process of eagerly calling #releaseEditor. I know that was already there forever, but do you know whether that is really necessary? Those Editors could just go away soon enough when the SystemWindow was closed, in the meantime, the user having access to undo across saves and restores (as modern text editors do) would be very useful. From commits at source.squeak.org Mon Nov 16 06:04:37 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 16 06:04:40 2015 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-cmm.32.mcz Message-ID: Chris Muller uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-cmm.32.mcz ==================== Summary ==================== Name: Help-Squeak-Project-cmm.32 Author: cmm Time: 16 November 2015, 12:04:29.816 am UUID: c9f86cd7-1fc7-4e4b-b55e-864255f35ba5 Ancestors: Help-Squeak-Project-cmm.31 - Clarify functions of Command+f, g, and j. - Some minor tweaks. - What is a "recognizer"? - Command+Z is now Redo. =============== Diff against Help-Squeak-Project-cmm.31 =============== Item was changed: ----- Method: SqueakTutorialsCommandKey class>>commandKeyMappings (in category 'as yet unclassified') ----- commandKeyMappings "This method was automatically generated. Edit it using:" "SqueakTutorialsCommandKey edit: #commandKeyMappings" ^HelpTopic title: 'Command Key Mappings' contents: 'Lower-case command keys (use with Cmd key on Mac and Alt key on other platforms) a Select all b Browse it (selection is a class name or cursor is over a class-list or message-list) c Copy selection d Do it (selection is a valid expression) e Exchange selection with prior selection + f Find text with a dialog + g Find the current selection again + j Repeat the last selection replacement + i Inspect it - f Find - g Find again - h Set selection as search string for find again - i Inspect it (selection is a valid expression, or selection is over an inspect-ilst) - j Again once (do the last text-related operation again) k Set font + l Cancel text edit + m Implementors of it + n Senders of it - l Cancel - m Implementors of it (selection is a message selector or cursor is over a class-list or message-list) - n Senders of it (selection is a message selector or cursor is over a class-list or message-list) o Spawn current method p Print it (selection is a valid expression) q Query symbol (toggle all possible completion for a given prefix) - r Recognizer s Save (i.e. accept) t Finds a Transcript (when cursor is over the desktop) u Toggle alignment v Paste + w Select/Delete preceding word (over text); Close-window (over morphic desktop) - w Delete preceding word (over text); Close-window (over morphic desktop) x Cut selection y Swap characters z Undo Note: for Do it, Senders of it, etc., a null selection will be expanded to a word or to the current line in an attempt to do what you want. Also note that Senders/Implementors of it will find the outermost keyword selector in a large selection, as when you have selected a bracketed expression or an entire line. Finally note that the same cmd-m and cmd-n (and cmd-v for versions) work in the message pane of most browsers. Upper-case command keys (use with Shift-Cmd, or Ctrl on Mac or Shift-Alt on other platforms; sometimes Ctrl works too) A Advance argument B Browse it in this same browser (in System browsers only) C Compare the selected text to the clipboard contents D Debug-It E Method strings containing it F Insert ''ifFalse:'' G fileIn from it (a file name) H cursor TopHome: I Inspect via Object Explorer J Again many (apply the previous text command repeatedly until the end of the text) K Set style L Outdent (move selection one tab-stop left) M Select current type-in N References to it (selection is a class name, or cursor is over a class-list or message-list) O Open single-message browser (in message lists) P Make project link R Indent (move selection one tab-stap right) S Search T Insert ''ifTrue:'' U Convert linefeeds to carriage returns in selection V Paste author''s initials W Selectors containing it (in text); show-world-menu (when issued with cursor over desktop) X Force selection to lowercase Y Force selection to uppercase - Z Capitalize all words in selection Other special keys Backspace Backward delete character Shift-Bksp Backward select or delete word Del Forward delete character Shift-Del Forward delete word Esc Pop up the context menu Shift+Esc Pop up the World Menu Cmd+Esc Close the active window Ctrl+Esc Present a list of open windows \ Send the active window to the back Cursor keys left, right, up, down Move cursor left, right, up or down Ctrl-left Move cursor left one word Ctrl-right Move cursor right one word Home Move cursor to begin of line or begin of text End Move cursor to end of line or end of text PgUp, Ctrl-up Move cursor up one page PgDown, Ctrl-Dn Move cursor down one page Note all these keys can be used together with Shift to define or enlarge the selection. You cannot however shrink that selection again, as in some other systems. Other Cmd-key combinations (not available on all platforms) Return Insert return followed by as many tabs as the previous line (with a further adjustment for additional brackets in that line) Space Select the current word as with double clicking Enclose the selection in a kind of bracket. Each is a toggle. (not available on all platforms) Ctrl-( Toggle enclosure within parentheses Ctrl-[ Toggle enclosure within brackets Crtl-{ Toggle enclosre within curly braces Ctrl-< Toggle enclosre within less-than / greater-than (HTML) Ctrl-'' Toggle enclosure within double-quotes Ctrl-'' Toggle encllosure within single-quotes Note also that you can double-click just inside any of the above delimiters, or at the beginning or end of a line, to select the text enclosed. Text Emphasis (not available on all platforms) Cmd-1 type the first method argument Cmd-2 type the second method argument Cmd-3 type the third method argument Cmd-4 type the fourth method argument Cmd-5 for future use Cmd-6 color, action-on-click, link to class comment, link to method, url Brings up a menu. To remove these properties, select more than the active part and then use command-0. Cmd-7 bold Cmd-8 italic Cmd-9 narrow (same as negative kern) Cmd-0 plain text (resets all emphasis) Cmd-- underlined (toggles it) Cmd-= struck out (toggles it) Shift-Cmd-- (aka :=) negative kern (letters 1 pixel closer) Shift-Cmd-+ positive kern (letters 1 pixel larger spread) Docking Bar Ctrl- opens the n-th (where n is between 0 and 7) menu if such exists, otherwise it moves the keyboard focus to the Search Bar. Currently this means: Ctrl-0 Activates Search Bar Ctrl-1 Squeak menu Ctrl-2 Projects menu Ctrl-3 Tools menu Ctrl-4 Apps menu Ctrl-5 Extras menu Ctrl-6 Windows menu Ctrl-7 Help menu !!' readStream nextChunkText! From commits at source.squeak.org Mon Nov 16 06:07:15 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 16 06:07:17 2015 Subject: [squeak-dev] The Trunk: Tools-cmm.652.mcz Message-ID: Chris Muller uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-cmm.652.mcz ==================== Summary ==================== Name: Tools-cmm.652 Author: cmm Time: 16 November 2015, 12:06:46.092 am UUID: 9911b7d5-97f5-403d-b9bd-10f71d9c99dc Ancestors: Tools-mt.651 - Assign the selected category if no prior method was selected. =============== Diff against Tools-mt.651 =============== Item was changed: ----- Method: Browser>>defineMessageFrom:notifying: (in category 'message functions') ----- defineMessageFrom: aString notifying: aController "Compile the expressions in aString. Notify aController if a syntax error occurs. Install the compiled method in the selected class classified under the currently selected message category name. Answer the selector obtained if compilation succeeds, nil otherwise." | selectedMessageName selector category oldMessageList selectedClassOrMetaClass | selectedMessageName := self selectedMessageName. oldMessageList := self messageList. selectedClassOrMetaClass := self selectedClassOrMetaClass. contents := nil. selector := (selectedClassOrMetaClass newParser parseSelector: aString). (self metaClassIndicated and: [(selectedClassOrMetaClass includesSelector: selector) not and: [Metaclass isScarySelector: selector]]) ifTrue: ["A frist-time definition overlaps the protocol of Metaclasses" (self confirm: ((selector , ' is used in the existing class system. Overriding it could cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: selector size)) ifFalse: [^nil]]. + category := selectedMessageName + ifNil: [ self selectedMessageCategoryName ] + ifNotNil: [ (selectedClassOrMetaClass >> selectedMessageName) methodReference ifNotNil: [ : ref | ref category ]]. selector := selectedClassOrMetaClass compile: aString + classified: category - classified: (selectedMessageName ifNotNil: [category := (selectedClassOrMetaClass >> selectedMessageName) methodReference ifNotNil: [ : ref | ref category ]]) notifying: aController. selector == nil ifTrue: [^ nil]. contents := aString copy. selector ~~ selectedMessageName ifTrue: [category = ClassOrganizer nullCategory ifTrue: [self changed: #classSelectionChanged. self changed: #classList. self messageCategoryListIndex: 1]. self setClassOrganizer. "In case organization not cached" (oldMessageList includes: selector) ifFalse: [self changed: #messageList]. self messageListIndex: (self messageList indexOf: selector)]. ^ selector! From tim at rowledge.org Mon Nov 16 06:16:03 2015 From: tim at rowledge.org (tim Rowledge) Date: Mon Nov 16 06:16:07 2015 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-cmm.32.mcz In-Reply-To: <201511160604.tAG64f5Q022334@mail63c0.megamailservers.com> References: <201511160604.tAG64f5Q022334@mail63c0.megamailservers.com> Message-ID: > - What is a "recognizer?? It is/was (no idea if it still works or even exists) a gesture recogniser for pen-like input. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Lightbulb over his head is burned out. From Marcel.Taeumel at hpi.de Mon Nov 16 06:26:57 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 16 06:41:29 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1040.mcz In-Reply-To: References: Message-ID: <1447655217164-4861164.post@n4.nabble.com> ...now the user has to be very careful when to change the selection... I think there is room for improvement. :) Why not just change the selection on find-again? Why on mouse-down? This is too brittle... It looks like that #findAgainSettingSearch: brings back that complicated interface into the TextEditor (#doAgain:many: *sigh*), that tried to simplify. ;-) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-cmm-1040-mcz-tp4861159p4861164.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Nov 16 06:31:45 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 16 06:46:18 2015 Subject: [squeak-dev] Re: undo question In-Reply-To: References: Message-ID: <1447655505671-4861165.post@n4.nabble.com> No, I do not know, why the editor is released when accepting changes. However, it makes sense to purge the history of somebody exchanges all the text from the outside. The way it works now, it's quite robust. But there may be situations where we could retain the history such as this save operation. Best, Marcel -- View this message in context: http://forum.world.st/undo-question-tp4861160p4861165.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Nov 16 06:37:57 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 16 06:52:30 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1040.mcz In-Reply-To: <1447655217164-4861164.post@n4.nabble.com> References: <1447655217164-4861164.post@n4.nabble.com> Message-ID: <1447655877047-4861166.post@n4.nabble.com> What about updating FindText in #findAgain if there is some selection and that does not match the selection anymore? This would avoid some user errors... ;-) And having this, we would not need this additional #findAgainSettingSearch: anymore. And we would not have to scatter find-code over to mouse-down etc... Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-cmm-1040-mcz-tp4861159p4861166.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From dionisiydk at gmail.com Mon Nov 16 06:53:14 2015 From: dionisiydk at gmail.com (Denis Kudriashov) Date: Mon Nov 16 06:53:16 2015 Subject: [squeak-dev] Re: undo question In-Reply-To: <1447655505671-4861165.post@n4.nabble.com> References: <1447655505671-4861165.post@n4.nabble.com> Message-ID: Hi. What classes I should look to learn new undo implementation? And how it differs from old one? 16 ????. 2015 ?. 7:46 AM ???????????? "marcel.taeumel" < Marcel.Taeumel@hpi.de> ???????: > No, I do not know, why the editor is released when accepting changes. > However, it makes sense to purge the history of somebody exchanges all the > text from the outside. The way it works now, it's quite robust. But there > may be situations where we could retain the history such as this save > operation. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/undo-question-tp4861160p4861165.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151116/e9485ac8/attachment.htm From Marcel.Taeumel at hpi.de Mon Nov 16 06:39:19 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 16 06:53:51 2015 Subject: [squeak-dev] Re: Undo and 5.0 In-Reply-To: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> Message-ID: <1447655959563-4861168.post@n4.nabble.com> +1 (I would do it.) Best, Marcel -- View this message in context: http://forum.world.st/Undo-and-5-0-tp4861132p4861168.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From herbertkoenig at gmx.net Mon Nov 16 08:19:41 2015 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Mon Nov 16 08:19:44 2015 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-cmm.32.mcz In-Reply-To: References: <201511160604.tAG64f5Q022334@mail63c0.megamailservers.com> Message-ID: <5649919D.9090701@gmx.net> Am 16.11.2015 um 07:16 schrieb tim Rowledge: >> - What is a "recognizer?? > It is/was (no idea if it still works or even exists) a gesture recogniser for pen-like input. > It was a package named Genie. If you search for method names with 'genie' you will find hints that genie is disabled nowadays. Cheers, Herbert From nicolaihess at gmail.com Mon Nov 16 08:21:13 2015 From: nicolaihess at gmail.com (Nicolai Hess) Date: Mon Nov 16 08:21:17 2015 Subject: [squeak-dev] Re: [Pharo-dev] keyboard events in the windows VM In-Reply-To: References: Message-ID: Anyone from Squeak/SqueeakVM interested on this change? I can build a squeak vm as well and / or provide a vm-source patch file. 2015-11-13 8:33 GMT+01:00 Nicolai Hess : > > > 2015-11-12 16:43 GMT+01:00 EuanM : > >> I'm happy to test on Windows 7, and on Raspbian Linux >> >> (Although Raspbian Linux runs Pharo UI events slo-o-owly, so I am not >> the best person to do the Linux testing) >> > > Thank you EuanM, > I 'll provide a vm with these changes. All changes are only for the > windows vm at the moment. > > >> >> On 12 November 2015 at 15:42, EuanM wrote: >> > I think anything that makes a consistent UI to Pharo for users on >> > different platforms is a good thing. >> > >> > However, I do not know what the downside-effects of this change are. >> > >> > The key thing is to capture all breaks caused by the changed, so they >> > can be coded through or around. And ensure that the test results are >> > viewed with at least the same importance as the automated Jenkins CI >> > test results. >> > >> > I do not know the extent that the Jenkins CI tests actually simulate >> > user keyboard input, so... (Pharo pseudocode for comic effect and >> > clarity) >> > >> > We can write Jenkins tests that simulate user input >> > ifTrue: [ we should do so ]. >> > ifFalse: [ >> > we should >> > write a canonical set of regression test scripts for human >> > users to follow . >> > we should >> > do: [:eachPlatformSupportedByPharo | >> > run the tests in which humans use keyboard tasks ] . >> > we should >> > capture the results ; >> > and feed them into automated the regression tests results >> database >> > ] >> > >> > >> > On 12 November 2015 at 08:35, Nicolai Hess >> wrote: >> >> A short overview: >> >> >> >> With Ctrl-Key pressed, >> >> >> >> some keyboard events don't generate smalltalk keystrokes (EventKeyChar) >> >> ctrl+tab, ctrl+1, ctrl+2, ..., ctrl+0, ctrl+Tab, ctrl+m >> >> >> >> for some keyboard events there are only key down and key up events >> (from >> >> windows) but the vm "generates" a keypress (EventKeyChar) event >> >> ctrl+Home, ctrl+End, ctrl+PageUp, ... >> >> >> >> But the key value , char code and ctrl flag for this generated events, >> make >> >> them undistinguishable from other ctrl+key shortcuts >> >> ctrl+a = ctrl+Home, ctrl+d = ctrl+End, ctrl+k=ctrl+PageUp,... >> >> >> >> And one key (ctrl+Enter) creates two EventKeyChar events one "normal" >> and >> >> one that is generated from the vm >> >> one with keyvalue 10 and one with 13. >> >> >> >> And the keycode for char like "a","b", ..., are different if you they >> are >> >> typed with or without ctrl-key >> >> >> >> just key "a": >> >> keycode: >> >> 65 (keydown event) >> >> 97 (keyvalue/charcode event) (65 if you press shift key) >> >> 65 (keyup event) >> >> >> >> with ctrl key pressed: >> >> keycode >> >> 65 (keydown event) >> >> 1 (keyvalue/charcode event) >> >> 65 (keyup event) >> >> >> >> >> >> I would like to change this, that means: >> >> >> >> generate EventKeyChar events for >> >> ctrl+1, ctrl+2, ..., ctrl+Tab, ctrl+m >> >> >> >> remove the double key event for ctrl+Enter >> >> >> >> and adopt the behavior of the linux vm, for keyValue, charCode values >> for >> >> events like >> >> ctrl+a, ctrl+home, ... >> >> >> >> for example, the linux vm generates event buffer values: >> >> #(2 7329656 1 0 2 65 0 1) for ctrl+a (keyValue 1/charCode 65) >> >> but >> >> #(2 7329656 1 0 2 1 0 1) for ctrl+home (keyValue 1/charCode 1) >> >> >> >> this may need some changes on the image side. For example, in Pharo we >> >> have some special handling that adds "96" to the keyValue for >> keystrokes >> >> with ctrl-key). >> >> >> >> What do you think? >> >> >> >> >> >> >> >> nicolai >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151116/aba4a10c/attachment.htm From commits at source.squeak.org Mon Nov 16 09:44:44 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 16 09:44:48 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1041.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1041.mcz ==================== Summary ==================== Name: Morphic-mt.1041 Author: mt Time: 16 November 2015, 10:44:04.404 am UUID: 65752707-c5b1-4864-938d-2de09e9f5f31 Ancestors: Morphic-cmm.1040 Minor corrections for text undo considering prior undo functionality. =============== Diff against Morphic-cmm.1040 =============== Item was changed: ----- Method: TextMorph>>editHistory (in category 'multi level undo') ----- editHistory + ^ self editor history! - editHistory ifNil: [ editHistory := TextMorphCommandHistory new]. - ^editHistory - ! Item was removed: - ----- Method: TextMorph>>editHistory: (in category 'multi level undo') ----- - editHistory: aTextMorphCommandHistory - ^editHistory := aTextMorphCommandHistory - ! Item was changed: ----- Method: TextMorph>>veryDeepInner: (in category 'copying') ----- veryDeepInner: deepCopier "Copy all of my instance variables. Some need to be not copied at all, but shared. Warning!!!! Every instance variable defined in this class must be handled. We must also implement veryDeepFixupWith:. See DeepCopier class comment." super veryDeepInner: deepCopier. textStyle := textStyle veryDeepCopyWith: deepCopier. text := text veryDeepCopyWith: deepCopier. wrapFlag := wrapFlag veryDeepCopyWith: deepCopier. paragraph := paragraph veryDeepCopyWith: deepCopier. editor := editor veryDeepCopyWith: deepCopier. container := container veryDeepCopyWith: deepCopier. predecessor := predecessor. successor := successor. backgroundColor := backgroundColor veryDeepCopyWith: deepCopier. + margins := margins veryDeepCopyWith: deepCopier.! - margins := margins veryDeepCopyWith: deepCopier. - editHistory := editHistory veryDeepCopyWith: deepCopier. - ! Item was removed: - CommandHistory subclass: #TextMorphCommandHistory - instanceVariableNames: 'textMorph' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Text Support'! Item was removed: - ----- Method: TextMorphCommandHistory>>redo (in category 'command exec') ----- - redo - ^super redoNextCommand - ! Item was removed: - ----- Method: TextMorphCommandHistory>>rememberCommand: (in category 'command exec') ----- - rememberCommand: aCommand - "Make the supplied command be the 'LastCommand', and mark it 'done'" - - "Before adding the new command, remove any commands after the last #done - command, and make that last #done command be lastCommand." - self removeUndoneCommands. - aCommand phase: #done. - - "If we are building a compound command, just add the new command to that" - history addLast: aCommand. - lastCommand := aCommand. - "Debug dShow: ('Remember: ', commandToUse asString)." - - ! Item was removed: - ----- Method: TextMorphCommandHistory>>removeUndoneCommands (in category 'command exec') ----- - removeUndoneCommands - "Remove all of the commands at the end of history until the first one that is not marked #undone" - - history reversed do: [ :command | - (command phase == #done) ifTrue:[ - lastCommand := command. - ^self - ]ifFalse:[ - history remove: command. - ]. - ]. - - "If there were no #done commands on the stack, then get rid of lastCommand" - lastCommand := nil. - ! Item was removed: - ----- Method: TextMorphCommandHistory>>undo (in category 'command exec') ----- - undo - ^super undoLastCommand - - ! Item was removed: - TextEditor subclass: #TextMorphEditor - instanceVariableNames: '' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Text Support'! - - !TextMorphEditor commentStamp: 'dtl 1/21/2012 18:02' prior: 0! - This is a stub class to replace the original implementation of a ParagraphEditor for TextMorphs, which has since been replaced by TextEditor. This implementation is retained for the benefit of external packages such as Connectors and FreeType that may have dependencies on TextMorphEditor. - - The comment below is from the class comment of the original TextMorphEditor. - ----- - In the past, BookMorphs had the ability to have each page be on the server as a .sp SqueakPage file. The index of the book was a .bo file. In text, Cmd-6 had a LinkTo option that linked to a page by its name, or created a new page of that name. It assumed the book was on a server with a file per page. Ted removed that code, and kept a copy on his disk in 'TME-ChngEmphasis.st for .bo .sp'! From commits at source.squeak.org Mon Nov 16 09:45:11 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 16 09:45:13 2015 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.13.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.13.mcz ==================== Summary ==================== Name: 51Deprecated-mt.13 Author: mt Time: 16 November 2015, 10:45:03.027 am UUID: 9a806e12-d302-4962-af1a-5625eb944b77 Ancestors: 51Deprecated-mt.12 Deprecates old text command history. =============== Diff against 51Deprecated-mt.12 =============== Item was added: + CommandHistory subclass: #TextMorphCommandHistory + instanceVariableNames: 'textMorph' + classVariableNames: '' + poolDictionaries: '' + category: '51Deprecated-Morphic-Text Support'! Item was added: + ----- Method: TextMorphCommandHistory>>redo (in category 'command exec') ----- + redo + ^super redoNextCommand + ! Item was added: + ----- Method: TextMorphCommandHistory>>rememberCommand: (in category 'command exec') ----- + rememberCommand: aCommand + "Make the supplied command be the 'LastCommand', and mark it 'done'" + + "Before adding the new command, remove any commands after the last #done + command, and make that last #done command be lastCommand." + self removeUndoneCommands. + aCommand phase: #done. + + "If we are building a compound command, just add the new command to that" + history addLast: aCommand. + lastCommand := aCommand. + "Debug dShow: ('Remember: ', commandToUse asString)." + + ! Item was added: + ----- Method: TextMorphCommandHistory>>removeUndoneCommands (in category 'command exec') ----- + removeUndoneCommands + "Remove all of the commands at the end of history until the first one that is not marked #undone" + + history reversed do: [ :command | + (command phase == #done) ifTrue:[ + lastCommand := command. + ^self + ]ifFalse:[ + history remove: command. + ]. + ]. + + "If there were no #done commands on the stack, then get rid of lastCommand" + lastCommand := nil. + ! Item was added: + ----- Method: TextMorphCommandHistory>>undo (in category 'command exec') ----- + undo + ^super undoLastCommand + + ! Item was added: + TextEditor subclass: #TextMorphEditor + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: '51Deprecated-Morphic-Text Support'! + + !TextMorphEditor commentStamp: 'dtl 1/21/2012 18:02' prior: 0! + This is a stub class to replace the original implementation of a ParagraphEditor for TextMorphs, which has since been replaced by TextEditor. This implementation is retained for the benefit of external packages such as Connectors and FreeType that may have dependencies on TextMorphEditor. + + The comment below is from the class comment of the original TextMorphEditor. + ----- + In the past, BookMorphs had the ability to have each page be on the server as a .sp SqueakPage file. The index of the book was a .bo file. In text, Cmd-6 had a LinkTo option that linked to a page by its name, or created a new page of that name. It assumed the book was on a server with a file per page. Ted removed that code, and kept a copy on his disk in 'TME-ChngEmphasis.st for .bo .sp'! From Marcel.Taeumel at hpi.de Mon Nov 16 09:59:51 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 16 10:14:25 2015 Subject: [squeak-dev] Re: [Pharo-dev] keyboard events in the windows VM In-Reply-To: References: Message-ID: <1447667991697-4861183.post@n4.nabble.com> Very much interested. :) If there are changes that generate different events in Smalltalk land, we should provide Smalltalk code to simulate previous behavior if needed. But for most (if not all) of your changes, this should not be necessary. Best, Marcel -- View this message in context: http://forum.world.st/keyboard-events-in-the-windows-VM-tp4860620p4861183.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Nov 16 10:01:53 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 16 10:16:27 2015 Subject: [squeak-dev] Re: undo question In-Reply-To: References: <1447655505671-4861165.post@n4.nabble.com> Message-ID: <1447668113494-4861184.post@n4.nabble.com> It does not really differ from the old one. TextEditor >> #openTypeIn (and senders) TextEditor >> #closeTypeIn (and senders) TextEditor >> #repalceSelectionWith: (and senders) TextEditorCommand TextEditorCommandHistory Best, Marcel -- View this message in context: http://forum.world.st/undo-question-tp4861160p4861184.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Mon Nov 16 10:31:10 2015 From: karlramberg at gmail.com (karl ramberg) Date: Mon Nov 16 10:31:12 2015 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-cmm.32.mcz In-Reply-To: <5649919D.9090701@gmx.net> References: <201511160604.tAG64f5Q022334@mail63c0.megamailservers.com> <5649919D.9090701@gmx.net> Message-ID: Or recognizer was an even older, one method, gesture/ drawn glyph recognizer. Kind of cool but of limited use. Karl On Mon, Nov 16, 2015 at 9:19 AM, Herbert K?nig wrote: > > Am 16.11.2015 um 07:16 schrieb tim Rowledge: > >> - What is a "recognizer?? >>> >> It is/was (no idea if it still works or even exists) a gesture recogniser >> for pen-like input. >> >> It was a package named Genie. If you search for method names with 'genie' > you will find hints that genie is disabled nowadays. > > Cheers, > > Herbert > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151116/0199b47c/attachment.htm From dionisiydk at gmail.com Mon Nov 16 12:41:07 2015 From: dionisiydk at gmail.com (Denis Kudriashov) Date: Mon Nov 16 12:41:29 2015 Subject: [squeak-dev] Re: undo question In-Reply-To: <1447668113494-4861184.post@n4.nabble.com> References: <1447655505671-4861165.post@n4.nabble.com> <1447668113494-4861184.post@n4.nabble.com> Message-ID: Thanks's 2015-11-16 11:01 GMT+01:00 marcel.taeumel : > It does not really differ from the old one. But what Chris so liked? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151116/168f70bc/attachment.htm From Marcel.Taeumel at hpi.de Mon Nov 16 12:32:37 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 16 12:47:12 2015 Subject: [squeak-dev] Re: undo question In-Reply-To: References: <1447655505671-4861165.post@n4.nabble.com> <1447668113494-4861184.post@n4.nabble.com> Message-ID: <1447677157635-4861214.post@n4.nabble.com> The current history is purged "more often" than the old one because the old one was stored in the text morph object and the new one is in the text editor object. Best, Marcel -- View this message in context: http://forum.world.st/undo-question-tp4861160p4861214.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lewis at mail.msen.com Mon Nov 16 14:28:59 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Mon Nov 16 14:29:02 2015 Subject: [squeak-dev] The Inbox: Monticello-pre.623.mcz In-Reply-To: <201511111533.tABFX7D6022845@shell.msen.com> References: <201511111533.tABFX7D6022845@shell.msen.com> Message-ID: <20151116142859.GA25507@shell.msen.com> On Wed, Nov 11, 2015 at 03:32:50PM +0000, commits@source.squeak.org wrote: > A new version of Monticello was added to project The Inbox: > http://source.squeak.org/inbox/Monticello-pre.623.mcz > Monticello-pre.622 and Monticello-pre.623 are in trunk now, so I moved the inbox copies to the treated inbox (using web interface, select "details" then "Move to the Treated Inbox"). Dave From karlramberg at gmail.com Mon Nov 16 14:32:29 2015 From: karlramberg at gmail.com (karl ramberg) Date: Mon Nov 16 14:32:30 2015 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-cmm.32.mcz In-Reply-To: References: <201511160604.tAG64f5Q022334@mail63c0.megamailservers.com> <5649919D.9090701@gmx.net> Message-ID: Here is the source of the recognizer: http://sumim.no-ip.com/collab/uploads/61/CharRecog.st On Mon, Nov 16, 2015 at 11:31 AM, karl ramberg wrote: > Or recognizer was an even older, one method, gesture/ drawn glyph > recognizer. > Kind of cool but of limited use. > > Karl > > On Mon, Nov 16, 2015 at 9:19 AM, Herbert K?nig > wrote: > >> >> Am 16.11.2015 um 07:16 schrieb tim Rowledge: >> >>> - What is a "recognizer?? >>>> >>> It is/was (no idea if it still works or even exists) a gesture >>> recogniser for pen-like input. >>> >>> It was a package named Genie. If you search for method names with >> 'genie' you will find hints that genie is disabled nowadays. >> >> Cheers, >> >> Herbert >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151116/4a640b06/attachment.htm From asqueaker at gmail.com Mon Nov 16 16:13:47 2015 From: asqueaker at gmail.com (Chris Muller) Date: Mon Nov 16 16:13:50 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1040.mcz In-Reply-To: <1447655217164-4861164.post@n4.nabble.com> References: <1447655217164-4861164.post@n4.nabble.com> Message-ID: On Mon, Nov 16, 2015 at 12:26 AM, marcel.taeumel wrote: > ...now the user has to be very careful when to change the selection... The search-and-replace didn't even work well at all before, so the user in a lot better shape now than she was before. > I > think there is room for improvement. :) Why not just change the selection on > find-again? Why on mouse-down? This is too brittle... It looks like that > #findAgainSettingSearch: brings back that complicated interface into the > TextEditor (#doAgain:many: *sigh*), that tried to simplify. ;-) TextEditor does not provide a single path through a method which updates the current selection which could be hooked. That's why it had to be hooked in #selectFrom:to: as well as #mouseMove:. #mouseMove is already updating its model (its pointBlock) by direct-assignment, setting the search is just another part of its model, so I don't see that it is any more brittle than it was before.. From asqueaker at gmail.com Mon Nov 16 16:13:50 2015 From: asqueaker at gmail.com (Chris Muller) Date: Mon Nov 16 16:13:54 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1040.mcz In-Reply-To: <1447655877047-4861166.post@n4.nabble.com> References: <1447655217164-4861164.post@n4.nabble.com> <1447655877047-4861166.post@n4.nabble.com> Message-ID: On Mon, Nov 16, 2015 at 12:37 AM, marcel.taeumel wrote: > What about updating FindText in #findAgain if there is some selection and > that does not match the selection anymore? Once the user presses command+j, the selection is updated, but the FindText shouldn't be, because they want to find the next occurrence of the FindText, not what it was changed to via command+j... > This would avoid some user > errors... ;-) And having this, we would not need this additional > #findAgainSettingSearch: anymore. And we would not have to scatter find-code > over to mouse-down etc... > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Morphic-cmm-1040-mcz-tp4861159p4861166.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From tim at rowledge.org Mon Nov 16 21:36:24 2015 From: tim at rowledge.org (tim Rowledge) Date: Mon Nov 16 21:36:27 2015 Subject: [squeak-dev] Balloon3D - dead or alive? Message-ID: Over the weekend I had a go at building the B3DAccelerator plugin for the Pi (with all sorts of fun in the process) and eventually got something that compiled, linked and appeared to have built. To test it I tried to load the Balloon3D package but the one accessible in SqueakMap is *ancient* and although I did manage to get it installed with lots of hackery, and the basic rotating cube *did* finally run with no hardware acceleration, an attempt to swap to using hardware failed. So far as I can work out we?re not routinely building the ?Squeak3D? plugin anymore? Is anyone still caring for the B3D stuff? The latest SM version is over 10 years old :-O Is there somewhere other than SM I might find an up to date version - or indeed anything else that would test the B3DAcceleratorPlugin? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim A computer program does what you tell it to do, not what you want it to do. From bert at freudenbergs.de Mon Nov 16 22:04:29 2015 From: bert at freudenbergs.de (Bert Freudenberg) Date: Mon Nov 16 22:04:38 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: References: Message-ID: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> On 16.11.2015, at 22:36, tim Rowledge wrote: > > Over the weekend I had a go at building the B3DAccelerator plugin for the Pi (with all sorts of fun in the process) and eventually got something that compiled, linked and appeared to have built. > > To test it I tried to load the Balloon3D package but the one accessible in SqueakMap is *ancient* and although I did manage to get it installed with lots of hackery, and the basic rotating cube *did* finally run with no hardware acceleration, an attempt to swap to using hardware failed. > So far as I can work out we?re not routinely building the ?Squeak3D? plugin anymore? Is anyone still caring for the B3D stuff? The latest SM version is over 10 years old :-O Balloon3D (and hence the Squeak3D plugin) has pretty much gone the way of the dodo. But B3DAcceleratorPlugin is still used to create an OpenGL context, e.g. in Croquet. > Is there somewhere other than SM I might find an up to date version - or indeed anything else that would test the B3DAcceleratorPlugin? Install OpenGL from here: http://www.squeaksource.com/CroquetGL.html and try ?OpenGL example?. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4115 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151116/93f3d254/smime.bin From lewis at mail.msen.com Mon Nov 16 22:10:19 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Mon Nov 16 22:10:22 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: References: Message-ID: <20151116221019.GA4999@shell.msen.com> On Mon, Nov 16, 2015 at 01:36:24PM -0800, tim Rowledge wrote: > Over the weekend I had a go at building the B3DAccelerator plugin for the Pi (with all sorts of fun in the process) and eventually got something that compiled, linked and appeared to have built. > > To test it I tried to load the Balloon3D package but the one accessible in SqueakMap is *ancient* and although I did manage to get it installed with lots of hackery, and the basic rotating cube *did* finally run with no hardware acceleration, an attempt to swap to using hardware failed. > So far as I can work out we???re not routinely building the ???Squeak3D??? plugin anymore? Is anyone still caring for the B3D stuff? The latest SM version is over 10 years old :-O > > Is there somewhere other than SM I might find an up to date version - or indeed anything else that would test the B3DAcceleratorPlugin? > It has always been part of the "standard" unix releases up through the last one the Ian published on squeakvm.org. I don't recall ever having fixed any 64-bit issues for this, which means that it probably does not work on 64-bit host. However, I expect that it should still be healthy on 32-bit platforms. I'm not sure the best way to test it on a recent image, but if you have an older image with B3D stuff, try running it on the latest 32-bit interpreter from squeakvm.org/unix. If that does what you need, then the plugin is in good shape and probably will just need some updates for 64-bit host. I'd be happy to try doing those updates if there is an interest. Dave From nicolaihess at gmail.com Mon Nov 16 22:20:47 2015 From: nicolaihess at gmail.com (Nicolai Hess) Date: Mon Nov 16 22:20:49 2015 Subject: [squeak-dev] Re: [Pharo-dev] keyboard events in the windows VM In-Reply-To: <1447667991697-4861183.post@n4.nabble.com> References: <1447667991697-4861183.post@n4.nabble.com> Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: squeak_win_vm_ctrl_key.patch Type: application/octet-stream Size: 2360 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151116/2a488622/squeak_win_vm_ctrl_key.obj From commits at source.squeak.org Mon Nov 16 22:55:03 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 16 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151116225503.18673.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009160.html Name: SMBase-cmm.135 Ancestors: SMBase-eem.134 Minor fix. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009161.html Name: Morphic-cmm.1040 Ancestors: Morphic-tpr.1039 - Consolidate Command+hg into, more-simply, Command+g, recovering the lowercase "h" hot-key for future use. Hot keys have become a valuable commodity. - Fix the in-place search-and-replace function. Command+g and j now function together, harmoniously, for the user. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009162.html Name: Help-Squeak-Project-cmm.32 Ancestors: Help-Squeak-Project-cmm.31 - Clarify functions of Command+f, g, and j. - Some minor tweaks. - What is a "recognizer"? - Command+Z is now Redo. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009163.html Name: Tools-cmm.652 Ancestors: Tools-mt.651 - Assign the selected category if no prior method was selected. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009164.html Name: Morphic-mt.1041 Ancestors: Morphic-cmm.1040 Minor corrections for text undo considering prior undo functionality. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009165.html Name: 51Deprecated-mt.13 Ancestors: 51Deprecated-mt.12 Deprecates old text command history. ============================================= From tim at rowledge.org Mon Nov 16 23:28:47 2015 From: tim at rowledge.org (tim Rowledge) Date: Mon Nov 16 23:28:50 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> References: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> Message-ID: <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> > On 16-11-2015, at 2:04 PM, Bert Freudenberg wrote: > Balloon3D (and hence the Squeak3D plugin) has pretty much gone the way of the dodo. > Ah, sad. If anyone is interested, it can actually be loaded with some hassle and that rotating cube does work, so maybe it could be rescued? Is is worth it? > But B3DAcceleratorPlugin is still used to create an OpenGL context, e.g. in Croquet. > >> Is there somewhere other than SM I might find an up to date version - or indeed anything else that would test the B3DAcceleratorPlugin? > > Install OpenGL from here: > > http://www.squeaksource.com/CroquetGL.html > > and try ?OpenGL example?. OK, loaded easily enough and the example shows that the plugin is not working. It responds to the primitiveVersion ok but creating a gl context fails. I?ll poke it into gdb some day. It?s nice to see vectors and quaternions in there though. Might help me with the damnably complex IMU in the Pi SenseHAT. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: EROS: Erase Read-Only Storage From tim at rowledge.org Mon Nov 16 23:55:44 2015 From: tim at rowledge.org (tim Rowledge) Date: Mon Nov 16 23:55:49 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <20151116221019.GA4999@shell.msen.com> References: <20151116221019.GA4999@shell.msen.com> Message-ID: <90D67A52-2891-41C6-9E39-D4E3276338C0@rowledge.org> > On 16-11-2015, at 2:10 PM, David T. Lewis wrote: > > It has always been part of the "standard" unix releases up through the > last one the Ian published on squeakvm.org. I don't recall ever having > fixed any 64-bit issues for this, which means that it probably does not > work on 64-bit host. However, I expect that it should still be healthy > on 32-bit platforms. So it is; and the context of where I found the code locally implies it at least used to build on the Pi. The platforms/Cross code is still in the Cog tree, too. I?m puzzled where the code is coming from Dave; I just peeked at the plaint VMMaker package and it doesn?t include the B3DEngine classes, so what are you doing to produce it? Or is it simply being inherited in the SVN tree? It?s probably not worth pursuing too hard if no one is able to nor interested in keeping the Balloon3D stuff alive as well. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Bad command or file name. Go stand in the corner. From lewis at mail.msen.com Tue Nov 17 02:47:03 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Nov 17 02:47:04 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <90D67A52-2891-41C6-9E39-D4E3276338C0@rowledge.org> References: <20151116221019.GA4999@shell.msen.com> <90D67A52-2891-41C6-9E39-D4E3276338C0@rowledge.org> Message-ID: <20151117024703.GA46326@shell.msen.com> On Mon, Nov 16, 2015 at 03:55:44PM -0800, tim Rowledge wrote: > > > On 16-11-2015, at 2:10 PM, David T. Lewis wrote: > > > > It has always been part of the "standard" unix releases up through the > > last one the Ian published on squeakvm.org. I don't recall ever having > > fixed any 64-bit issues for this, which means that it probably does not > > work on 64-bit host. However, I expect that it should still be healthy > > on 32-bit platforms. > > > So it is; and the context of where I found the code locally implies it at least used to build on the Pi. The platforms/Cross code is still in the Cog tree, too. > > I???m puzzled where the code is coming from Dave; I just peeked at the plaint VMMaker package and it doesn???t include the B3DEngine classes, so what are you doing to produce it? Or is it simply being inherited in the SVN tree? > We have B3DAcceleratorPlugin, which is generated directly from the class of the same name, and we have Squeak3D which is generated from B3DEnginePlugin and its subclasses. I think you are interested in Squeak3D. The module name is Squeak3D because: B3DEnginePlugin class>>moduleName ^'Squeak3D' The primitives are generated from its six subclasses, all of which inherit the module name 'Squeak3D'. The tricky bits are done in these two methods: B3DEnginePlugin class>>translateInDirectory:doInlining: B3DEnginePlugin class>>shouldBeTranslated Latest generated sources are at http://squeakvm.org/cgi-bin/viewvc.cgi/squeak/trunk/src/plugins/Squeak3D/ > It???s probably not worth pursuing too hard if no one is able to nor interested in keeping the Balloon3D stuff alive as well. I can't think of any good reason not to keep it working. Dave From commits at source.squeak.org Tue Nov 17 02:56:33 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 17 02:56:35 2015 Subject: [squeak-dev] The Trunk: Morphic-cmm.1042.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1042.mcz ==================== Summary ==================== Name: Morphic-cmm.1042 Author: cmm Time: 16 November 2015, 8:55:48.944 pm UUID: 7a820a29-86bd-4923-a05f-f2f41045adfc Ancestors: Morphic-mt.1041 - When selecting expressions, if the click occurs between two adjacent delimiters, give precedence to directional bracket delimiters over the non-directional punctuation delimiters, so that the correct expression will be selected. - In code panes, when advancing the cursor via Command+Shift+[left-arrow] and Command+Shift+[right-arrow], stop also at Smalltalk expression boundaries so that selection of expressions via those hot keys is feasible. - A further refinement to the in-place search-and-replace to present the suggested change to the user before changing it. - Don't let drag and drop mess with the z-order of SystemWindows. =============== Diff against Morphic-mt.1041 =============== Item was changed: ----- Method: Editor>>selectWord (in category 'new selection') ----- selectWord + "Select a word or expression, the result of pressing Command+[Space Bar] or by double-clicking." - "Select delimited text or word--the result of double-clicking." - ^self + selectWordLeftDelimiters: ' + "''|([{<' "<--- punctuation symbols should precede the bracket symbols" + rightDelimiters: ' + "''|)]}>'! - selectWordLeftDelimiters: '([{<|''" - ' - rightDelimiters: ')]}>|''" - '! Item was changed: ----- Method: Editor>>selectWordLeftDelimiters:rightDelimiters: (in category 'new selection') ----- selectWordLeftDelimiters: leftDelimiters rightDelimiters: rightDelimiters "Select delimited text or word--the result of double-clicking." | openDelimiter closeDelimiter direction match level string here hereChar start stop | string := self string. string size < 2 ifTrue: [^self]. here := self pointIndex. "Select the whole text when clicking before first or after last character" (here > string size or: [here < 2]) ifTrue: [^self selectFrom: 1 to: string size]. openDelimiter := string at: here - 1. + closeDelimiter := string at: here. + (match := leftDelimiters indexOf: openDelimiter) > (rightDelimiters indexOf: closeDelimiter) - match := leftDelimiters indexOf: openDelimiter. - match > 0 ifTrue: [ + "a more-distinct delimiter is on the left -- match to the right" - "delimiter is on left -- match to the right" start := here. direction := 1. here := here - 1. closeDelimiter := rightDelimiters at: match] ifFalse: [ openDelimiter := string at: here. match := rightDelimiters indexOf: openDelimiter. match > 0 ifTrue: [ "delimiter is on right -- match to the left" stop := here - 1. direction := -1. closeDelimiter := leftDelimiters at: match] ifFalse: [ "no delimiters -- select a token" direction := -1]]. level := 1. [level > 0 and: [direction > 0 ifTrue: [here < string size] ifFalse: [here > 1]]] whileTrue: [ hereChar := string at: (here := here + direction). match = 0 ifTrue: ["token scan goes left, then right" hereChar tokenish ifTrue: [here = 1 ifTrue: [ start := 1. "go right if hit string start" direction := 1]] ifFalse: [ direction < 0 ifTrue: [ start := here + 1. "go right if hit non-token" direction := 1] ifFalse: [level := 0]]] ifFalse: ["bracket match just counts nesting level" hereChar = closeDelimiter ifTrue: [level := level - 1"leaving nest"] ifFalse: [hereChar = openDelimiter ifTrue: [level := level + 1"entering deeper nest"]]]]. level > 0 ifTrue: ["in case ran off string end" here := here + direction]. ^direction > 0 ifTrue: [self selectFrom: start to: here - 1] ifFalse: [self selectFrom: here + 1 to: stop]! Item was changed: ----- Method: Morph>>justDroppedInto:event: (in category 'dropping/grabbing') ----- justDroppedInto: aMorph event: anEvent "This message is sent to a dropped morph after it has been dropped on -- and been accepted by -- a drop-sensitive morph" + | partsBinCase cmd | - | aWindow partsBinCase cmd | (self formerOwner notNil and: [self formerOwner ~~ aMorph]) ifTrue: [self removeHalo]. self formerOwner: nil. self formerPosition: nil. cmd := self valueOfProperty: #undoGrabCommand. cmd ifNotNil:[aMorph rememberCommand: cmd. self removeProperty: #undoGrabCommand]. (partsBinCase := aMorph isPartsBin) ifFalse: [self isPartsDonor: false]. - (aWindow := aMorph ownerThatIsA: SystemWindow) ifNotNil: - [aWindow isActive ifFalse: - [aWindow activate]]. (self isInWorld and: [partsBinCase not]) ifTrue: [self world startSteppingSubmorphsOf: self]. "Note an unhappy inefficiency here: the startStepping... call will often have already been called in the sequence leading up to entry to this method, but unfortunately the isPartsDonor: call often will not have already happened, with the result that the startStepping... call will not have resulted in the startage of the steppage." "An object launched by certain parts-launcher mechanisms should end up fully visible..." (self hasProperty: #beFullyVisibleAfterDrop) ifTrue: [aMorph == ActiveWorld ifTrue: [self goHome]. self removeProperty: #beFullyVisibleAfterDrop]. ! Item was added: + ----- Method: SmalltalkEditor>>nextWord: (in category 'private') ----- + nextWord: position + | string index boundaryCharacters | + string := self string. + index := position - 1. + [ (index + between: 1 + and: string size) and: [ (string at: index) isSeparator ] ] whileTrue: [ index := index + 1 ]. + boundaryCharacters := ')]}''"|^. '. + ((index + between: 1 + and: string size) and: [ boundaryCharacters includes: (string at: index) ]) + ifTrue: + [ index := index + 1 ] + ifFalse: + [ [ (index + between: 1 + and: string size) and: [ (boundaryCharacters includes: (string at: index)) not ] ] whileTrue: [ index := index + 1 ] ]. + ^ index! Item was added: + ----- Method: SmalltalkEditor>>previousWord: (in category 'private') ----- + previousWord: position + | string index boundaryCharacters | + string := self string. + index := position. + "First, get out of whitespace." + [ (index + between: 2 + and: string size) and: [ (string at: index) isSeparator ] ] whileTrue: [ index := index - 1 ]. + boundaryCharacters := '([{''"|^. '. + "Are we at a boundary character?" + ((index + between: 2 + and: string size) and: [ boundaryCharacters includes: (string at: index) ]) + ifTrue: + [ "yes, select it and any following whitespace of this line." + index := index - 1 ] + ifFalse: + [ "no, select to the next boundary character" + [ (index + between: 1 + and: string size) and: [ (boundaryCharacters includes: (string at: index)) not ] ] whileTrue: [ index := index - 1 ] ]. + ^ index + 1! Item was changed: ----- Method: TextEditor>>again (in category 'menu messages') ----- again "Do the same replace command again. Unlike #findReplaceAgain, this looks up the editor's own command history and uses the previous command." self history hasPrevious ifFalse: [morph flash. ^ self]. self history previous hasReplacedSomething ifFalse: [morph flash. ^ self] + ifTrue: [ | nextOperation | + nextOperation := (self selection=ChangeText) ifTrue: [#findAgain] ifFalse: [#findReplaceAgain]. - ifTrue: [ "Reset shared find/replace state." FindText := self history previous contentsBefore. ChangeText := self history previous contentsAfter. self selectAt: self stopIndex. + self perform: nextOperation. + nextOperation = #findReplaceAgain ifTrue: [ self findAgainSettingSearch: false ] ].! - self findReplaceAgain].! Item was changed: ----- Method: TextEditor>>doAgainUpToEnd: (in category 'typing/selecting keys') ----- doAgainUpToEnd: aKeyboardEvent + "Do the previous thing again repeatedly to the end of my contents. Under circumstances this can require two calls to againUpToEnd " + self + insertAndCloseTypeIn ; + againUpToEnd ; + againUpToEnd. - "Do the previous thing again once. 1/26/96 sw" - - self insertAndCloseTypeIn. - self againUpToEnd. ^ true! Item was changed: + (PackageInfo named: 'Morphic') postscript: 'Editor initialize.'! - (PackageInfo named: 'Morphic') postscript: 'Editor initialize. - MenuIcons initializeTranslations. - TextMorph allSubInstancesDo: [:tm | tm releaseEditor]. - Preferences removePreference: #multipleTextUndo. - '! From asqueaker at gmail.com Tue Nov 17 04:30:05 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 17 04:30:08 2015 Subject: [squeak-dev] in-place search-and-replace Message-ID: Squeak's ingenius solution to the search-and-replace problem has been fixed and then improved. The way it's supposed to work is: 1) user selects some text 2) user overtypes the selected text with new text 3) then uses any combinations of cmd+g, j, or J to conduct global search and replace operations. cmd+g finds the next occurrence of the original text. cmd+j (first press) presents the next occurrence of the original text, scrolling it into view and selecting it. cmd+j (subsequent press) with the original text selected, cmd+j now effects the replacement and then finds and selects the next occurrence of it in the text. cmd+J (with Shift key) replaces all further occurrences of the original text to the replacement text. What changed? Before, both cmd+j AND cmd+g used to perform the replacement. Cmd+g was never supposed to do that, it was a bug, Marcel fixed it so that it only does Find Next. That fix exposed an awkwardness to the legacy usage of cmd+j which renders it unable to be used in conjunction with cmd+g. Now, it can. From tim at rowledge.org Tue Nov 17 05:12:50 2015 From: tim at rowledge.org (tim Rowledge) Date: Tue Nov 17 05:12:53 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <20151117024703.GA46326@shell.msen.com> References: <20151116221019.GA4999@shell.msen.com> <90D67A52-2891-41C6-9E39-D4E3276338C0@rowledge.org> <20151117024703.GA46326@shell.msen.com> Message-ID: <00C192A8-2CC7-4C8F-9E17-FEC185201121@rowledge.org> > On 16-11-2015, at 6:47 PM, David T. Lewis wrote: >> > > We have B3DAcceleratorPlugin, which is generated directly from the class of > the same name, and we have Squeak3D which is generated from B3DEnginePlugin > and its subclasses. Well yeah - but thus far I?m not seeing B3DEngine and it?s subclasses in either the ?plain? VMMaker or the VMMaker.oscog? Ah! Now I see what?s happening; you use a mcm config file and it includes Balloon3d-* OK. Solved. I wonder if it will work when loaded into a cog build? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Advanced design: Upper management doesn't understand it. From sumi at seagreen.ocn.ne.jp Tue Nov 17 06:10:00 2015 From: sumi at seagreen.ocn.ne.jp (Masato Sumi) Date: Tue Nov 17 06:10:44 2015 Subject: [squeak-dev] in-place search-and-replace In-Reply-To: References: Message-ID: Chris, I also reported the find-again bug but about 10 years ago. http://bugs.squeak.org/view.php?id=5506 I love "again" function that is a long life Smalltalk-80's feature. I'm very happy to hear the bug was fixed. sumim 2015-11-17 13:30 GMT+09:00 Chris Muller : > Squeak's ingenius solution to the search-and-replace problem has been > fixed and then improved. > > The way it's supposed to work is: > > 1) user selects some text > 2) user overtypes the selected text with new text > 3) then uses any combinations of cmd+g, j, or J to conduct global > search and replace operations. > > cmd+g finds the next occurrence of the original text. > > cmd+j (first press) presents the next occurrence of the > original text, scrolling it into view and selecting it. > > cmd+j (subsequent press) with the original text selected, > cmd+j now effects the replacement and then finds and selects the next > occurrence of it in the text. > > cmd+J (with Shift key) replaces all further occurrences of > the original text to the replacement text. > > What changed? Before, both cmd+j AND cmd+g used to perform the > replacement. Cmd+g was never supposed to do that, it was a bug, > Marcel fixed it so that it only does Find Next. That fix exposed an > awkwardness to the legacy usage of cmd+j which renders it unable to be > used in conjunction with cmd+g. Now, it can. > From bert at freudenbergs.de Tue Nov 17 11:35:00 2015 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Nov 17 11:35:03 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> References: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> Message-ID: <7EF46ADF-7506-4BE5-AEA9-76E7EEA8D6BE@freudenbergs.de> On 17.11.2015, at 00:28, tim Rowledge wrote: > > >> On 16-11-2015, at 2:04 PM, Bert Freudenberg wrote: >> Balloon3D (and hence the Squeak3D plugin) has pretty much gone the way of the dodo. > > Ah, sad. If anyone is interested, it can actually be loaded with some hassle and that rotating cube does work, so maybe it could be rescued? Is is worth it? By now CPUs are fast enough that the B3D software renderer (in the Squeak3D plugin) should be quite speedy. And some of the old demos have been quite neat. Remember the 3D bunny circling *behind* a Morphic window? Or the whole Wonderland animation system. But software rendering takes lots of power to make even a very simple (i.e. unrealistic) 3D rendering. It doesn?t scale to modern pixel densities. So we would still need the B3D acceleration scheme to make it run on modern screens (my laptop has 5 MPixels!) One advantage of Balloon3D is that it can use both OpenGL and Direct3D. But maybe OpenGL support is now good enough even on Windows? I don?t know, I?m not a Windows user. In the end, using OpenGL directly is way more flexible (and better documented). - Bert - >> But B3DAcceleratorPlugin is still used to create an OpenGL context, e.g. in Croquet. >> >>> Is there somewhere other than SM I might find an up to date version - or indeed anything else that would test the B3DAcceleratorPlugin? >> >> Install OpenGL from here: >> >> http://www.squeaksource.com/CroquetGL.html >> >> and try ?OpenGL example?. > > OK, loaded easily enough and the example shows that the plugin is not working. It responds to the primitiveVersion ok but creating a gl context fails. I?ll poke it into gdb some day. > > It?s nice to see vectors and quaternions in there though. Might help me with the damnably complex IMU in the Pi SenseHAT. > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: EROS: Erase Read-Only Storage > > > -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4115 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151117/e3c1e657/smime-0001.bin From lewis at mail.msen.com Tue Nov 17 13:13:33 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Nov 17 13:13:35 2015 Subject: [squeak-dev] in-place search-and-replace In-Reply-To: References: Message-ID: <20151117131333.GA59202@shell.msen.com> Ten years, wow. I set the issue to "resolved" in Mantis, with links to this email. :-) Dave On Tue, Nov 17, 2015 at 03:10:00PM +0900, Masato Sumi wrote: > Chris, > > I also reported the find-again bug but about 10 years ago. > http://bugs.squeak.org/view.php?id=5506 > > I love "again" function that is a long life Smalltalk-80's feature. > I'm very happy to hear the bug was fixed. > > sumim > > > 2015-11-17 13:30 GMT+09:00 Chris Muller : > > Squeak's ingenius solution to the search-and-replace problem has been > > fixed and then improved. > > > > The way it's supposed to work is: > > > > 1) user selects some text > > 2) user overtypes the selected text with new text > > 3) then uses any combinations of cmd+g, j, or J to conduct global > > search and replace operations. > > > > cmd+g finds the next occurrence of the original text. > > > > cmd+j (first press) presents the next occurrence of the > > original text, scrolling it into view and selecting it. > > > > cmd+j (subsequent press) with the original text selected, > > cmd+j now effects the replacement and then finds and selects the next > > occurrence of it in the text. > > > > cmd+J (with Shift key) replaces all further occurrences of > > the original text to the replacement text. > > > > What changed? Before, both cmd+j AND cmd+g used to perform the > > replacement. Cmd+g was never supposed to do that, it was a bug, > > Marcel fixed it so that it only does Find Next. That fix exposed an > > awkwardness to the legacy usage of cmd+j which renders it unable to be > > used in conjunction with cmd+g. Now, it can. > > From lewis at mail.msen.com Tue Nov 17 13:14:26 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Nov 17 13:14:29 2015 Subject: [squeak-dev] in-place search-and-replace In-Reply-To: References: Message-ID: <20151117131426.GB59202@shell.msen.com> Thanks very much for this summary. I actually did not even know how it was supposed to work. Dave On Mon, Nov 16, 2015 at 10:30:05PM -0600, Chris Muller wrote: > Squeak's ingenius solution to the search-and-replace problem has been > fixed and then improved. > > The way it's supposed to work is: > > 1) user selects some text > 2) user overtypes the selected text with new text > 3) then uses any combinations of cmd+g, j, or J to conduct global > search and replace operations. > > cmd+g finds the next occurrence of the original text. > > cmd+j (first press) presents the next occurrence of the > original text, scrolling it into view and selecting it. > > cmd+j (subsequent press) with the original text selected, > cmd+j now effects the replacement and then finds and selects the next > occurrence of it in the text. > > cmd+J (with Shift key) replaces all further occurrences of > the original text to the replacement text. > > What changed? Before, both cmd+j AND cmd+g used to perform the > replacement. Cmd+g was never supposed to do that, it was a bug, > Marcel fixed it so that it only does Find Next. That fix exposed an > awkwardness to the legacy usage of cmd+j which renders it unable to be > used in conjunction with cmd+g. Now, it can. From lewis at mail.msen.com Tue Nov 17 13:32:48 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Nov 17 13:32:50 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <00C192A8-2CC7-4C8F-9E17-FEC185201121@rowledge.org> References: <20151116221019.GA4999@shell.msen.com> <90D67A52-2891-41C6-9E39-D4E3276338C0@rowledge.org> <20151117024703.GA46326@shell.msen.com> <00C192A8-2CC7-4C8F-9E17-FEC185201121@rowledge.org> Message-ID: <20151117133248.GC59202@shell.msen.com> On Mon, Nov 16, 2015 at 09:12:50PM -0800, tim Rowledge wrote: > > > On 16-11-2015, at 6:47 PM, David T. Lewis wrote: > >> > > > > We have B3DAcceleratorPlugin, which is generated directly from the class of > > the same name, and we have Squeak3D which is generated from B3DEnginePlugin > > and its subclasses. > > Well yeah - but thus far I???m not seeing B3DEngine and it???s subclasses in > either the ???plain??? VMMaker or the VMMaker.oscog??? Ah! Now I see what???s > happening; you use a mcm config file and it includes Balloon3d-* OK. Solved. Right, the MCM config pulls in a variety on things, including externally maintained plugins. The SqueakMap entry uses this MCM config, and evaluating "VMMaker updateFromServer" does an update similar to the trunk update stream. By the way, with an up to date (trunk) Squeak, it should now be possible to define an update stream for oscog in the VMMaker repository. If you save an update map with the name 'update.oscog' in the VMMaker repository, then borrow the VMMaker class>>updateFromServer method (edited to refer to 'update.oscog' rather than 'update'), it should be good to go. > I wonder if it will work when loaded into a cog build??? > I expect that it will work. Dave From Marcel.Taeumel at hpi.de Tue Nov 17 15:15:19 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 17 15:30:02 2015 Subject: [squeak-dev] Re: in-place search-and-replace In-Reply-To: <20151117131426.GB59202@shell.msen.com> References: <20151117131426.GB59202@shell.msen.com> Message-ID: <1447773319890-4861475.post@n4.nabble.com> *hehe* I did not know that Squeak was able to search-replace everything until I saw that code. :) Best, Marcel -- View this message in context: http://forum.world.st/in-place-search-and-replace-tp4861383p4861475.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Nov 17 15:23:34 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 17 15:38:18 2015 Subject: [squeak-dev] Re: The Inbox: Monticello-pre.623.mcz In-Reply-To: <20151116142859.GA25507@shell.msen.com> References: <20151116142859.GA25507@shell.msen.com> Message-ID: <1447773814688-4861476.post@n4.nabble.com> Ah, thanks. I always wondered, how they disappear. :) I will think of it next time! Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Monticello-pre-623-mcz-tp4860455p4861476.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lecteur at zogotounga.net Tue Nov 17 16:08:38 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Tue Nov 17 16:08:35 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> References: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> Message-ID: <564B5106.2040603@zogotounga.net> > Ah, sad. If anyone is interested, it can actually be loaded with some hassle and that rotating cube does work, so maybe it could be rescued? Is is worth it? I would vote for a rescue... Stef From commits at source.squeak.org Tue Nov 17 16:46:37 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 17 16:46:38 2015 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.81.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.81.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.81 Author: mt Time: 17 November 2015, 5:46:31.139 pm UUID: 82d1b4ff-d4ed-4887-b5ed-b30538bbe175 Ancestors: HelpSystem-Core-mt.80 Fixes a bug where it was not possible to edit subtopics of the current root topic although that root topic (as the parent) was editable. =============== Diff against HelpSystem-Core-mt.80 =============== Item was changed: ----- Method: HelpBrowser>>accept: (in category 'actions') ----- accept: text "Accept edited text. Compile it into a HelpTopic" | code parent topicClass topicMethod | (self currentParentTopic isNil or: [self currentParentTopic isEditable not]) ifTrue: [^ self inform: 'This help topic cannot be edited.']. parent := self currentParentTopic. topicClass := parent helpClass. topicMethod := self currentTopic key. code := String streamContents:[:s| s nextPutAll: topicMethod. s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'. s crtab; nextPutAll: '"', self name,' edit: ', topicMethod storeString,'"'. s crtab; nextPutAll: '^HelpTopic'. s crtab: 2; nextPutAll: 'title: ', currentTopic title storeString. s crtab: 2; nextPutAll: 'contents: '. s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: text]) storeString. s nextPutAll:' readStream nextChunkText'. ]. topicClass class compile: code classified: ((topicClass class organization categoryOfElement: topicMethod) ifNil:['pages']). parent refresh. + parent == self rootTopic ifTrue: [self rootTopic: parent]. + self currentTopic: (parent subtopics detect: [:t | t key = topicMethod]).! Item was changed: ----- Method: HelpBrowser>>currentParentTopic (in category 'accessing') ----- currentParentTopic + ^ currentParentTopic ifNil: [self rootTopic]! - ^ currentParentTopic! From commits at source.squeak.org Tue Nov 17 16:48:55 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 17 16:48:57 2015 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.82.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.82.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.82 Author: mt Time: 17 November 2015, 5:48:49.451 pm UUID: f3eff79c-e8f2-45a0-bb74-8503bcc4436d Ancestors: HelpSystem-Core-mt.81 Adds the possibility to show a specific topic when opening the help browser. Open the fest topic that is not empty by default (left-deep tree search). =============== Diff against HelpSystem-Core-mt.81 =============== Item was changed: ----- Method: HelpBrowser class>>open (in category 'instance creation') ----- open + + | window | + window := self openOn: CustomHelp. + window model showFirstTopic. + ^ window! - ^self openOn: CustomHelp! Item was added: + ----- Method: HelpBrowser>>detect:ifFound: (in category 'enumeration') ----- + detect: block ifFound: foundBlock + + self do: [:topic :path | (block value: topic) + ifTrue: [foundBlock cull: topic cull: path. ^ topic]].! Item was added: + ----- Method: HelpBrowser>>do: (in category 'enumeration') ----- + do: block + + self do: block in: self toplevelTopics path: #().! Item was added: + ----- Method: HelpBrowser>>do:in:path: (in category 'enumeration') ----- + do: block in: topics path: path + + topics do: [:topic | + block cull: topic cull: path. + + topic hasSubtopics ifTrue: [ + self do: block in: topic subtopics path: path, {topic}]].! Item was added: + ----- Method: HelpBrowser>>showFirstTopic (in category 'actions') ----- + showFirstTopic + "Shows the first topic that has contents." + + self showTopicThat: [:topic | topic contents notEmpty].! Item was added: + ----- Method: HelpBrowser>>showTopicThat: (in category 'actions') ----- + showTopicThat: block + + self + detect: [:topic | block value: topic] + ifFound: [:topic :path | self currentTopicPath: path, {topic}].! From commits at source.squeak.org Tue Nov 17 16:50:16 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 17 16:50:18 2015 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.83.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.83.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.83 Author: mt Time: 17 November 2015, 5:50:09.217 pm UUID: 83730db9-bbb0-4a1e-bcde-60e779900936 Ancestors: HelpSystem-Core-mt.82 Adds support for opening the help browser in a source code-mode. Useful for opening the terse guide. =============== Diff against HelpSystem-Core-mt.82 =============== Item was added: + ----- Method: HelpBrowser class>>openForCodeOn: (in category 'instance creation') ----- + openForCodeOn: aHelpTopic + + | browser window | + browser := (self defaultHelpBrowser new) + rootTopic: aHelpTopic; + yourself. + window := ToolBuilder open: (browser buildForCodeWith: ToolBuilder default). + + ^ window! Item was changed: ----- Method: HelpBrowser class>>openOn: (in category 'instance creation') ----- openOn: aHelpTopic "Open the receiver on the given help topic or any other object that can be transformed into a help topic by sending #asHelpTopic." ^(self defaultHelpBrowser new) rootTopic: aHelpTopic; + open! - open; - yourself! Item was added: + ----- Method: HelpBrowser>>buildCodeContentsWith: (in category 'toolbuilder') ----- + buildCodeContentsWith: builder + + ^ builder pluggableCodePaneSpec new + model: self; + getText: #topicContents; + setText: #accept:; + menu: #codePaneMenu:shifted:; + softLineWrap: false; + frame: (LayoutFrame + fractions: (0.3@0.0 corner: 1@1) + offsets: (0@ (Preferences standardDefaultTextFont height * 2) corner: 0@0)); + yourself! Item was added: + ----- Method: HelpBrowser>>buildContentsWith: (in category 'toolbuilder') ----- + buildContentsWith: builder + + ^ builder pluggableTextSpec new + model: self; + getText: #topicContents; + setText: #accept:; + menu: #codePaneMenu:shifted:; + frame: (LayoutFrame + fractions: (0.3@0.0 corner: 1@1) + offsets: (0@ (Preferences standardDefaultTextFont height * 2) corner: 0@0)); + yourself! Item was added: + ----- Method: HelpBrowser>>buildForCodeWith: (in category 'toolbuilder') ----- + buildForCodeWith: builder + + | windowSpec | + windowSpec := self buildWindowWith: builder. + + windowSpec children + add: (self buildSearchWith: builder); + add: (self buildTreeWith: builder); + add: (self buildCodeContentsWith: builder). + + ^ builder build: windowSpec! Item was added: + ----- Method: HelpBrowser>>buildSearchWith: (in category 'toolbuilder') ----- + buildSearchWith: builder + + ^ builder pluggableInputFieldSpec new + model: self; + getText: #searchTerm; + setText: #searchTerm:; + help: 'Search...'; + frame: (LayoutFrame + fractions: (0@0 corner: 1@0) + offsets: (0@0 corner: 0@ (Preferences standardDefaultTextFont height * 2))); + yourself! Item was added: + ----- Method: HelpBrowser>>buildTreeWith: (in category 'toolbuilder') ----- + buildTreeWith: builder + + ^ builder pluggableTreeSpec new + model: self; + nodeClass: HelpTopicListItemWrapper; + roots: #toplevelTopics; + getSelected: #currentTopic; + setSelected: #currentTopic:; + getSelectedPath: #currentTopicPath; + setSelectedParent: #currentParentTopic:; + autoDeselect: false; + frame: (LayoutFrame + fractions: (0@0 corner: 0.3@1) + offsets: (0@ (Preferences standardDefaultTextFont height * 2) corner: 0@0)); + yourself! Item was added: + ----- Method: HelpBrowser>>buildWindowWith: (in category 'toolbuilder') ----- + buildWindowWith: builder + + ^ builder pluggableWindowSpec new + model: self; + children: OrderedCollection new; + label: #label; + yourself! Item was changed: ----- Method: HelpBrowser>>buildWith: (in category 'toolbuilder') ----- buildWith: builder + | windowSpec | + windowSpec := self buildWindowWith: builder. + + windowSpec children + add: (self buildSearchWith: builder); + add: (self buildTreeWith: builder); + add: (self buildContentsWith: builder). - | windowSpec treeSpec textSpec searchSpec | - windowSpec := builder pluggableWindowSpec new. - windowSpec - model: self; - children: OrderedCollection new; - label: #label. - searchSpec := builder pluggableInputFieldSpec new. - searchSpec - model: self; - getText: #searchTerm; - setText: #searchTerm:; - help: 'Search...'; - frame: (LayoutFrame - fractions: (0@0 corner: 1@0) - offsets: (0@0 corner: 0@ (Preferences standardDefaultTextFont height * 2))). - windowSpec children add: searchSpec. - - treeSpec := builder pluggableTreeSpec new. - treeSpec - model: self; - nodeClass: HelpTopicListItemWrapper; - roots: #toplevelTopics; - getSelected: #currentTopic; - setSelected: #currentTopic:; - getSelectedPath: #currentTopicPath; - setSelectedParent: #currentParentTopic:; - autoDeselect: false; - frame: (LayoutFrame - fractions: (0@0 corner: 0.3@1) - offsets: (0@ (Preferences standardDefaultTextFont height * 2) corner: 0@0)). - windowSpec children add: treeSpec. - - textSpec := builder pluggableTextSpec new. - textSpec - model: self; - getText: #topicContents; - setText: #accept:; - menu: #codePaneMenu:shifted:; - frame: (LayoutFrame - fractions: (0.3@0.0 corner: 1@1) - offsets: (0@ (Preferences standardDefaultTextFont height * 2) corner: 0@0)). - windowSpec children add: textSpec. - ^ builder build: windowSpec! Item was changed: ----- Method: HelpBrowser>>open (in category 'ui') ----- open + ^ ToolBuilder open: self! - ToolBuilder open: self.! From commits at source.squeak.org Tue Nov 17 16:51:09 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 17 16:51:10 2015 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.33.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.33.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.33 Author: mt Time: 17 November 2015, 5:51:01.108 pm UUID: 8b7bdd7a-e4e6-41f6-a20f-db5da6dc713e Ancestors: Help-Squeak-Project-cmm.32 When opening a help browser for the command key help, open the first topic automatically. =============== Diff against Help-Squeak-Project-cmm.32 =============== Item was changed: ----- Method: Utilities class>>openCommandKeyHelp (in category '*Help-Squeak-Project-support windows') ----- openCommandKeyHelp "Open a window giving command key help." "Utilities openCommandKeyHelp" + (HelpBrowser openOn: SqueakTutorialsCommandKey) + model showFirstTopic! - HelpBrowser openOn: SqueakTutorialsCommandKey! From commits at source.squeak.org Tue Nov 17 16:53:22 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 17 16:53:24 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1043.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1043.mcz ==================== Summary ==================== Name: Morphic-mt.1043 Author: mt Time: 17 November 2015, 5:52:40.619 pm UUID: a00c5d87-90f2-4ffc-816f-638e818f1f0a Ancestors: Morphic-cmm.1042 Use the source code mode when opening the help browser for the terse guide directly via the main docking bar. =============== Diff against Morphic-cmm.1042 =============== Item was changed: ----- Method: TheWorldMainDockingBar>>helpMenuOn: (in category 'submenu - help') ----- helpMenuOn: aDockingBar aDockingBar addItem: [ :it | it contents: 'Help' translated; addSubMenu: [ :menu | 'Todo'. menu addItem:[:item| item contents: 'Online Resources' translated; help: 'Online resources for Squeak' translated; target: self; icon: MenuIcons smallHelpIcon; selector: #showWelcomeText:label:in:; arguments: { #squeakOnlineResources. 'Squeak Online Resources'. (140@140 extent: 560@360) }]. menu addItem:[:item| item contents: 'Keyboard Shortcuts' translated; help: 'Keyboard bindings used in Squeak' translated; target: Utilities; selector: #openCommandKeyHelp ]. menu addItem:[:item| item contents: 'Font Size Summary' translated; help: 'Font size summary from the old Squeak 3.10.2 help menu.' translated; target: TextStyle; selector: #fontSizeSummary ]. menu addItem:[:item| item contents: 'Useful Expressions' translated; help: 'Useful expressions from the old Squeak 3.10.2 help menu.' translated; target: Utilities; selector: #openStandardWorkspace ]. (Smalltalk classNamed: #SystemReporter) ifNotNil: [:classSystemReporter | menu addItem: [:item | item contents: 'About this System' translated; help: 'SystemReporter status of the image and runtime environment' translated; target: classSystemReporter; selector: #open]]. menu addLine. menu addItem:[:item| item contents: 'Extending the system' translated; help: 'Includes code snippets to evaluate for extending the system' translated; target: self; icon: MenuIcons smallHelpIcon; selector: #showWelcomeText:label:in:; arguments: { #extendingTheSystem. 'How to extend the system'. (140@140 extent: 560@360) }]. menu addLine. menu addItem:[:item| item contents: 'Welcome Workspaces' translated; help: 'The Welcome Workspaces' translated; addSubMenu:[:submenu| self welcomeWorkspacesOn: submenu]]. (Smalltalk classNamed: #HelpBrowser) ifNotNil: [:classHelpBrowser | (Smalltalk classNamed: #TerseGuideHelp) ifNotNil: [:classTerseGuideHelp | menu addLine. menu addItem: [:item | item contents: 'Terse Guide to Squeak' translated; help: 'Concise information about language and environment' translated; target: classHelpBrowser; + selector: #openForCodeOn:; - selector: #openOn:; arguments: { classTerseGuideHelp }]]. menu addLine. menu addItem: [:item | item contents: 'Help Browser' translated; help: 'Integrated Help System' translated; target: classHelpBrowser; selector: #open]]]]! From Marcel.Taeumel at hpi.de Tue Nov 17 16:40:00 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 17 16:54:44 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1043.mcz In-Reply-To: References: Message-ID: <1447778400835-4861492.post@n4.nabble.com> -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1043-mcz-tp4861491p4861492.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From ALONZOTG at verizon.net Tue Nov 17 17:28:15 2015 From: ALONZOTG at verizon.net (Alan Grimes) Date: Tue Nov 17 17:28:12 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <564B5106.2040603@zogotounga.net> References: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> <564B5106.2040603@zogotounga.net> Message-ID: <564B63AF.8050200@verizon.net> St?phane Rollandin wrote: >> Ah, sad. If anyone is interested, it can actually be loaded with some >> hassle and that rotating cube does work, so maybe it could be >> rescued? Is is worth it? > > I would vote for a rescue... > > Stef =| It was supposed to have been supplanted by Cobalt/Croqet which would have been the logical replacement for the ancient 1990's legacy squeak we have except for being abandoned a decade ago. =( -- IQ is a measure of how stupid you feel. Powers are not rights. From karlramberg at gmail.com Tue Nov 17 18:43:23 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 17 18:43:25 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1043.mcz In-Reply-To: <1447778400835-4861492.post@n4.nabble.com> References: <1447778400835-4861492.post@n4.nabble.com> Message-ID: I does not show syntax coloring in my image Karl On Tue, Nov 17, 2015 at 5:40 PM, marcel.taeumel wrote: > > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Morphic-mt-1043-mcz-tp4861491p4861492.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151117/8351c1fe/attachment.htm From Marcel.Taeumel at hpi.de Tue Nov 17 18:37:24 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 17 18:52:08 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1043.mcz In-Reply-To: References: <1447778400835-4861492.post@n4.nabble.com> Message-ID: <1447785444008-4861534.post@n4.nabble.com> Rebuild the menus. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1043-mcz-tp4861491p4861534.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Tue Nov 17 19:37:52 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 17 19:37:55 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1043.mcz In-Reply-To: <1447785444008-4861534.post@n4.nabble.com> References: <1447778400835-4861492.post@n4.nabble.com> <1447785444008-4861534.post@n4.nabble.com> Message-ID: That was it. Nice update Best, Karl On Tue, Nov 17, 2015 at 7:37 PM, marcel.taeumel wrote: > Rebuild the menus. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Morphic-mt-1043-mcz-tp4861491p4861534.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151117/00cecdb7/attachment.htm From tim at rowledge.org Tue Nov 17 19:50:40 2015 From: tim at rowledge.org (tim Rowledge) Date: Tue Nov 17 19:50:44 2015 Subject: [squeak-dev] Can we beat 'Processing'? Message-ID: <5F36ABFF-AD77-45FB-9296-4F0130D53BDF@rowledge.org> The Pi just got ?Processing?. I haven?t looked hard at it but it does look fairly simple stuff. I?m pretty sure we could provide something better - which is partly why I?ve been looking at B2D & B3D stuff. Take a look at https://www.raspberrypi.org/blog/now-available-for-download-processing/ for an idea of what it?s about. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Oxymorons: Military Intelligence From Marcel.Taeumel at hpi.de Tue Nov 17 20:05:17 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 17 20:20:01 2015 Subject: [squeak-dev] Re: Can we beat 'Processing'? In-Reply-To: <5F36ABFF-AD77-45FB-9296-4F0130D53BDF@rowledge.org> References: <5F36ABFF-AD77-45FB-9296-4F0130D53BDF@rowledge.org> Message-ID: <1447790717187-4861566.post@n4.nabble.com> Squeak got PhidgetLab :) http://www.hpi.uni-potsdam.de/hirschfeld/projects/phidgetlab/ What do you have in mind? Best, Marcel -- View this message in context: http://forum.world.st/Can-we-beat-Processing-tp4861553p4861566.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Tue Nov 17 20:33:40 2015 From: tim at rowledge.org (tim Rowledge) Date: Tue Nov 17 20:33:45 2015 Subject: [squeak-dev] Re: Can we beat 'Processing'? In-Reply-To: <1447790717187-4861566.post@n4.nabble.com> References: <5F36ABFF-AD77-45FB-9296-4F0130D53BDF@rowledge.org> <1447790717187-4861566.post@n4.nabble.com> Message-ID: <8B2A5879-1362-4655-9137-A075E2E0720E@rowledge.org> > On 17-11-2015, at 12:05 PM, marcel.taeumel wrote: > > Squeak got PhidgetLab :) > http://www.hpi.uni-potsdam.de/hirschfeld/projects/phidgetlab/ Very cool stuff. It would be nice to get that going on a Pi and use the gpio pins instead of the usb (or rather ?as well as? since the Pimoroni Flotilla system is just about to start shipping and is usb connected) There?s also the direct graphical stuff. It seems to be a bit ?trivial workspace code? (so we could offer some nicely wrapped easy to use interface) and a bit like the fabulous old MathMorphs & graphing that Leandro(?) did years ago. There?s a lot of neat sound stuff - both as a SonicPi beater and something usable within other apps The basic issue here is that there is a lot of cool educational stuff that has been done in Squeak that gets little exposure and really could make for some interesting Pi applications. Many of these would obviously work on other platforms as well, but the Pi is a big gorilla in edu for now, so let?s make use of it. More kids exposed to what you can do in a Smalltalk system means more youngsters growing up not accepting C/java/rubbish. Means more possible students for HPI and ?cole des Mines and so on. Means more secure teaching jobs for you :-) tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Thinks everyone else is entitled to his opinion, like it or not. From tim at rowledge.org Tue Nov 17 20:56:11 2015 From: tim at rowledge.org (tim Rowledge) Date: Tue Nov 17 20:56:15 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <564B5106.2040603@zogotounga.net> References: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> <564B5106.2040603@zogotounga.net> Message-ID: <03B2D037-5674-4306-B90A-31E07E299B45@rowledge.org> > On 17-11-2015, at 8:08 AM, St?phane Rollandin wrote: > >> Ah, sad. If anyone is interested, it can actually be loaded with some hassle and that rotating cube does work, so maybe it could be rescued? Is is worth it? > > I would vote for a rescue? Well, is it the best answer? What else has been done to use 3D with an option for hardware acceleration? Croquet/Cobalt is still out there but doesn?t seem to get a lot of action so far as I can see. There?s also the Rome/Cairo/Pango stuff for 2D - though according to the squeaksource.com/Rome repository there isn?t anything newer than ~jan 2007. And then there?s Nile/Gezira; can we actually use that? We seem to be sitting on a pile of treasure and not doing anything with it. I?d love to find out I?m wrong and that there is a nice easy to load package that will amaze me. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Not much to show for four billion years of evolution. From karlramberg at gmail.com Tue Nov 17 22:53:22 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 17 22:53:24 2015 Subject: [squeak-dev] Re: Can we beat 'Processing'? In-Reply-To: <8B2A5879-1362-4655-9137-A075E2E0720E@rowledge.org> References: <5F36ABFF-AD77-45FB-9296-4F0130D53BDF@rowledge.org> <1447790717187-4861566.post@n4.nabble.com> <8B2A5879-1362-4655-9137-A075E2E0720E@rowledge.org> Message-ID: It would be cool to have a simplified Workspace like scripting environment for starting users. Maybe a scoped browser. I have used various tile scripting systems and find that text is much superior when making anything more than simple toy projects. Karl On Tue, Nov 17, 2015 at 9:33 PM, tim Rowledge wrote: > > > On 17-11-2015, at 12:05 PM, marcel.taeumel > wrote: > > > > Squeak got PhidgetLab :) > > http://www.hpi.uni-potsdam.de/hirschfeld/projects/phidgetlab/ > > Very cool stuff. It would be nice to get that going on a Pi and use the > gpio pins instead of the usb (or rather ?as well as? since the Pimoroni > Flotilla system is just about to start shipping and is usb connected) > > There?s also the direct graphical stuff. It seems to be a bit ?trivial > workspace code? (so we could offer some nicely wrapped easy to use > interface) and a bit like the fabulous old MathMorphs & graphing that > Leandro(?) did years ago. There?s a lot of neat sound stuff - both as a > SonicPi beater and something usable within other apps > > The basic issue here is that there is a lot of cool educational stuff that > has been done in Squeak that gets little exposure and really could make for > some interesting Pi applications. Many of these would obviously work on > other platforms as well, but the Pi is a big gorilla in edu for now, so > let?s make use of it. More kids exposed to what you can do in a Smalltalk > system means more youngsters growing up not accepting C/java/rubbish. Means > more possible students for HPI and ?cole des Mines and so on. Means more > secure teaching jobs for you :-) > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Useful random insult:- Thinks everyone else is entitled to his opinion, > like it or not. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151117/e197fb70/attachment.htm From commits at source.squeak.org Tue Nov 17 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 17 22:55:03 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151117225502.17327.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009166.html Name: Morphic-cmm.1042 Ancestors: Morphic-mt.1041 - When selecting expressions, if the click occurs between two adjacent delimiters, give precedence to directional bracket delimiters over the non-directional punctuation delimiters, so that the correct expression will be selected. - In code panes, when advancing the cursor via Command+Shift+[left-arrow] and Command+Shift+[right-arrow], stop also at Smalltalk expression boundaries so that selection of expressions via those hot keys is feasible. - A further refinement to the in-place search-and-replace to present the suggested change to the user before changing it. - Don't let drag and drop mess with the z-order of SystemWindows. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009167.html Name: HelpSystem-Core-mt.81 Ancestors: HelpSystem-Core-mt.80 Fixes a bug where it was not possible to edit subtopics of the current root topic although that root topic (as the parent) was editable. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009168.html Name: HelpSystem-Core-mt.82 Ancestors: HelpSystem-Core-mt.81 Adds the possibility to show a specific topic when opening the help browser. Open the fest topic that is not empty by default (left-deep tree search). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009169.html Name: HelpSystem-Core-mt.83 Ancestors: HelpSystem-Core-mt.82 Adds support for opening the help browser in a source code-mode. Useful for opening the terse guide. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009170.html Name: Help-Squeak-Project-mt.33 Ancestors: Help-Squeak-Project-cmm.32 When opening a help browser for the command key help, open the first topic automatically. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009171.html Name: Morphic-mt.1043 Ancestors: Morphic-cmm.1042 Use the source code mode when opening the help browser for the terse guide directly via the main docking bar. ============================================= From casey.obrien.r at gmail.com Wed Nov 18 02:00:20 2015 From: casey.obrien.r at gmail.com (Casey Ransberger) Date: Wed Nov 18 02:00:22 2015 Subject: [squeak-dev] Can we beat 'Processing'? In-Reply-To: <5F36ABFF-AD77-45FB-9296-4F0130D53BDF@rowledge.org> References: <5F36ABFF-AD77-45FB-9296-4F0130D53BDF@rowledge.org> Message-ID: Replied late to this thread and tl;dr (sorry) but linguistically we can send Processing back to the Stone Age. It occupies an interesting middle-ground: folks, a lot of them artists, who are maybe too old for e.g. Scratch, making stuff to run on Arduinos, etc. We suck at real-time mainly because GC and the operating systems we run over which are busy with multi-user pre-emptive multitasking and virtual memory when there's only ever one user and plenty of RAM, etc, but most people doing Processing aren't liable to be using the micro controllers for real time applications anyway. It's just a conveniently C-like curly braced language that compiles down to Amtel machine code. I guess ARM now too. It seems like the answer to your question is simply "lead a popularity contest and win." The longer explanation is most likely "for all but seriously real-time apps, yes" but that's not the whole game. Most of the game isn't real-time, and we (in the longer term) should be able to improve and extend the Slang system to deal with realtime issues in machine code while the VM just sleeps. So, I guess I'm saying: in the long game, I think yeah. --C On Tuesday, November 17, 2015, tim Rowledge wrote: > The Pi just got ?Processing?. I haven?t looked hard at it but it does look > fairly simple stuff. I?m pretty sure we could provide something better - > which is partly why I?ve been looking at B2D & B3D stuff. > > Take a look at > https://www.raspberrypi.org/blog/now-available-for-download-processing/ > for an idea of what it?s about. > > tim > -- > tim Rowledge; tim@rowledge.org ; http://www.rowledge.org/tim > Oxymorons: Military Intelligence > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151117/f75ae2bd/attachment.htm From asqueaker at gmail.com Wed Nov 18 03:39:55 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 18 03:39:58 2015 Subject: [squeak-dev] Re: in-place search-and-replace In-Reply-To: <1447773319890-4861475.post@n4.nabble.com> References: <20151117131426.GB59202@shell.msen.com> <1447773319890-4861475.post@n4.nabble.com> Message-ID: Oh my, I just noticed the possibility of a lock up (interruptable) when using the new cmd+J. It appears the whileTrue: loop in TextEditor>>#againUpToEnd cannot escape... Reverting TextEditor>>#findReplaceAgain (to TextEditor>>#findReplaceAgain) will avoid the lockup temporarily until I can figure out a fix. On Tue, Nov 17, 2015 at 9:15 AM, marcel.taeumel wrote: > *hehe* I did not know that Squeak was able to search-replace everything until > I saw that code. :) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/in-place-search-and-replace-tp4861383p4861475.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From lists at dcorking.com Wed Nov 18 09:20:21 2015 From: lists at dcorking.com (David Corking) Date: Wed Nov 18 09:20:43 2015 Subject: [squeak-dev] Re: Can we beat 'Processing'? In-Reply-To: <1447790717187-4861566.post@n4.nabble.com> References: <5F36ABFF-AD77-45FB-9296-4F0130D53BDF@rowledge.org> <1447790717187-4861566.post@n4.nabble.com> Message-ID: marcel.taeumel wrote: > Squeak got PhidgetLab :) > http://www.hpi.uni-potsdam.de/hirschfeld/projects/phidgetlab/ Is Physical Etoys is another candidate to port to Pi's GPIO pins? http://tecnodacta.com.ar/gira/projects/physical-etoys/ -- David Corking Freelance Rubyist "debug a program into existence" David Ungar, 1986 From commits at source.squeak.org Wed Nov 18 12:45:31 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 18 12:45:31 2015 Subject: [squeak-dev] The Trunk: Protocols-mt.53.mcz Message-ID: Marcel Taeumel uploaded a new version of Protocols to project The Trunk: http://source.squeak.org/trunk/Protocols-mt.53.mcz ==================== Summary ==================== Name: Protocols-mt.53 Author: mt Time: 18 November 2015, 1:45:24.373 pm UUID: 87184e4d-648a-483c-be05-2933f89711ce Ancestors: Protocols-topa.52 Fixes regression in Lexicon with message icons enabled. The Lexicon does some fancy trick with displaying bold items in the message list. We might want to refactor that. See Lexicon >> #initListFrom:highlighting: to understand the existing hack. =============== Diff against Protocols-topa.52 =============== Item was added: + ----- Method: Lexicon>>messageHelpAt: (in category 'message list') ----- + messageHelpAt: anIndex + "Not working due to text representation of message list." + ^ nil! Item was added: + ----- Method: Lexicon>>messageIconAt: (in category 'message list') ----- + messageIconAt: anIndex + "Not working due to text representation of message list." + ^ nil! From commits at source.squeak.org Wed Nov 18 12:55:48 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 18 12:55:49 2015 Subject: [squeak-dev] The Trunk: Tools-ul.653.mcz Message-ID: Levente Uzonyi uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-ul.653.mcz ==================== Summary ==================== Name: Tools-ul.653 Author: ul Time: 18 November 2015, 2:55:17.943 pm UUID: 885d596c-c8d3-447d-b5e1-67dc1320008b Ancestors: Tools-cmm.652 Implemented #messageIconAt: in TimeProfileBrowser, to make it work again. It's not a "real" MessageSet, because its messageList contains strings instead of MethodReferences. =============== Diff against Tools-cmm.652 =============== Item was added: + ----- Method: TimeProfileBrowser>>messageIconAt: (in category 'message list') ----- + messageIconAt: index + + ^nil! From hannes.hirzel at gmail.com Wed Nov 18 13:00:23 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Nov 18 13:00:28 2015 Subject: [squeak-dev] Re: [Cuis] New Introductory Tutorial In-Reply-To: <564A77EE.6060802@jvuletich.org> References: <564A77EE.6060802@jvuletich.org> Message-ID: Hi Euan Worthwhile to refer to in your tutorial is as well the web version of the ProfStef Smalltalk tutorial implemented in Amber Smalltalk http://amber-smalltalk.github.io/trysmalltalk/ (https://github.com/amber-smalltalk/trysmalltalk) It explains the syntax, control constructs and some basic classes. It was first implemented in Pharo and then ported. --Hannes On 11/17/15, Juan Vuletich wrote: > Hi EuanM, > > This is a great initiative. Thanks for including Cuis in the bunch! > > Cheers, > Juan Vuletich > > On 14/11/2015 02:02 a.m., EuanM wrote: >> I've created Yet Another Smalltalk First >> Steps tutorial. >> >> This is intended as one of a series. >> >> It is designed to be cross-platform across >> >> Squeak 5 >> Pharo 4 >> Seaside 3.1 >> Cuis >> Dolphin 6 >> >> If you have experience running any of these systems on Windows, Linux >> or MacOS, please check to see if I have the instructions correct for >> your chosen pairing of Smalltalk and OS platform. >> >> (As you'll see when you look, I do not have detailed instructions for >> aspects of MacOS). >> >> The document is at: >> http://smalltalkinsmallsteps.blogspot.co.uk/2015/11/get-smalltalk-up-and-running.html >> >> (It's intended to move to a different blog after this review process). >> >> I feel the need to do this as cross-Smalltalks tutorial because of >> findings and 4 charts I've placed at: >> http://smalltalkinsmallsteps.blogspot.co.uk/2015/11/mindshare-of-smalltalk-in-development.html >> >> Essentially, Smalltalk mindshare and use is incredibly tiny, compared >> to other languages in the same space. (We all know this, but seeing >> it represented graphically has a more visceral effect, IMO) >> >> Aggregating interest in all the Smalltalks still does not bring more >> than a tiny proportion of the interest in, and use of, Ruby. >> >> In turn, Ruby is (quite understandably) small in comparison to >> JavaScript. >> >> Comparing interest in any specific Smalltalk is, predictably, smaller >> than the aggregate interest in Smalltalk. >> >> Our community seems determined to split itself into smaller and >> smaller sub-communities. I think we do ourselves a disservice this >> way. >> >> My initial contribution will be to try to provide some explicitly >> pan-Smalltalk beginners' tutorials, like this one. >> >> Cheers, and happy Smalltalking, >> EuanM >> >> _______________________________________________ >> Cuis mailing list >> Cuis@jvuletich.org >> http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org >> > > > _______________________________________________ > Cuis mailing list > Cuis@jvuletich.org > http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org > From eliot.miranda at gmail.com Wed Nov 18 19:20:16 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Nov 18 19:20:20 2015 Subject: [squeak-dev] Fixing tab behaviour and browser hierarchy appearance Message-ID: Hi Marcel, I'm having a go at fixing the tabbing indent behavior. I can't live with selecting interior text (text that is past some sequence of whitespace at the beginning of a line), typing tab to replace the selection with tabs, and have the line indent instead. If people want the indent all they have to do is select within whitespace at the beginning of the line. However, when I opened up the browser to inspect the Editor, TextEditor, SmalltalkEditor hierarchy I was misled into thinking that SmalltalkEditor was a sibling of TextEditor rather than its subclass because SmalltalkEditor is indented so little w.r.t. TextEditor. To reproduce, open up a browser and navigate to Morphic-Text Support, then look at TextEditor and SmalltalkEditor. I think you'll agree that the indent needs to be larger. I'll fix tab indenting if you fix browser indenting ;-) _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151118/7cfa130f/attachment-0001.htm From Marcel.Taeumel at hpi.de Wed Nov 18 19:18:51 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 18 19:33:42 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: Message-ID: <1447874331813-4861774.post@n4.nabble.com> Hi Eliot, Chris modified indenting and outdenting so that you can select a text multi (multiple lines also) and hit TAB to indent or SHIFT+TAB to outdent. I like this feature. Should we make it optional? (Prior to this, it was CMD+SHFT+L/R). --- Yes, this T as a parent from S is really confusing. The vertical bar of the T is indented almost so much that it hits the left bound of the S. But it's an illusion brought to you by the current font. What about making the indent just a little bit more obvious? Adding more spaces? =) Best, Marcel -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861774.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Nov 18 20:01:18 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 18 20:01:20 2015 Subject: [squeak-dev] The Trunk: Morphic-eem.1044.mcz Message-ID: Eliot Miranda uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-eem.1044.mcz ==================== Summary ==================== Name: Morphic-eem.1044 Author: eem Time: 18 November 2015, 12:00:36.271 pm UUID: 0ec2bc30-6135-4996-9005-93d4e83321df Ancestors: Morphic-mt.1043 Fix typing of tabs in the "middle" of a line. Only interpret the tab as an indent if the start of the selection is in a run of whitespace from the start of line. =============== Diff against Morphic-mt.1043 =============== Item was changed: ----- Method: TextEditor>>beginningOfLine: (in category 'private') ----- beginningOfLine: position "Redefined in subclasses using Paragraph support" + ^ (paragraph lines at:(paragraph lineIndexOfCharacterIndex: position)) first! - ^ (paragraph lines at:(paragraph lineIndexFor: position)) first! 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." (Character separators includes: typedChar) ifTrue: [self closeTypeIn]. "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 and: [self isInWhitespaceAtStartOfLine]) ifTrue: [ - (typedChar == Character tab and: [self hasSelection]) ifTrue: [ aKeyboardEvent shiftPressed ifTrue: [self outdent: aKeyboardEvent] ifFalse: [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 ifTrue: [((self hasSelection and: [self enclose: aKeyboardEvent]) or: [self autoEncloseFor: typedChar]) ifTrue: [^ true]]. self normalCharacter: aKeyboardEvent. ^ false! Item was added: + ----- Method: TextEditor>>isInWhitespaceAtStartOfLine (in category 'typing support') ----- + isInWhitespaceAtStartOfLine + ^self selectionStringFromBeginningOfLine allSatisfy: [:c| c isSeparator]! Item was added: + ----- Method: TextEditor>>selectionStringFromBeginningOfLine (in category 'accessing-selection') ----- + selectionStringFromBeginningOfLine + ^paragraph string copyFrom: (self beginningOfLine: self startBlock stringIndex) to: self startBlock stringIndex! From commits at source.squeak.org Wed Nov 18 20:31:05 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 18 20:31:06 2015 Subject: [squeak-dev] The Trunk: Morphic-eem.1045.mcz Message-ID: Eliot Miranda uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-eem.1045.mcz ==================== Summary ==================== Name: Morphic-eem.1045 Author: eem Time: 18 November 2015, 12:30:19.5 pm UUID: c075afdf-82d4-4ed8-8432-d2cca71c3257 Ancestors: Morphic-eem.1044 And fix typing a tab at the send of the text. =============== Diff against Morphic-eem.1044 =============== Item was changed: ----- Method: TextEditor>>selectionStringFromBeginningOfLine (in category 'accessing-selection') ----- selectionStringFromBeginningOfLine + ^paragraph string copyFrom: (self beginningOfLine: self startBlock stringIndex) to: (self startBlock stringIndex min: paragraph string size)! - ^paragraph string copyFrom: (self beginningOfLine: self startBlock stringIndex) to: self startBlock stringIndex! From asqueaker at gmail.com Wed Nov 18 20:39:18 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 18 20:39:19 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1447874331813-4861774.post@n4.nabble.com> References: <1447874331813-4861774.post@n4.nabble.com> Message-ID: > Chris modified indenting and outdenting so that you can select a text multi > (multiple lines also) and hit TAB to indent or SHIFT+TAB to outdent. I like > this feature. > > Should we make it optional? (Prior to this, it was CMD+SHFT+L/R). Maybe my change should be that the Control key is required. So, Control+Tab for indent, Control+Shift+Tab for outdent, recovering Tab as a regular character for replacement of a selection. I must admit, I've found myself doing exactly what Eliot did; pressing Tab to replace a selection of code. Just an old habit. I do think I could retrain that habit without much difficulty. I can either just press backspace (or delete), okay, its one extra key, OR, since I use the code formatter anyway, simply don't worry about formatting when writing. Just let the thoughts stream out my fingers as fast as I can type, llet the machine format it when I save: Cmd+S+s (format, save). I think restoring the behavior Eliot wants and requiring Control is a good solution. Manual indenting is such a rare and direct thought anyway -- and when one is doing that, they aren't thinking about their own stuff. That's a fine time to have to press the Control key. From asqueaker at gmail.com Wed Nov 18 20:47:28 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 18 20:47:30 2015 Subject: [squeak-dev] Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: Message-ID: There's another use-case that's affected as well: copy and pasting code out of an email into a workspace and wanting to use search-and-replace to change 4 spaces back to Tabs. Because there is a selection, it thinks you want to indent that line instead of replace it with a Tab character. The only way to do it now is to copy a tab into the clipboard and paste it as the replacement. That's too onerous.. On Wed, Nov 18, 2015 at 1:20 PM, Eliot Miranda wrote: > Hi Marcel, > > I'm having a go at fixing the tabbing indent behavior. I can't live > with selecting interior text (text that is past some sequence of whitespace > at the beginning of a line), typing tab to replace the selection with tabs, > and have the line indent instead. If people want the indent all they have > to do is select within whitespace at the beginning of the line. > > However, when I opened up the browser to inspect the Editor, TextEditor, > SmalltalkEditor hierarchy I was misled into thinking that SmalltalkEditor > was a sibling of TextEditor rather than its subclass because SmalltalkEditor > is indented so little w.r.t. TextEditor. > > To reproduce, open up a browser and navigate to Morphic-Text Support, then > look at TextEditor and SmalltalkEditor. I think you'll agree that the > indent needs to be larger. > > I'll fix tab indenting if you fix browser indenting ;-) > > _,,,^..^,,,_ > best, Eliot > > > From lecteur at zogotounga.net Wed Nov 18 20:52:02 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Wed Nov 18 20:52:06 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <03B2D037-5674-4306-B90A-31E07E299B45@rowledge.org> References: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> <564B5106.2040603@zogotounga.net> <03B2D037-5674-4306-B90A-31E07E299B45@rowledge.org> Message-ID: <564CE4F2.9050301@zogotounga.net> >>> Ah, sad. If anyone is interested, it can actually be loaded with some hassle and that rotating cube does work, so maybe it could be rescued? Is is worth it? >> >> I would vote for a rescue? > > Well, is it the best answer? Sorry, I thought you asked. Stef From commits at source.squeak.org Wed Nov 18 21:36:07 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 18 21:36:07 2015 Subject: [squeak-dev] The Inbox: Morphic-cmm.1046.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Inbox: http://source.squeak.org/inbox/Morphic-cmm.1046.mcz ==================== Summary ==================== Name: Morphic-cmm.1046 Author: cmm Time: 18 November 2015, 3:35:27.846 pm UUID: 190d66d8-9804-467d-9cc5-4e656c340717 Ancestors: Morphic-mt.1043 Recover the Tab key's ability to produce a Tab character normally, able to replace a selection of text. Indenting is fine to invoke with Control+Tab. =============== Diff against Morphic-mt.1043 =============== 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." (Character separators includes: typedChar) ifTrue: [self closeTypeIn]. "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 and: [aKeyboardEvent controlKeyPressed and: [self hasSelection]]) ifTrue: [ - (typedChar == Character tab and: [self hasSelection]) ifTrue: [ aKeyboardEvent shiftPressed ifTrue: [self outdent: aKeyboardEvent] ifFalse: [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 ifTrue: [((self hasSelection and: [self enclose: aKeyboardEvent]) or: [self autoEncloseFor: typedChar]) ifTrue: [^ true]]. self normalCharacter: aKeyboardEvent. ^ false! From commits at source.squeak.org Wed Nov 18 21:43:19 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 18 21:43:20 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1046.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1046.mcz ==================== Summary ==================== Name: Morphic-mt.1046 Author: mt Time: 18 November 2015, 10:42:36.478 pm UUID: 204f289b-46cb-4d7d-bf51-964ce4fdedd8 Ancestors: Morphic-eem.1045 Text editing: Fixes a bug with an endless loop when find/replace under certain conditions. Refactors the find, find/replace, and do-again code. =============== Diff against Morphic-eem.1045 =============== Item was changed: ----- Method: TextEditor>>again (in category 'menu messages') ----- again "Do the same replace command again. Unlike #findReplaceAgain, this looks up the editor's own command history and uses the previous command." + (self history hasPrevious and: [self history previous hasReplacedSomething]) + ifFalse: [morph flash. ^ false]. - self history hasPrevious ifFalse: [morph flash. ^ self]. + self + setSearchFromSelectionOrHistory; + setReplacementFromHistory. + + "If we have no selection, give the user one to avoid annoying surprises." + ^ self hasSelection + ifTrue: [self findReplaceAgainNow] + ifFalse: [self findAgainNow. false "see #againUpToEnd"]! - self history previous hasReplacedSomething - ifFalse: [morph flash. ^ self] - ifTrue: [ | nextOperation | - nextOperation := (self selection=ChangeText) ifTrue: [#findAgain] ifFalse: [#findReplaceAgain]. - "Reset shared find/replace state." - FindText := self history previous contentsBefore. - ChangeText := self history previous contentsAfter. - - self selectAt: self stopIndex. - self perform: nextOperation. - nextOperation = #findReplaceAgain ifTrue: [ self findAgainSettingSearch: false ] ].! Item was changed: ----- Method: TextEditor>>againUpToEnd (in category 'menu messages') ----- againUpToEnd "Find and replace until the end." + | first | + self again ifFalse: [^ self]. - | interval pivot isFirst last | - self history hasPrevious ifFalse: [morph flash. ^ self]. - - pivot := self history previous. - pivot hasReplacedSomething ifFalse: [morph flash. ^ self]. + first := self history previous. - "Reset shared find/replace state." - FindText := pivot contentsBefore. - ChangeText := pivot contentsAfter. + [self hasSelection] whileTrue: [ + self history previous + isCompositeUndo: true; + isCompositeRedo: true. + self findReplaceAgainNow]. - isFirst := true. - last := pivot. - [self selectionInterval ~= interval] whileTrue: [ - last ~= pivot ifTrue: [ - last - isCompositeUndo: isFirst not; - isCompositeRedo: true. - isFirst := false]. - last := self history previous. - interval := self selectionInterval. - - self selectAt: self stopIndex. "No selection to make find work." - self findReplaceAgain]. + first isCompositeUndo: false. + + self history previous isCompositeUndo: first ~~ self history previous. + self history previous isCompositeRedo: false.! - last isCompositeRedo: false.! Item was changed: ----- Method: TextEditor>>doAgainUpToEnd: (in category 'typing/selecting keys') ----- doAgainUpToEnd: aKeyboardEvent + "Do the previous thing again once. 1/26/96 sw" + + self insertAndCloseTypeIn. + self againUpToEnd. - "Do the previous thing again repeatedly to the end of my contents. Under circumstances this can require two calls to againUpToEnd " - self - insertAndCloseTypeIn ; - againUpToEnd ; - againUpToEnd. ^ true! Item was changed: ----- Method: TextEditor>>find (in category 'menu messages') ----- find "Prompt the user for a string to search for, and search the receiver from the current selection onward for it. 1/26/96 sw" + self setSearchFromSelectionOrHistory. + + (UIManager default request: 'Find what to select? ' initialAnswer: FindText) - (UIManager default request: 'Find what to select? ' initialAnswer: (self selection ifEmpty: [FindText])) ifEmpty: [^ self] ifNotEmpty: [:reply | + FindText := reply. + self findAgainNow].! - self setSearch: reply. - self findAgain].! Item was changed: ----- Method: TextEditor>>find: (in category 'typing/selecting keys') ----- find: aKeyboardEvent + "Prompt the user for what to find, then find it, searching from the current selection onward." - "Prompt the user for what to find, then find it, searching from the current selection onward. 1/24/96 sw" + self + insertAndCloseTypeIn; + find. + - self insertAndCloseTypeIn. - self find. ^ true! Item was changed: ----- Method: TextEditor>>findAgain (in category 'menu messages') ----- findAgain + self setSearchFromSelectionOrHistory. - | where | - where := self text - findString: FindText - startingAt: self stopIndex - caseSensitive: Preferences caseSensitiveFinds. + ^ self findAgainNow! - where = 0 ifTrue: [^ false]. - - self selectFrom: where to: where + FindText size - 1. - - ^ true! Item was changed: ----- Method: TextEditor>>findAgain: (in category 'typing/selecting keys') ----- findAgain: aKeyboardEvent + "Find the desired text again." + - | previousHistory | - previousHistory := self history previous. self + insertAndCloseTypeIn; + findAgain. + - insertAndCloseTypeIn ; - findAgainSettingSearch: (previousHistory isNil or: [ previousHistory hasReplacedSomething not ]). ^ true! Item was added: + ----- Method: TextEditor>>findAgainNow (in category 'typing support') ----- + findAgainNow + + | where | + where := self text + findString: FindText + startingAt: self stopIndex + caseSensitive: Preferences caseSensitiveFinds. + + where = 0 + ifTrue: [self selectFrom: self stopIndex to: self stopIndex - 1] + ifFalse: [self selectFrom: where to: where + FindText size - 1]. + + ^ true! Item was removed: - ----- Method: TextEditor>>findAgainSettingSearch: (in category 'menu messages') ----- - findAgainSettingSearch: aBoolean - aBoolean ifTrue: - [ self hasSelection ifTrue: - [ self setSearch: self selection string ] ]. - self findAgain! Item was changed: ----- Method: TextEditor>>findReplace (in category 'menu messages') ----- findReplace + self + setSearchFromSelectionOrHistory; + setReplacementFromHistory. + + (UIManager default request: 'Find what to replace?' initialAnswer: FindText) - (UIManager default request: 'Find what to replace?' initialAnswer: (self selection ifEmpty: [FindText])) ifEmpty: [^ self] ifNotEmpty: [:find | (UIManager default request: ('Replace ''{1}'' with?' format: {find}) initialAnswer: (ChangeText ifEmpty: [find])) ifEmpty: [^ self] ifNotEmpty: [:replace | FindText := find. ChangeText := replace. + self findReplaceAgainNow]]! - self findReplaceAgain]]! Item was changed: ----- Method: TextEditor>>findReplace: (in category 'typing/selecting keys') ----- findReplace: aKeyboardEvent + self + insertAndCloseTypeIn; + findReplace. + - self insertAndCloseTypeIn. - self findReplace. ^ true! Item was changed: ----- Method: TextEditor>>findReplaceAgain (in category 'menu messages') ----- findReplaceAgain + self + setSearchFromSelectionOrHistory; + setReplacementFromHistory. + + ^ self findReplaceAgainNow! - | where | - self hasSelection ifTrue: [ - "Search from the beginning of the current selection. Supports a nice combination with regular find feature." - self selectInvisiblyFrom: self startIndex to: self startIndex - 1]. - - where := self text - findString: FindText - startingAt: self stopIndex-FindText size - caseSensitive: Preferences caseSensitiveFinds. - - where = 0 ifTrue: [^ false]. - - self selectInvisiblyFrom: where to: where + FindText size - 1. - self replaceSelectionWith: ChangeText. - - ^ true! Item was changed: ----- Method: TextEditor>>findReplaceAgain: (in category 'typing/selecting keys') ----- findReplaceAgain: aKeyboardEvent + self + insertAndCloseTypeIn; + findReplaceAgain. + - self insertAndCloseTypeIn. - self findReplaceAgain. ^ true! Item was added: + ----- Method: TextEditor>>findReplaceAgainNow (in category 'typing support') ----- + findReplaceAgainNow + + self hasSelection ifTrue: [ + "Search from the beginning of the current selection. Supports a nice combination with regular find feature." + self selectInvisiblyFrom: self startIndex to: self startIndex - 1]. + + self findAgainNow. + self hasSelection ifFalse: [^ false]. + + self replaceSelectionWith: ChangeText. + self findAgainNow. "Select possible next thing to replace." + + ^ true! Item was changed: ----- Method: TextEditor>>mouseMove: (in category 'events') ----- + mouseMove: evt - mouseMove: evt "Change the selection in response to mouse-down drag" + pointBlock := paragraph characterBlockAtPoint: evt position. + self storeSelectionInParagraph! - self - storeSelectionInParagraph ; - setSearch: self selection string! Item was changed: + ----- Method: TextEditor>>redoAndReselect (in category 'undo') ----- - ----- Method: TextEditor>>redoAndReselect (in category 'undoers') ----- redoAndReselect self replace: self history current intervalBefore with: self history current contentsAfter and: [self selectInterval: self history current intervalAfter].! Item was changed: + ----- Method: TextEditor>>replace:with: (in category 'undo') ----- - ----- Method: TextEditor>>replace:with: (in category 'accessing') ----- replace: interval with: newText self replace: interval with: newText and: ["Do nothing."].! Item was changed: + ----- Method: TextEditor>>replace:with:and: (in category 'undo') ----- - ----- Method: TextEditor>>replace:with:and: (in category 'accessing') ----- replace: xoldInterval with: newText and: selectingBlock "Replace the text in oldInterval with newText and execute selectingBlock to establish the new selection. Create an undoAndReselect:redoAndReselect: undoer to allow perfect undoing." | undoInterval | undoInterval := self selectionInterval. undoInterval = xoldInterval ifFalse: [self selectInterval: xoldInterval]. self zapSelectionWith: newText. selectingBlock value. otherInterval := self selectionInterval.! Item was changed: + ----- Method: TextEditor>>replaceSelectionWith: (in category 'undo') ----- - ----- Method: TextEditor>>replaceSelectionWith: (in category 'accessing') ----- replaceSelectionWith: aText "Remember the selection text in UndoSelection. Deselect, and replace the selection text by aText. Remember the resulting selectionInterval in UndoInterval and PriorInterval. Set up undo to use UndoReplace." self openTypeIn. self zapSelectionWith: aText. self closeTypeIn.! Item was changed: ----- Method: TextEditor>>selectFrom:to: (in category 'new selection') ----- selectFrom: start to: stop "Select the specified characters inclusive." self selectInvisiblyFrom: start to: stop. self closeTypeIn. self storeSelectionInParagraph. "Preserve current emphasis if selection is empty" stop > start ifTrue: [ + self setEmphasisHere ]! - self setEmphasisHere ]. - self hasSelection ifTrue: [ self setSearch: self selection string ]! Item was added: + ----- Method: TextEditor>>setReplacementFromHistory (in category 'accessing') ----- + setReplacementFromHistory + "Use history to get the previous replacement." + + (self history hasPrevious and: [self history previous hasReplacedSomething]) + ifTrue: [ChangeText := self history previous contentsAfter].! Item was changed: ----- Method: TextEditor>>setSearch: (in category 'accessing') ----- setSearch: aStringOrText + FindText := aStringOrText.! - FindText := aStringOrText. - ChangeText := self nullText.! Item was added: + ----- Method: TextEditor>>setSearchFromSelectionOrHistory (in category 'accessing') ----- + setSearchFromSelectionOrHistory + "Updates the current string to find with the current selection or the last change if it replaced something and thus had a prior selection." + + self hasSelection + ifTrue: [FindText := self selection] + ifFalse: [(self history hasPrevious and: [self history previous hasReplacedSomething]) + ifTrue: [FindText := self history previous contentsBefore]].! Item was changed: + ----- Method: TextEditor>>undoAndReselect (in category 'undo') ----- - ----- Method: TextEditor>>undoAndReselect (in category 'undoers') ----- undoAndReselect self replace: self history current intervalBetween with: self history current contentsBefore and: [self selectInterval: self history current intervalBefore].! From Marcel.Taeumel at hpi.de Wed Nov 18 21:30:11 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 18 21:45:02 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: Message-ID: <1447882211625-4861820.post@n4.nabble.com> Do Eliots recent changes work fine? Seems so. :) Best, Marcel -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861820.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From asqueaker at gmail.com Wed Nov 18 21:54:05 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 18 21:54:07 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1447882211625-4861820.post@n4.nabble.com> References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: They actually don't. Are you against Control+Tab for indent? On Wed, Nov 18, 2015 at 3:30 PM, marcel.taeumel wrote: > Do Eliots recent changes work fine? Seems so. :) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861820.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From nicolaihess at gmail.com Wed Nov 18 22:06:29 2015 From: nicolaihess at gmail.com (Nicolai Hess) Date: Wed Nov 18 22:06:31 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: 2015-11-18 22:54 GMT+01:00 Chris Muller : > They actually don't. Are you against Control+Tab for indent? > Control+Tab does not work well on windows. (VM does not generate a keychar event for this key combination). > > > On Wed, Nov 18, 2015 at 3:30 PM, marcel.taeumel > wrote: > > Do Eliots recent changes work fine? Seems so. :) > > > > Best, > > Marcel > > > > > > > > -- > > View this message in context: > http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861820.html > > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151118/089b7222/attachment.htm From leves at elte.hu Wed Nov 18 22:08:28 2015 From: leves at elte.hu (Levente Uzonyi) Date: Wed Nov 18 22:08:31 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1447882211625-4861820.post@n4.nabble.com> References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: On Wed, 18 Nov 2015, marcel.taeumel wrote: > Do Eliots recent changes work fine? Seems so. :) Shift+Tab doesn't work at all. Tab doesn't work when the first selected character is not a whitespace. The common solution is that Tab replaces the selection when it's within a single line, and indents when it spans over multiple lines. I think that's what we should implement as well. Shift+Tab is fine to unindent in all cases, because we don't expect replacement for that key combination. Levente > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861820.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From eliot.miranda at gmail.com Wed Nov 18 22:52:35 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Nov 18 22:52:39 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: > On Nov 18, 2015, at 1:54 PM, Chris Muller wrote: > > They actually don't. Are you against Control+Tab for indent? Are you sure? I had one bug and I fixed it. I think what's there now works fine. > > >> On Wed, Nov 18, 2015 at 3:30 PM, marcel.taeumel wrote: >> Do Eliots recent changes work fine? Seems so. :) >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861820.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > From commits at source.squeak.org Wed Nov 18 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 18 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151118225502.16556.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009172.html Name: Protocols-mt.53 Ancestors: Protocols-topa.52 Fixes regression in Lexicon with message icons enabled. The Lexicon does some fancy trick with displaying bold items in the message list. We might want to refactor that. See Lexicon >> #initListFrom:highlighting: to understand the existing hack. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009173.html Name: Tools-ul.653 Ancestors: Tools-cmm.652 Implemented #messageIconAt: in TimeProfileBrowser, to make it work again. It's not a "real" MessageSet, because its messageList contains strings instead of MethodReferences. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009174.html Name: Morphic-eem.1044 Ancestors: Morphic-mt.1043 Fix typing of tabs in the "middle" of a line. Only interpret the tab as an indent if the start of the selection is in a run of whitespace from the start of line. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009175.html Name: Morphic-eem.1045 Ancestors: Morphic-eem.1044 And fix typing a tab at the send of the text. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009176.html Name: Morphic-mt.1046 Ancestors: Morphic-eem.1045 Text editing: Fixes a bug with an endless loop when find/replace under certain conditions. Refactors the find, find/replace, and do-again code. ============================================= From asqueaker at gmail.com Wed Nov 18 23:05:21 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 18 23:05:23 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: On Wed, Nov 18, 2015 at 4:08 PM, Levente Uzonyi wrote: > On Wed, 18 Nov 2015, marcel.taeumel wrote: > >> Do Eliots recent changes work fine? Seems so. :) > > > Shift+Tab doesn't work at all. It doesn't work on Linux. It _does_ work on Windows. Not sure about Mac (someone confirm?). Strangely, Control+Tab does NOT work on Windows. My hope is that this is a trivial VM fix so that Squeak can have access to that key. Lets design our vision of ideal for the image, and then we'll have it once the VM gets fixed. Of course, we better check with Eliot about that.. :) Eliot, if there's no hope of having Shift[+Control]+Tab detection on all platforms, then we should wish to consider other options... > Tab doesn't work when the first selected character is not a whitespace. Agree, because that's when I actually WANT replacement via the Tab character, not indentation. Almost like if Eliots change were reversed I might like it better.. Putting Tab in the midddle of a line seems much rarer than the beginning... Still, IF Control+Tab worked, that would be the idea solution. > The common solution is that Tab replaces the selection when it's within a > single line, and indents when it spans over multiple lines. Not sure, it seems just as likely to want to select entire multi-line expressions and wnat to replace them iwth new expressions, starting with a Tabular indentation... > I think that's what we should implement as well. > Shift+Tab is fine to unindent in all cases, because we don't expect > replacement for that key combination. Agree there, if only the key worked... From leves at elte.hu Wed Nov 18 23:22:15 2015 From: leves at elte.hu (Levente Uzonyi) Date: Wed Nov 18 23:22:19 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: On Wed, 18 Nov 2015, Chris Muller wrote: > On Wed, Nov 18, 2015 at 4:08 PM, Levente Uzonyi wrote: >> On Wed, 18 Nov 2015, marcel.taeumel wrote: >> >>> Do Eliots recent changes work fine? Seems so. :) >> >> >> Shift+Tab doesn't work at all. > > It doesn't work on Linux. It _does_ work on Windows. Not sure about > Mac (someone confirm?). Strangely, Control+Tab does NOT work on > Windows. > > My hope is that this is a trivial VM fix so that Squeak can have > access to that key. Lets design our vision of ideal for the image, > and then we'll have it once the VM gets fixed. Of course, we better > check with Eliot about that.. :) > > Eliot, if there's no hope of having Shift[+Control]+Tab detection on > all platforms, then we should wish to consider other options... In an ideal system you can change the key bindings the way you want. So we should find a way to avoid hardcoding them. > >> Tab doesn't work when the first selected character is not a whitespace. > > Agree, because that's when I actually WANT replacement via the Tab > character, not indentation. > > Almost like if Eliots change were reversed I might like it better.. > Putting Tab in the midddle of a line seems much rarer than the > beginning... > > Still, IF Control+Tab worked, that would be the idea solution. > >> The common solution is that Tab replaces the selection when it's within a >> single line, and indents when it spans over multiple lines. > > Not sure, it seems just as likely to want to select entire multi-line > expressions and wnat to replace them iwth new expressions, starting > with a Tabular indentation... You can always use Delete or Backspace to delete the selection. Levente > >> I think that's what we should implement as well. >> Shift+Tab is fine to unindent in all cases, because we don't expect >> replacement for that key combination. > > Agree there, if only the key worked... > > From asqueaker at gmail.com Wed Nov 18 23:54:32 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 18 23:54:34 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: >> Not sure, it seems just as likely to want to select entire multi-line >> expressions and wnat to replace them iwth new expressions, starting >> with a Tabular indentation... > > > You can always use Delete or Backspace to delete the selection. So could Eliot when he wanted to replace interior text with a Tab. Instead, the Indentation command has been made _very_ obscure, because Eliots condition seems exactly reverse of what it should be. When I use indentation, I do a sloppy-swipe (middle to middle) of the lines I want to indent and press Tab. That's a fair response because no one ever puts Tab characters in the middle of a word of a line. However, people DO want to type tabs _between_ words, or at the _beginning_ of lines. Eliot, I'm quite curious about your use-case, are you doing a text-based report with columns? If we flipped around your condition would it still work for you? From eliot.miranda at gmail.com Thu Nov 19 00:38:08 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Nov 19 00:38:10 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: On Wed, Nov 18, 2015 at 3:54 PM, Chris Muller wrote: > >> Not sure, it seems just as likely to want to select entire multi-line > >> expressions and wnat to replace them iwth new expressions, starting > >> with a Tabular indentation... > > > > > > You can always use Delete or Backspace to delete the selection. > > So could Eliot when he wanted to replace interior text with a Tab. > > Instead, the Indentation command has been made _very_ obscure, because > Eliots condition seems exactly reverse of what it should be. When I > use indentation, I do a sloppy-swipe (middle to middle) of the lines I > want to indent and press Tab. That's a fair response because no one > ever puts Tab characters in the middle of a word of a line. However, > people DO want to type tabs _between_ words, or at the _beginning_ of > lines. > > Eliot, I'm quite curious about your use-case, are you doing a > text-based report with columns? Formatting case statements. > If we flipped around your condition > would it still work for you? > No it wouldn't. If I type a tab to replace the selection I mean to replace the selection with a tab. How else is one supposed to get a tab into the middle of a line, select,copy,paste?? Look, my change makes typing a tab in the middle of a line do what one would expect, insert a tab. It /does not/ prevent anyone from defining Ctrl-tab or Shift-tab to indent our outdent if they want that. But _one should be able to easily type a tab in the middle of a line with a text editor_, period. _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151118/5d349108/attachment.htm From tim at rowledge.org Thu Nov 19 01:55:45 2015 From: tim at rowledge.org (tim Rowledge) Date: Thu Nov 19 01:55:50 2015 Subject: [squeak-dev] Balloon3D - dead or alive? In-Reply-To: <564CE4F2.9050301@zogotounga.net> References: <95562052-66D0-405A-8113-3568413CB2D6@freudenbergs.de> <6318104E-0362-45D1-A5A2-ADCA511CCAC6@rowledge.org> <564B5106.2040603@zogotounga.net> <03B2D037-5674-4306-B90A-31E07E299B45@rowledge.org> <564CE4F2.9050301@zogotounga.net> Message-ID: <958AC5BC-2170-4EE1-8F30-5828C8F6B099@rowledge.org> > On 18-11-2015, at 12:52 PM, St?phane Rollandin wrote: > >>>> Ah, sad. If anyone is interested, it can actually be loaded with some hassle and that rotating cube does work, so maybe it could be rescued? Is is worth it? >>> >>> I would vote for a rescue? >> >> Well, is it the best answer? > > Sorry, I thought you asked. I did indeed. The question is really which - if any - of the possible frameworks should we try to rescue, adopt, improve, release, whatever? There?s only so much time that people can spend and for most of this sort of thing probably only a few people that have a clue what to do (oh-oh, I?m flashing back to the 70s, does anyone know the way?) The answer is most likely that the ?winner? is whatever someone can get enthused about enough to get working. Good news - I managed to build the Squeak3D plugin for the Pi, it runs, it appears to execute decently! The very basic demo of the rotating cube rotates nicley, the ?turn on hardware acceleration? button causes it to run more smoothly, a FrameRateMorph shows that even on a mere Pi it is not overtaxing the system, and all the other simple demos work. The only one I spotted that slows us below 48fps was commented as taxing because it is plotting a complex 3D surface from an equation with complex colouring. I did try the Wonderland stuff and although I was able to get a basic Wonderland Morph open (and very small since screens are *so* much bigger now) but crashed the VM when trying ? something I can?t remember. Basically it was chomping memory and a Pi only has so much to give. There were complaints logged in ?Squeak3D.log? about "OpenGL initialization failed - No OpenGL visual found? which may I guess mean that in fact all or some of the plugin wasn?t really working - it?s some error in sqUnixOpenGL.X11 for the curious. Ah, try again; I can use the command menus to make the camera nad ground turn around but getting the halo for the ground goes into some recursive navel-gazing and crashes. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: SNARF: System Normalize And Reset Flags From jon at huv.com Thu Nov 19 02:12:51 2015 From: jon at huv.com (Jon Hylands) Date: Thu Nov 19 02:12:54 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak Message-ID: Hi, I've been playing around with Squeak 5.0 on a pi 2 (with the 7" LCD touchscreen), and one of the things I'd like to be able to do is run (and control) omxplayer from within Squeak. I did the same thing with Python, using this library: https://github.com/willprice/python-omxplayer-wrapper/tree/develop/omxplayer However, I don't really need all the fancy controls - what I really want is a way to launch it, and then a way to kill it. I'll be streaming live MJPEG video from a webcam, so there is no concept of pause/stop/etc. I need to kill it because I want the ability to choose one of a couple different video streams. I tried using OSProcess, but it gives me the pid of the shell script that launches the application, and not the application itself. I could certainly hack something using ps and grep, but I would prefer if there were a better way to do it. Any ideas? Thanks, Jon -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151118/81e87bb4/attachment.htm From ma.chris.m at gmail.com Thu Nov 19 02:25:32 2015 From: ma.chris.m at gmail.com (Chris Muller) Date: Thu Nov 19 02:26:13 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: Eliot, no worries, from my initial reply in this thread, I've agreed with you that typing a Tab should insert a Tab character. That's why I wanted to move the indent function "out of the way", by requiring a modifier key. The problem with that is platform support. "Sensor kbdTest" reveals no sensitivity to Shift+Tab in Linux nor to Control+Tab in Windows. At the moment, yours is the only solution we have. I agree about typing tab characters, I even want to type a tab character at the time which has now been filtered out. Indentation is popping up and surprising me, its still too intrusive. I want to find the best solution which balances our expectations of when a tab character should be typed with keeping the Indentation function as accessible as it can be. IMHO, we have not yet found that best optimal balance yet. > Look, my change makes typing a tab in the middle of a line do what one would > expect, insert a tab. It /does not/ prevent anyone from defining Ctrl-tab > or Shift-tab to indent our outdent if they want that. But _one should be > able to easily type a tab in the middle of a line with a text editor_, > period. From eliot.miranda at gmail.com Thu Nov 19 02:36:10 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Nov 19 02:36:13 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: References: Message-ID: Hi Jon, The primitive primForkExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: directly calls execute, so if you invoke it with the name of the program it will fork and exec that program and answer its pid. Not sure where the substitution of the shell is. Is omxplayer perhaps a shell script that wraps the actual program? I suggest you step though execution from your launch command all the way to the send of primForkExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: and see what its being invoked with, and you check what the omxplayer file is in the rip filesystem. (I could be completely confused but see UnixOSProcessPlugin>>#forkAndExecInDirectory: in the VMConstruction-Plugins-OSProcessPlugin package at http://www.squeaksource.com/OSProcessPlugin and I think you'll agree with me that the primitive does not interpose a shell). HTH On Wed, Nov 18, 2015 at 6:12 PM, Jon Hylands wrote: > > Hi, > > I've been playing around with Squeak 5.0 on a pi 2 (with the 7" LCD > touchscreen), and one of the things I'd like to be able to do is run (and > control) omxplayer from within Squeak. > > I did the same thing with Python, using this library: > https://github.com/willprice/python-omxplayer-wrapper/tree/develop/omxplayer > > However, I don't really need all the fancy controls - what I really want > is a way to launch it, and then a way to kill it. I'll be streaming live > MJPEG video from a webcam, so there is no concept of pause/stop/etc. I need > to kill it because I want the ability to choose one of a couple different > video streams. > > I tried using OSProcess, but it gives me the pid of the shell script that > launches the application, and not the application itself. I could certainly > hack something using ps and grep, but I would prefer if there were a better > way to do it. > > Any ideas? > > Thanks, > Jon > > > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151118/b914279a/attachment-0001.htm From lewis at mail.msen.com Thu Nov 19 03:56:01 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Nov 19 03:56:04 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: References: Message-ID: <20151119035601.GA32983@shell.msen.com> On Wed, Nov 18, 2015 at 09:12:51PM -0500, Jon Hylands wrote: > Hi, > > I've been playing around with Squeak 5.0 on a pi 2 (with the 7" LCD > touchscreen), and one of the things I'd like to be able to do is run (and > control) omxplayer from within Squeak. > > I did the same thing with Python, using this library: > https://github.com/willprice/python-omxplayer-wrapper/tree/develop/omxplayer > > However, I don't really need all the fancy controls - what I really want is > a way to launch it, and then a way to kill it. I'll be streaming live MJPEG > video from a webcam, so there is no concept of pause/stop/etc. I need to > kill it because I want the ability to choose one of a couple different > video streams. > > I tried using OSProcess, but it gives me the pid of the shell script that > launches the application, and not the application itself. I could certainly > hack something using ps and grep, but I would prefer if there were a better > way to do it. > > Any ideas? Hi Jon, If you are trying to interact with an external process, you probably want CommandShell, which is a companion package meant to be used with OSProcess. The base OSProcess package has various utility methods (quite ill-advised with the benefit of hindsight) that run external programs under a unix shell. I originally intended that as a convenience, but it turns out to be more confusing than it is helpful. What you probably really want to do is run a program and interact with it directly by talking to its standard input stream and listening to its standard output and standard error streams. In most cases, the class PipeableOSProcess will do what you want. At a slightly higher level, if you need the very loose equivalent of unix shell parsing, ProxyPipeline may be a better fit. Slightly higher level, the class CommandShell provides all of the above with the option of opening a view on the command processing (much like a unix terminal window). So, if you want to interact directly with an external program, do not use OSProcess by itself. Load CommandShell and use one of the higher level classes that does not try to "help" you by running your program under /bin/sh. Dave From lewis at mail.msen.com Thu Nov 19 04:08:54 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Nov 19 04:08:55 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: References: Message-ID: <20151119040854.GA38906@shell.msen.com> On Wed, Nov 18, 2015 at 06:36:10PM -0800, Eliot Miranda wrote: > Hi Jon, > > The > primitive primForkExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: > directly calls execute, so if you invoke it with the name of the program it > will fork and exec that program and answer its pid. Not sure where the > substitution of the shell is. Is omxplayer perhaps a shell script that > wraps the actual program? > > I suggest you step though execution from your launch command all the way to > the send of > primForkExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: > and see what its being invoked with, and you check what the omxplayer file > is in the rip filesystem. > > (I could be completely confused but > see UnixOSProcessPlugin>>#forkAndExecInDirectory: in the > VMConstruction-Plugins-OSProcessPlugin package at > http://www.squeaksource.com/OSProcessPlugin and I think you'll agree with > me that the primitive does not interpose a shell). Exactly right. The interposed shell is something that I added as a convenience for some OSProcess class side methods. With the benefit of hindsight, I never should have done that. I makes it look as though you are running the program that you intended to run, but the actual process proxy available in the image is just a proxy on /bin/sh, which is totally useless. The more useful classes that let the image interact directly with an external process are in package CommandShell. CommandShell was originally part of package OSProcess, and I split it out because I thought at the time that modularity was a good thing. I still think that modularity is a good thing, but ... well, it does have its down side ;-) Dave From Marcel.Taeumel at hpi.de Thu Nov 19 07:39:27 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 07:54:21 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: <1447918767396-4861873.post@n4.nabble.com> ... I would rather use Control+Tab for a system windows cycling mechanism ... ;-) Best, Marcel -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861873.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Nov 19 07:42:50 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 07:57:45 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> Message-ID: <1447918970442-4861874.post@n4.nabble.com> I like using TAB or SHIFT+TAB for indent resp. outdent. However, we have to get the selection right. We have to watch for the current context (surrounding whitespaces, beginning of the line etc.). If we cannot solve it, we should go back to CMD+SHIFT+L/R. Best, Marcel P.S.: Really, ALT+TAB or CMD+TAB or CTRL+TAB is meant to be used for application/window cycling ... don't override this... :) -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861874.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Nov 19 08:16:39 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 19 08:16:41 2015 Subject: [squeak-dev] The Trunk: Tools-mt.654.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.654.mcz ==================== Summary ==================== Name: Tools-mt.654 Author: mt Time: 19 November 2015, 9:16:19.078 am UUID: b66c5e91-22a0-45ad-83ef-46c23d1719bf Ancestors: Tools-ul.653 Makes hierarchy in class list more visible by using two instead of one space for each level. =============== Diff against Tools-ul.653 =============== Item was changed: ----- Method: Browser>>flattenHierarchyTree:on:indent: (in category 'class list') ----- flattenHierarchyTree: classHierarchy on: col indent: indent ^ self flattenHierarchyTree: classHierarchy on: col indent: indent + by: ' '.! - by: Character space.! From Marcel.Taeumel at hpi.de Thu Nov 19 08:25:56 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 08:40:51 2015 Subject: [squeak-dev] Re: The Trunk: Tools-mt.654.mcz In-Reply-To: References: Message-ID: <1447921556926-4861877.post@n4.nabble.com> -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-654-mcz-tp4861876p4861877.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Nov 19 09:25:40 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 19 09:25:42 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1047.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1047.mcz ==================== Summary ==================== Name: Morphic-mt.1047 Author: mt Time: 19 November 2015, 10:25:04.425 am UUID: f799616d-945d-4e5e-975d-9b03a1b2c9ba Ancestors: Morphic-mt.1046 Makes intent/outdent via TAB resp. SHIFT+TAB more robust and fixes some bugs like replacing whitespace-only selections with tabs or indenting a block where the selection starts before the first character in a line. =============== Diff against Morphic-mt.1046 =============== 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." (Character separators includes: typedChar) ifTrue: [self closeTypeIn]. "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 + and: [self hasSelection]) + and: [self isInWhitespaceAtStartOfLine]) ifTrue: [ + aKeyboardEvent shiftPressed + ifTrue: [self outdent: aKeyboardEvent] + ifFalse: [self indent: aKeyboardEvent]. + ^ true]. - (typedChar == Character tab and: [self isInWhitespaceAtStartOfLine]) ifTrue: [ - aKeyboardEvent shiftPressed - ifTrue: [self outdent: aKeyboardEvent] - ifFalse: [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 ifTrue: [((self hasSelection and: [self enclose: aKeyboardEvent]) or: [self autoEncloseFor: typedChar]) ifTrue: [^ true]]. self normalCharacter: aKeyboardEvent. ^ false! Item was changed: ----- Method: TextEditor>>isInWhitespaceAtStartOfLine (in category 'typing support') ----- isInWhitespaceAtStartOfLine + + ^ (self selectionStringFromBeginningOfLine allSatisfy: [:c| c isSeparator]) + and: [self selection anySatisfy: [:c | c isSeparator not] "Ignore whitespace-only selections."]! - ^self selectionStringFromBeginningOfLine allSatisfy: [:c| c isSeparator]! Item was changed: ----- Method: TextEditor>>selectionStringFromBeginningOfLine (in category 'accessing-selection') ----- selectionStringFromBeginningOfLine + + ^ self paragraph string + copyFrom: (self beginningOfLine: self startIndex) to: self startIndex - 1! - ^paragraph string copyFrom: (self beginningOfLine: self startBlock stringIndex) to: (self startBlock stringIndex min: paragraph string size)! From Marcel.Taeumel at hpi.de Thu Nov 19 09:26:01 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 09:40:56 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1047.mcz In-Reply-To: References: Message-ID: <1447925161274-4861886.post@n4.nabble.com> LEER means SPACE key. TABULATOR means TAB key. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1047-mcz-tp4861883p4861886.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Nov 19 10:53:47 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 19 10:53:48 2015 Subject: [squeak-dev] The Inbox: Tools-mt.655.mcz Message-ID: A new version of Tools was added to project The Inbox: http://source.squeak.org/inbox/Tools-mt.655.mcz ==================== Summary ==================== Name: Tools-mt.655 Author: mt Time: 19 November 2015, 11:53:37.869 am UUID: 11fda559-e378-4046-a5f1-a2b1396c81ce Ancestors: Tools-mt.654 Adds a convenient way for "printf-debugging". You can send #observe to any object in any situation. Transcript will show the printString, the location of the call, and the current time stamp. =============== Diff against Tools-mt.654 =============== Item was added: + ----- Method: Object>>observe (in category '*Tools-Debugger') ----- + observe + + Transcript dependents + detect: [:e | e isTextView] + "ifFound: [:e | e activate]" + ifNone: [Transcript open]. + + Transcript showln: ('[{1}] [{2} {3}] {4}' format: { + Time now print24. + thisContext sender method methodClass. + thisContext sender method selector. + self printString}).! From Marcel.Taeumel at hpi.de Thu Nov 19 10:41:40 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 10:56:36 2015 Subject: [squeak-dev] Re: The Inbox: Tools-mt.655.mcz In-Reply-To: References: Message-ID: <1447929700565-4861901.post@n4.nabble.com> What do you think? The idea came from a colleague and remembering Chris' usage of #inspect and his complaint about Object >> #inspect not return the object anymore but the inspector's tool window, this might be a nice addition. myObject observe isDoing observe someCrazy observe stuff observe. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Tools-mt-655-mcz-tp4861900p4861901.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From robert.hirschfeld at gmx.net Thu Nov 19 11:04:41 2015 From: robert.hirschfeld at gmx.net (Robert Hirschfeld) Date: Thu Nov 19 11:04:46 2015 Subject: [squeak-dev] Undo and 5.0 In-Reply-To: <1447655959563-4861168.post@n4.nabble.com> References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> <1447655959563-4861168.post@n4.nabble.com> Message-ID: +1 Thanks, Robert On 16 Nov 2015, at 07:39 , marcel.taeumel wrote: > +1 > > (I would do it.) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Undo-and-5-0-tp4861132p4861168.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From leves at elte.hu Thu Nov 19 11:31:35 2015 From: leves at elte.hu (Levente Uzonyi) Date: Thu Nov 19 11:31:41 2015 Subject: [squeak-dev] Undo and 5.0 In-Reply-To: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> Message-ID: The problem with all backports is that they make it hard or impossible to update your image from the Trunk, so you may get stuck with a given version should you update your image from its dedicated repository. Levente On Sun, 15 Nov 2015, Tobias Pape wrote: > Hi all, > > now that we have a non-broken (ie, working) text-undo in > trunk, we surely should backport it to 4.6/5.0. It is broken > there[1] and we should fix that bug. > Are there any reasons not to? > > Best regards > -Tobias > > > > > > > [1]: (and already annoying newcomers in our courses) > > From Marcel.Taeumel at hpi.de Thu Nov 19 11:36:44 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 11:51:38 2015 Subject: [squeak-dev] Re: Undo and 5.0 In-Reply-To: References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> Message-ID: <1447933004261-4861909.post@n4.nabble.com> I didn't get that. Why do you want to update your image "from trunk"? Best, Marcel -- View this message in context: http://forum.world.st/Undo-and-5-0-tp4861132p4861909.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Nov 19 12:50:24 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 13:05:19 2015 Subject: [squeak-dev] Re: Undo and 5.0 In-Reply-To: <1447933004261-4861909.post@n4.nabble.com> References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> <1447933004261-4861909.post@n4.nabble.com> Message-ID: <1447937424459-4861930.post@n4.nabble.com> Ah, you could want to update your 5.0 image from trunk repository to trunk state? Yeah, this may get challenging... Best, Marcel -- View this message in context: http://forum.world.st/Undo-and-5-0-tp4861132p4861930.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From hannes.hirzel at gmail.com Thu Nov 19 13:44:39 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Thu Nov 19 13:44:41 2015 Subject: [squeak-dev] Re: Undo and 5.0 In-Reply-To: <1447937424459-4861930.post@n4.nabble.com> References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> <1447933004261-4861909.post@n4.nabble.com> <1447937424459-4861930.post@n4.nabble.com> Message-ID: Maybe a 5.1 release is an easier solution .... --Hannes On 11/19/15, marcel.taeumel wrote: > Ah, you could want to update your 5.0 image from trunk repository to trunk > state? Yeah, this may get challenging... > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Undo-and-5-0-tp4861132p4861930.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From Das.Linux at gmx.de Thu Nov 19 13:50:45 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Nov 19 13:50:50 2015 Subject: [squeak-dev] Re: Undo and 5.0 In-Reply-To: References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> <1447933004261-4861909.post@n4.nabble.com> <1447937424459-4861930.post@n4.nabble.com> Message-ID: <95AC80C8-CB9B-4E20-A87E-C7F0F97A7852@gmx.de> On 19.11.2015, at 14:44, H. Hirzel wrote: > Maybe a 5.1 release is an easier solution .... I'd say 5.0.1 would be better. The current trunk should actually be 5.1 when released? > > --Hannes > > On 11/19/15, marcel.taeumel wrote: >> Ah, you could want to update your 5.0 image from trunk repository to trunk >> state? Yeah, this may get challenging... >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/Undo-and-5-0-tp4861132p4861930.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > From bert at freudenbergs.de Thu Nov 19 14:26:20 2015 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Nov 19 14:26:23 2015 Subject: [squeak-dev] Backporting (was: Undo and 5.0) In-Reply-To: References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> Message-ID: On 19.11.2015, at 12:31, Levente Uzonyi wrote: > > The problem with all backports is that they make it hard or impossible to update your image from the Trunk, so you may get stuck with a given version should you update your image from its dedicated repository. > > Levente I thought Monticello cherry-picking should allow that ... - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4115 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/90483eaf/smime.bin From karlramberg at gmail.com Thu Nov 19 14:40:37 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 19 14:40:40 2015 Subject: [squeak-dev] Bitmap DejaVu sans punktuation mark sizes In-Reply-To: References: <2652CAC8-D94A-4961-92BE-56AB57AE7DC8@freudenbergs.de> <75AF931F-116B-44E1-B01C-2D41A0C17B48@freudenbergs.de> Message-ID: Juan has made a change for bigger punctuation in Cuis. I does not translate easily to Squeak since Cuis does not use StrikeFontSet. In Cuis, 'StrikeFont useRegularPunctuation' and 'StrikeFont useLargerPunctuation'. The stuff is at #buildLargerPunctuation. It is copying the punctuation marks from a larger font size Best, Karl On Mon, Jun 8, 2015 at 5:55 PM, karl ramberg wrote: > Neither the eyes or the memory are like they were before ;-) > > Thanks anyway, > Karl > > On Mon, Jun 8, 2015 at 5:32 PM, Bert Freudenberg > wrote: > >> On 03.06.2015, at 23:40, Bert Freudenberg wrote: >> >> >> >> On 03.06.2015, at 19:57, karl ramberg wrote: >> >> I really like the Bitmap DejaVu sans font. I have basically all text >> displayed in size 9. That size i very readable and give I get enough text >> on screen to get a good workflow. >> >> But I constantly miss punctuation because a full stop is like one pixel. >> And colon and semicolon are also very small. >> To add to that there is very tight kerning around the punctuation marks. >> >> It's easy to miss and it causes mild grief on my part. >> >> With the high resolution of today's monitors I think a bigger size of >> these punctuation marks would be good. >> >> Any thoughts ? >> >> Karl >> >> >> +1 >> >> I remember fixing this in one of my images. Can?t remember which one, >> unfortunately :( >> >> >> Ah, guess I misremembered even more. I fixed the punctuation in the large >> Palatino font in our Smalltalk-78 image ? but for the same reasons. >> >> - Bert - >> >> >> >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/d9d91ecd/attachment.htm From leves at elte.hu Thu Nov 19 14:49:59 2015 From: leves at elte.hu (Levente Uzonyi) Date: Thu Nov 19 14:50:04 2015 Subject: [squeak-dev] Re: Undo and 5.0 In-Reply-To: <1447933004261-4861909.post@n4.nabble.com> References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> <1447933004261-4861909.post@n4.nabble.com> Message-ID: Because that's how the update process was designed[1] - while it's not stated explicitly, the rules imply a continuous delivery-style development model - and it's good to have new features and bugfixes in existing images. We used to do this even in our production images (starting from 3.11) up until 4.2 or so, when something broke horribly in the update process. Normally you should be (or should have been) able to update a 3.11 closure? image to 4.6. Since the update process doesn't have the Spur bootstrap, the process broke at that point, but one should be able to update an 5.0 image to the current 5.1 (alpha). Let me reverse your question: why would you want to backport anything when you can just get all the updates from the Trunk? Levente [1] https://squeakboard.wordpress.com/2009/07/02/a-new-community-development-model/ On Thu, 19 Nov 2015, marcel.taeumel wrote: > I didn't get that. Why do you want to update your image "from trunk"? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Undo-and-5-0-tp4861132p4861909.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From bert at freudenbergs.de Thu Nov 19 15:04:17 2015 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Nov 19 15:04:22 2015 Subject: [squeak-dev] Re: Undo and 5.0 In-Reply-To: References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> <1447933004261-4861909.post@n4.nabble.com> Message-ID: <6C76B308-ED93-4308-B1B0-3312BE4368AD@freudenbergs.de> > On 19.11.2015, at 15:49, Levente Uzonyi wrote: > > Let me reverse your question: why would you want to backport anything when you can just get all the updates from the Trunk? Because trunk contains new features, but we would backport only bug fixes. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4115 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/217f310b/smime.bin From asqueaker at gmail.com Thu Nov 19 16:13:38 2015 From: asqueaker at gmail.com (Chris Muller) Date: Thu Nov 19 16:13:40 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1447918970442-4861874.post@n4.nabble.com> References: <1447882211625-4861820.post@n4.nabble.com> <1447918970442-4861874.post@n4.nabble.com> Message-ID: On Thu, Nov 19, 2015 at 1:42 AM, marcel.taeumel wrote: > I like using TAB or SHIFT+TAB for indent resp. outdent. However, we have to > get the selection right. We have to watch for the current context > (surrounding whitespaces, beginning of the line etc.). After sleeping on it, I think Levente has the best idea -- that's really what its about, indenting _multiple_ lines, otherwise, for single line I can always just use Tab character. Eliot said he was editing case statements, so that would work for that too. > If we cannot solve it, we should go back to CMD+SHIFT+L/R. I hope we won't need to, but if we did I would prefer to pick different keys because L and R are very useful for global keys (especially R). > P.S.: Really, ALT+TAB or CMD+TAB or CTRL+TAB is meant to be used for > application/window cycling ... don't override this... :) OS's hook Alt+Tab, not Control+Tab, right? Apps like Google Chrome hooks Control+Tab. Squeak is just another app that should be able to hook Control+Tab too.. From Marcel.Taeumel at hpi.de Thu Nov 19 16:05:04 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 16:20:01 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> <1447918970442-4861874.post@n4.nabble.com> Message-ID: <1447949104456-4861996.post@n4.nabble.com> >> P.S.: Really, ALT+TAB or CMD+TAB or CTRL+TAB is meant to be used for >> application/window cycling ... don't override this... :) > OS's hook Alt+Tab, not Control+Tab, right? Apps like Google Chrome > hooks Control+Tab. Squeak is just another app that should be able to > hook Control+Tab too.. Absolutely! But not for text editing, but system window cycling. :) Best, Marcel -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861996.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Nov 19 16:06:11 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 16:21:08 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1447949104456-4861996.post@n4.nabble.com> References: <1447882211625-4861820.post@n4.nabble.com> <1447918970442-4861874.post@n4.nabble.com> <1447949104456-4861996.post@n4.nabble.com> Message-ID: <1447949171326-4861997.post@n4.nabble.com> Btw, I improved Eliot's approach a little bit more: http://forum.world.st/The-Trunk-Morphic-mt-1047-mcz-td4861883.html Still, we seem to be unsure whether we want to keept behavior...? Best, Marcel -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861997.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Nov 19 16:08:26 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 19 16:23:23 2015 Subject: [squeak-dev] Re: Undo and 5.0 In-Reply-To: References: <6602E2CA-3128-4925-940E-F328D2984CD8@gmx.de> <1447933004261-4861909.post@n4.nabble.com> Message-ID: <1447949306542-4862000.post@n4.nabble.com> > Let me reverse your question: why would you want to backport anything when > you can just get all the updates from the Trunk? Because normal users (students) are not able to do that. :) Best, Marcel -- View this message in context: http://forum.world.st/Undo-and-5-0-tp4861132p4862000.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From jon at huv.com Thu Nov 19 16:25:33 2015 From: jon at huv.com (Jon Hylands) Date: Thu Nov 19 16:25:37 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: <20151119035601.GA32983@shell.msen.com> References: <20151119035601.GA32983@shell.msen.com> Message-ID: David, So I've installed CommandShell, and at first it appeared to work. I could evaluate this: CommandShell new processCommand: 'galculator' and it would open the calculator, and the PID held inside the foreground proxies corresponded directly to the running app's pid. However, when I run omxplayer, using this command line: CommandShell new processCommand: 'omxplayer -r --live --win ''54 58 400 447'' http://localhost:10088/?action=stream' I end up with our old friend, the shell pid and another process for omxplayer I traced it in the debugger, all the way down to where the UnixOSProcessAccessor is sending #primForkExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: The first argument to that message is '/usr/bin/omxplayer' Yet I end up with this: pi@raspberrypi ~ $ ps -ef | grep omx pi 3182 3058 0 16:19 ? 00:00:00 /bin/bash /usr/bin/omxplayer -r --live --win 54 58 400 447 http://localhost:10088/?action=stream pi 3190 3182 9 16:19 ? 00:00:19 /usr/bin/omxplayer.bin -r --live --win 54 58 400 447 http://localhost:10088/?action=stream Why is this happening, and how can I fix it? Thanks, Jon On Wed, Nov 18, 2015 at 10:56 PM, David T. Lewis wrote: > On Wed, Nov 18, 2015 at 09:12:51PM -0500, Jon Hylands wrote: > > Hi, > > > > I've been playing around with Squeak 5.0 on a pi 2 (with the 7" LCD > > touchscreen), and one of the things I'd like to be able to do is run (and > > control) omxplayer from within Squeak. > > > > I did the same thing with Python, using this library: > > > https://github.com/willprice/python-omxplayer-wrapper/tree/develop/omxplayer > > > > However, I don't really need all the fancy controls - what I really want > is > > a way to launch it, and then a way to kill it. I'll be streaming live > MJPEG > > video from a webcam, so there is no concept of pause/stop/etc. I need to > > kill it because I want the ability to choose one of a couple different > > video streams. > > > > I tried using OSProcess, but it gives me the pid of the shell script that > > launches the application, and not the application itself. I could > certainly > > hack something using ps and grep, but I would prefer if there were a > better > > way to do it. > > > > Any ideas? > > Hi Jon, > > If you are trying to interact with an external process, you probably want > CommandShell, which is a companion package meant to be used with OSProcess. > The base OSProcess package has various utility methods (quite ill-advised > with the benefit of hindsight) that run external programs under a unix > shell. I originally intended that as a convenience, but it turns out to > be more confusing than it is helpful. > > What you probably really want to do is run a program and interact with > it directly by talking to its standard input stream and listening to its > standard output and standard error streams. In most cases, the class > PipeableOSProcess will do what you want. At a slightly higher level, if > you need the very loose equivalent of unix shell parsing, ProxyPipeline > may be a better fit. Slightly higher level, the class CommandShell > provides all of the above with the option of opening a view on the command > processing (much like a unix terminal window). > > So, if you want to interact directly with an external program, do not > use OSProcess by itself. Load CommandShell and use one of the higher > level classes that does not try to "help" you by running your program > under /bin/sh. > > Dave > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/75f63b91/attachment-0001.htm From peter at ozzard.org Thu Nov 19 16:39:46 2015 From: peter at ozzard.org (Peter Crowther) Date: Thu Nov 19 16:39:48 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: References: <20151119035601.GA32983@shell.msen.com> Message-ID: On 19 November 2015 at 16:25, Jon Hylands wrote: > pi@raspberrypi ~ $ ps -ef | grep omx > pi 3182 3058 0 16:19 ? 00:00:00 /bin/bash > /usr/bin/omxplayer -r --live --win 54 58 400 447 > http://localhost:10088/?action=stream > pi 3190 3182 9 16:19 ? 00:00:19 /usr/bin/omxplayer.bin -r > --live --win 54 58 400 447 http://localhost:10088/?action=stream > > Why is this happening, and how can I fix it? > > > Bet you /usr/bin/omxplayer is a shell script - take a look. If it is (i.e. its first line starts with #!/bin/bash) then this is what you'll get; you might wish to invoke omxplayer.bin directly. - Peter -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/78fe1067/attachment.htm From lewis at mail.msen.com Thu Nov 19 17:26:44 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Nov 19 17:26:46 2015 Subject: [squeak-dev] Welcome new core developer Patrick Rein Message-ID: <43117.136.2.1.104.1447954004.squirrel@webmail.msen.com> On recommendation from Marcel Taeumel and with the unanimous approval of the Squeak Oversight Board at yesterday?s board meeting, Patrick Rein (author initials pre) has been added to the core-dev group. Patrick has indicated his interest in contributing to trunk based on three years working with large numbers of HPI students with many bug fixes and suggestions. An example is his recent updates explained at http://lists.squeakfoundation.org/pipermail/squeak-dev/2015-November/186674.html. As always, the Squeak development process is described in https://squeakboard.wordpress.com/2009/07/02/a-new-community-development-model/ Welcome and thank you to Patrick! From jon at huv.com Thu Nov 19 17:38:39 2015 From: jon at huv.com (Jon Hylands) Date: Thu Nov 19 17:38:42 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: References: <20151119035601.GA32983@shell.msen.com> Message-ID: Indeed you are correct. I'll have to look into it, because it is a fairly complex bash script (107 lines). Thanks, Jon On Thu, Nov 19, 2015 at 11:39 AM, Peter Crowther wrote: > On 19 November 2015 at 16:25, Jon Hylands wrote: > >> pi@raspberrypi ~ $ ps -ef | grep omx >> pi 3182 3058 0 16:19 ? 00:00:00 /bin/bash >> /usr/bin/omxplayer -r --live --win 54 58 400 447 >> http://localhost:10088/?action=stream >> pi 3190 3182 9 16:19 ? 00:00:19 /usr/bin/omxplayer.bin -r >> --live --win 54 58 400 447 http://localhost:10088/?action=stream >> >> Why is this happening, and how can I fix it? >> >> >> Bet you /usr/bin/omxplayer is a shell script - take a look. If it is > (i.e. its first line starts with #!/bin/bash) then this is what you'll get; > you might wish to invoke omxplayer.bin directly. > > - Peter > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/31bd56f8/attachment.htm From lewis at mail.msen.com Thu Nov 19 18:13:57 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Nov 19 18:14:00 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: References: <20151119035601.GA32983@shell.msen.com> Message-ID: <63014.136.2.1.104.1447956837.squirrel@webmail.msen.com> It may turn out that interacting directly with that shell script is good enough anyway, so I'd try that first. Depending on what the script is doing, it may already be setting things up for you in a workable manner. It's worth a try. Dave > Indeed you are correct. > > I'll have to look into it, because it is a fairly complex bash script (107 > lines). > > Thanks, > Jon > > > On Thu, Nov 19, 2015 at 11:39 AM, Peter Crowther wrote: > >> On 19 November 2015 at 16:25, Jon Hylands wrote: >> >>> pi@raspberrypi ~ $ ps -ef | grep omx >>> pi 3182 3058 0 16:19 ? 00:00:00 /bin/bash >>> /usr/bin/omxplayer -r --live --win 54 58 400 447 >>> http://localhost:10088/?action=stream >>> pi 3190 3182 9 16:19 ? 00:00:19 /usr/bin/omxplayer.bin >>> -r >>> --live --win 54 58 400 447 http://localhost:10088/?action=stream >>> >>> Why is this happening, and how can I fix it? >>> >>> >>> Bet you /usr/bin/omxplayer is a shell script - take a look. If it is >> (i.e. its first line starts with #!/bin/bash) then this is what you'll >> get; >> you might wish to invoke omxplayer.bin directly. >> >> - Peter >> >> >> >> > > From karlramberg at gmail.com Thu Nov 19 18:14:04 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 19 18:14:08 2015 Subject: [squeak-dev] Welcome new core developer Patrick Rein In-Reply-To: <43117.136.2.1.104.1447954004.squirrel@webmail.msen.com> References: <43117.136.2.1.104.1447954004.squirrel@webmail.msen.com> Message-ID: Welcome Best, Karl On Thu, Nov 19, 2015 at 6:26 PM, David T. Lewis wrote: > On recommendation from Marcel Taeumel and with the unanimous approval of > the Squeak Oversight Board at yesterday?s board meeting, Patrick Rein > (author initials pre) has been added to the core-dev group. Patrick has > indicated his interest in contributing to trunk based on three years > working with large numbers of HPI students with many bug fixes and > suggestions. An example is his recent updates explained at > > http://lists.squeakfoundation.org/pipermail/squeak-dev/2015-November/186674.html > . > > As always, the Squeak development process is described in > > https://squeakboard.wordpress.com/2009/07/02/a-new-community-development-model/ > > Welcome and thank you to Patrick! > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/72a1f9d3/attachment.htm From tim at rowledge.org Thu Nov 19 19:32:34 2015 From: tim at rowledge.org (tim Rowledge) Date: Thu Nov 19 19:32:40 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: References: <20151119035601.GA32983@shell.msen.com> Message-ID: <3BB08D39-D9EE-4CAF-96ED-AF5383F9B87B@rowledge.org> Hey Jon, so trying to build a modern equivalent of the MediaPad eh? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: GLV: Ground the Line Voltage From commits at source.squeak.org Thu Nov 19 19:55:39 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 19 19:55:41 2015 Subject: [squeak-dev] The Trunk: MorphicExtras-kfr.167.mcz Message-ID: Karl Ramberg uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-kfr.167.mcz ==================== Summary ==================== Name: MorphicExtras-kfr.167 Author: kfr Time: 19 November 2015, 8:55:15.765 pm UUID: d101e159-825d-4c86-a582-8bd22029b3bf Ancestors: MorphicExtras-mt.166 ProgressMorph and ProgressBarMorph are not used as widgets. Moved to MorphicExtras-Obsolete =============== Diff against MorphicExtras-mt.166 =============== Item was added: + BorderedMorph subclass: #ProgressBarMorph + instanceVariableNames: 'value progressColor lastValue' + classVariableNames: '' + poolDictionaries: '' + category: 'MorphicExtras-Obsolete'! Item was added: + ----- Method: ProgressBarMorph>>addCustomMenuItems:hand: (in category 'menu') ----- + addCustomMenuItems: aCustomMenu hand: aHandMorph + super addCustomMenuItems: aCustomMenu hand: aHandMorph. + aCustomMenu addList: { + {'progress color...' translated. #changeProgressColor:}. + {'progress value...' translated. #changeProgressValue:}. + }! Item was added: + ----- Method: ProgressBarMorph>>changeProgressColor: (in category 'menu') ----- + changeProgressColor: evt + | aHand | + aHand := evt ifNotNil: [evt hand] ifNil: [self primaryHand]. + self changeColorTarget: self selector: #progressColor: originalColor: self progressColor hand: aHand.! Item was added: + ----- Method: ProgressBarMorph>>changeProgressValue: (in category 'menu') ----- + changeProgressValue: evt + | answer | + answer := UIManager default + request: 'Enter new value (0 - 1.0)' + initialAnswer: self value contents asString. + answer isEmptyOrNil ifTrue: [^ self]. + self value contents: answer asNumber! Item was added: + ----- Method: ProgressBarMorph>>drawOn: (in category 'drawing') ----- + drawOn: aCanvas + | width inner | + super drawOn: aCanvas. + inner := self innerBounds. + width := (inner width * lastValue) truncated min: inner width. + aCanvas fillRectangle: (inner origin extent: width @ inner height) color: progressColor.! Item was added: + ----- Method: ProgressBarMorph>>initialize (in category 'initialization') ----- + initialize + super initialize. + progressColor := Color green. + self value: (ValueHolder new contents: 0.0). + lastValue := 0.0! Item was added: + ----- Method: ProgressBarMorph>>progressColor (in category 'accessing') ----- + progressColor + ^progressColor! Item was added: + ----- Method: ProgressBarMorph>>progressColor: (in category 'accessing') ----- + progressColor: aColor + progressColor = aColor + ifFalse: + [progressColor := aColor. + self changed]! Item was added: + ----- Method: ProgressBarMorph>>update: (in category 'updating') ----- + update: aSymbol + aSymbol == #contents + ifTrue: + [lastValue := value contents. + self changed]! Item was added: + ----- Method: ProgressBarMorph>>value (in category 'accessing') ----- + value + ^value! Item was added: + ----- Method: ProgressBarMorph>>value: (in category 'accessing') ----- + value: aModel + value ifNotNil: [value removeDependent: self]. + value := aModel. + value ifNotNil: [value addDependent: self]! Item was added: + RectangleMorph subclass: #ProgressMorph + instanceVariableNames: 'labelMorph subLabelMorph progress' + classVariableNames: '' + poolDictionaries: '' + category: 'MorphicExtras-Obsolete'! Item was added: + ----- Method: ProgressMorph class>>example (in category 'example') ----- + example + "ProgressMorph example" + + | progress | + progress := ProgressMorph label: 'Test progress'. + progress subLabel: 'this is the subheading'. + progress openInWorld. + [10 timesRepeat: + [(Delay forMilliseconds: 200) wait. + progress incrDone: 0.1]. + progress delete] fork! Item was added: + ----- Method: ProgressMorph class>>label: (in category 'instance creation') ----- + label: aString + ^self new label: aString! Item was added: + ----- Method: ProgressMorph>>done (in category 'accessing') ----- + done + ^self progress value contents! Item was added: + ----- Method: ProgressMorph>>done: (in category 'accessing') ----- + done: amountDone + self progress value contents: ((amountDone min: 1.0) max: 0.0). + self currentWorld displayWorld! Item was added: + ----- Method: ProgressMorph>>fontOfPointSize: (in category 'private') ----- + fontOfPointSize: size + ^ (TextConstants at: Preferences standardEToysFont familyName ifAbsent: [TextStyle default]) fontOfPointSize: size! Item was added: + ----- Method: ProgressMorph>>incrDone: (in category 'accessing') ----- + incrDone: incrDone + self done: self done + incrDone! Item was added: + ----- Method: ProgressMorph>>initLabelMorph (in category 'initialization') ----- + initLabelMorph + ^ labelMorph := StringMorph contents: '' font: (self fontOfPointSize: 14)! Item was added: + ----- Method: ProgressMorph>>initProgressMorph (in category 'initialization') ----- + initProgressMorph + progress := ProgressBarMorph new. + progress borderWidth: 1. + progress color: Color white. + progress progressColor: Color gray. + progress extent: 200 @ 15. + ! Item was added: + ----- Method: ProgressMorph>>initSubLabelMorph (in category 'initialization') ----- + initSubLabelMorph + ^ subLabelMorph := StringMorph contents: '' font: (self fontOfPointSize: 12)! Item was added: + ----- Method: ProgressMorph>>initialize (in category 'initialization') ----- + initialize + super initialize. + self setupMorphs! Item was added: + ----- Method: ProgressMorph>>label (in category 'accessing') ----- + label + ^self labelMorph contents! Item was added: + ----- Method: ProgressMorph>>label: (in category 'accessing') ----- + label: aString + self labelMorph contents: aString. + self currentWorld displayWorld! Item was added: + ----- Method: ProgressMorph>>labelMorph (in category 'private') ----- + labelMorph + ^labelMorph ifNil: [self initLabelMorph]! Item was added: + ----- Method: ProgressMorph>>progress (in category 'accessing') ----- + progress + ^progress ifNil: [self initProgressMorph]! Item was added: + ----- Method: ProgressMorph>>setupMorphs (in category 'initialization') ----- + setupMorphs + | | + self initProgressMorph. + self + layoutPolicy: TableLayout new; + listDirection: #topToBottom; + cellPositioning: #topCenter; + listCentering: #center; + hResizing: #shrinkWrap; + vResizing: #shrinkWrap; + color: Color transparent. + + self addMorphBack: self labelMorph. + self addMorphBack: self subLabelMorph. + self addMorphBack: self progress. + + self borderWidth: 2. + self borderColor: Color black. + + self color: Color veryLightGray. + self align: self fullBounds center with: Display boundingBox center + ! Item was added: + ----- Method: ProgressMorph>>subLabel (in category 'accessing') ----- + subLabel + ^self subLabelMorph contents! Item was added: + ----- Method: ProgressMorph>>subLabel: (in category 'accessing') ----- + subLabel: aString + self subLabelMorph contents: aString. + self currentWorld displayWorld! Item was added: + ----- Method: ProgressMorph>>subLabelMorph (in category 'private') ----- + subLabelMorph + ^subLabelMorph ifNil: [self initSubLabelMorph]! From commits at source.squeak.org Thu Nov 19 20:00:52 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 19 20:00:54 2015 Subject: [squeak-dev] The Trunk: Morphic-kfr.1048.mcz Message-ID: Karl Ramberg uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-kfr.1048.mcz ==================== Summary ==================== Name: Morphic-kfr.1048 Author: kfr Time: 19 November 2015, 9:00:00.723 pm UUID: 63b86f93-377e-4fb1-a338-3968d13dce13 Ancestors: Morphic-mt.1047 ProgressMorph and ProgressBarMorph are not used as widgets. Moved to MorphicExtras-Obsolete =============== Diff against Morphic-mt.1047 =============== Item was removed: - BorderedMorph subclass: #ProgressBarMorph - instanceVariableNames: 'value progressColor lastValue' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Widgets'! Item was removed: - ----- Method: ProgressBarMorph>>addCustomMenuItems:hand: (in category 'menu') ----- - addCustomMenuItems: aCustomMenu hand: aHandMorph - super addCustomMenuItems: aCustomMenu hand: aHandMorph. - aCustomMenu addList: { - {'progress color...' translated. #changeProgressColor:}. - {'progress value...' translated. #changeProgressValue:}. - }! Item was removed: - ----- Method: ProgressBarMorph>>changeProgressColor: (in category 'menu') ----- - changeProgressColor: evt - | aHand | - aHand := evt ifNotNil: [evt hand] ifNil: [self primaryHand]. - self changeColorTarget: self selector: #progressColor: originalColor: self progressColor hand: aHand.! Item was removed: - ----- Method: ProgressBarMorph>>changeProgressValue: (in category 'menu') ----- - changeProgressValue: evt - | answer | - answer := UIManager default - request: 'Enter new value (0 - 1.0)' - initialAnswer: self value contents asString. - answer isEmptyOrNil ifTrue: [^ self]. - self value contents: answer asNumber! Item was removed: - ----- Method: ProgressBarMorph>>drawOn: (in category 'drawing') ----- - drawOn: aCanvas - | width inner | - super drawOn: aCanvas. - inner := self innerBounds. - width := (inner width * lastValue) truncated min: inner width. - aCanvas fillRectangle: (inner origin extent: width @ inner height) color: progressColor.! Item was removed: - ----- Method: ProgressBarMorph>>initialize (in category 'initialization') ----- - initialize - super initialize. - progressColor := Color green. - self value: (ValueHolder new contents: 0.0). - lastValue := 0.0! Item was removed: - ----- Method: ProgressBarMorph>>progressColor (in category 'accessing') ----- - progressColor - ^progressColor! Item was removed: - ----- Method: ProgressBarMorph>>progressColor: (in category 'accessing') ----- - progressColor: aColor - progressColor = aColor - ifFalse: - [progressColor := aColor. - self changed]! Item was removed: - ----- Method: ProgressBarMorph>>update: (in category 'updating') ----- - update: aSymbol - aSymbol == #contents - ifTrue: - [lastValue := value contents. - self changed]! Item was removed: - ----- Method: ProgressBarMorph>>value (in category 'accessing') ----- - value - ^value! Item was removed: - ----- Method: ProgressBarMorph>>value: (in category 'accessing') ----- - value: aModel - value ifNotNil: [value removeDependent: self]. - value := aModel. - value ifNotNil: [value addDependent: self]! Item was removed: - RectangleMorph subclass: #ProgressMorph - instanceVariableNames: 'labelMorph subLabelMorph progress' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Widgets'! Item was removed: - ----- Method: ProgressMorph class>>example (in category 'example') ----- - example - "ProgressMorph example" - - | progress | - progress := ProgressMorph label: 'Test progress'. - progress subLabel: 'this is the subheading'. - progress openInWorld. - [10 timesRepeat: - [(Delay forMilliseconds: 200) wait. - progress incrDone: 0.1]. - progress delete] fork! Item was removed: - ----- Method: ProgressMorph class>>label: (in category 'instance creation') ----- - label: aString - ^self new label: aString! Item was removed: - ----- Method: ProgressMorph>>done (in category 'accessing') ----- - done - ^self progress value contents! Item was removed: - ----- Method: ProgressMorph>>done: (in category 'accessing') ----- - done: amountDone - self progress value contents: ((amountDone min: 1.0) max: 0.0). - self currentWorld displayWorld! Item was removed: - ----- Method: ProgressMorph>>fontOfPointSize: (in category 'private') ----- - fontOfPointSize: size - ^ (TextConstants at: Preferences standardEToysFont familyName ifAbsent: [TextStyle default]) fontOfPointSize: size! Item was removed: - ----- Method: ProgressMorph>>incrDone: (in category 'accessing') ----- - incrDone: incrDone - self done: self done + incrDone! Item was removed: - ----- Method: ProgressMorph>>initLabelMorph (in category 'initialization') ----- - initLabelMorph - ^ labelMorph := StringMorph contents: '' font: (self fontOfPointSize: 14)! Item was removed: - ----- Method: ProgressMorph>>initProgressMorph (in category 'initialization') ----- - initProgressMorph - progress := ProgressBarMorph new. - progress borderWidth: 1. - progress color: Color white. - progress progressColor: Color gray. - progress extent: 200 @ 15. - ! Item was removed: - ----- Method: ProgressMorph>>initSubLabelMorph (in category 'initialization') ----- - initSubLabelMorph - ^ subLabelMorph := StringMorph contents: '' font: (self fontOfPointSize: 12)! Item was removed: - ----- Method: ProgressMorph>>initialize (in category 'initialization') ----- - initialize - super initialize. - self setupMorphs! Item was removed: - ----- Method: ProgressMorph>>label (in category 'accessing') ----- - label - ^self labelMorph contents! Item was removed: - ----- Method: ProgressMorph>>label: (in category 'accessing') ----- - label: aString - self labelMorph contents: aString. - self currentWorld displayWorld! Item was removed: - ----- Method: ProgressMorph>>labelMorph (in category 'private') ----- - labelMorph - ^labelMorph ifNil: [self initLabelMorph]! Item was removed: - ----- Method: ProgressMorph>>progress (in category 'accessing') ----- - progress - ^progress ifNil: [self initProgressMorph]! Item was removed: - ----- Method: ProgressMorph>>setupMorphs (in category 'initialization') ----- - setupMorphs - | | - self initProgressMorph. - self - layoutPolicy: TableLayout new; - listDirection: #topToBottom; - cellPositioning: #topCenter; - listCentering: #center; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap; - color: Color transparent. - - self addMorphBack: self labelMorph. - self addMorphBack: self subLabelMorph. - self addMorphBack: self progress. - - self borderWidth: 2. - self borderColor: Color black. - - self color: Color veryLightGray. - self align: self fullBounds center with: Display boundingBox center - ! Item was removed: - ----- Method: ProgressMorph>>subLabel (in category 'accessing') ----- - subLabel - ^self subLabelMorph contents! Item was removed: - ----- Method: ProgressMorph>>subLabel: (in category 'accessing') ----- - subLabel: aString - self subLabelMorph contents: aString. - self currentWorld displayWorld! Item was removed: - ----- Method: ProgressMorph>>subLabelMorph (in category 'private') ----- - subLabelMorph - ^subLabelMorph ifNil: [self initSubLabelMorph]! From Das.Linux at gmx.de Thu Nov 19 20:00:49 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Nov 19 20:01:00 2015 Subject: [squeak-dev] The Trunk: MorphicExtras-kfr.167.mcz Message-ID: <901FF65D-F3BE-4AA6-BA6B-E6D85A8EDA80@gmx.de> Hi Karl, On 19.11.2015, at 19:55, commits@source.squeak.org wrote: > Karl Ramberg uploaded a new version of MorphicExtras to project The Trunk: > http://source.squeak.org/trunk/MorphicExtras-kfr.167.mcz > > ==================== Summary ==================== > > Name: MorphicExtras-kfr.167 > Author: kfr > Time: 19 November 2015, 8:55:15.765 pm > UUID: d101e159-825d-4c86-a582-8bd22029b3bf > Ancestors: MorphicExtras-mt.166 > > ProgressMorph and ProgressBarMorph are not used as widgets. Moved to MorphicExtras-Obsolete is that meant as a deprecation? If so, I'd suggest putting them into 51Deprecated-MorphicExtras. Best regards -Tobias > > =============== Diff against MorphicExtras-mt.166 =============== > > Item was added: > + BorderedMorph subclass: #ProgressBarMorph > + instanceVariableNames: 'value progressColor lastValue' > + classVariableNames: '' > + poolDictionaries: '' > + category: 'MorphicExtras-Obsolete'! > > Item was added: > + ----- Method: ProgressBarMorph>>addCustomMenuItems:hand: (in category 'menu') ----- > + addCustomMenuItems: aCustomMenu hand: aHandMorph > + super addCustomMenuItems: aCustomMenu hand: aHandMorph. > + aCustomMenu addList: { > + {'progress color...' translated. #changeProgressColor:}. > + {'progress value...' translated. #changeProgressValue:}. > + }! > > Item was added: > + ----- Method: ProgressBarMorph>>changeProgressColor: (in category 'menu') ----- > + changeProgressColor: evt > + | aHand | > + aHand := evt ifNotNil: [evt hand] ifNil: [self primaryHand]. > + self changeColorTarget: self selector: #progressColor: originalColor: self progressColor hand: aHand.! > > Item was added: > + ----- Method: ProgressBarMorph>>changeProgressValue: (in category 'menu') ----- > + changeProgressValue: evt > + | answer | > + answer := UIManager default > + request: 'Enter new value (0 - 1.0)' > + initialAnswer: self value contents asString. > + answer isEmptyOrNil ifTrue: [^ self]. > + self value contents: answer asNumber! > > Item was added: > + ----- Method: ProgressBarMorph>>drawOn: (in category 'drawing') ----- > + drawOn: aCanvas > + | width inner | > + super drawOn: aCanvas. > + inner := self innerBounds. > + width := (inner width * lastValue) truncated min: inner width. > + aCanvas fillRectangle: (inner origin extent: width @ inner height) color: progressColor.! > > Item was added: > + ----- Method: ProgressBarMorph>>initialize (in category 'initialization') ----- > + initialize > + super initialize. > + progressColor := Color green. > + self value: (ValueHolder new contents: 0.0). > + lastValue := 0.0! > > Item was added: > + ----- Method: ProgressBarMorph>>progressColor (in category 'accessing') ----- > + progressColor > + ^progressColor! > > Item was added: > + ----- Method: ProgressBarMorph>>progressColor: (in category 'accessing') ----- > + progressColor: aColor > + progressColor = aColor > + ifFalse: > + [progressColor := aColor. > + self changed]! > > Item was added: > + ----- Method: ProgressBarMorph>>update: (in category 'updating') ----- > + update: aSymbol > + aSymbol == #contents > + ifTrue: > + [lastValue := value contents. > + self changed]! > > Item was added: > + ----- Method: ProgressBarMorph>>value (in category 'accessing') ----- > + value > + ^value! > > Item was added: > + ----- Method: ProgressBarMorph>>value: (in category 'accessing') ----- > + value: aModel > + value ifNotNil: [value removeDependent: self]. > + value := aModel. > + value ifNotNil: [value addDependent: self]! > > Item was added: > + RectangleMorph subclass: #ProgressMorph > + instanceVariableNames: 'labelMorph subLabelMorph progress' > + classVariableNames: '' > + poolDictionaries: '' > + category: 'MorphicExtras-Obsolete'! > > Item was added: > + ----- Method: ProgressMorph class>>example (in category 'example') ----- > + example > + "ProgressMorph example" > + > + | progress | > + progress := ProgressMorph label: 'Test progress'. > + progress subLabel: 'this is the subheading'. > + progress openInWorld. > + [10 timesRepeat: > + [(Delay forMilliseconds: 200) wait. > + progress incrDone: 0.1]. > + progress delete] fork! > > Item was added: > + ----- Method: ProgressMorph class>>label: (in category 'instance creation') ----- > + label: aString > + ^self new label: aString! > > Item was added: > + ----- Method: ProgressMorph>>done (in category 'accessing') ----- > + done > + ^self progress value contents! > > Item was added: > + ----- Method: ProgressMorph>>done: (in category 'accessing') ----- > + done: amountDone > + self progress value contents: ((amountDone min: 1.0) max: 0.0). > + self currentWorld displayWorld! > > Item was added: > + ----- Method: ProgressMorph>>fontOfPointSize: (in category 'private') ----- > + fontOfPointSize: size > + ^ (TextConstants at: Preferences standardEToysFont familyName ifAbsent: [TextStyle default]) fontOfPointSize: size! > > Item was added: > + ----- Method: ProgressMorph>>incrDone: (in category 'accessing') ----- > + incrDone: incrDone > + self done: self done + incrDone! > > Item was added: > + ----- Method: ProgressMorph>>initLabelMorph (in category 'initialization') ----- > + initLabelMorph > + ^ labelMorph := StringMorph contents: '' font: (self fontOfPointSize: 14)! > > Item was added: > + ----- Method: ProgressMorph>>initProgressMorph (in category 'initialization') ----- > + initProgressMorph > + progress := ProgressBarMorph new. > + progress borderWidth: 1. > + progress color: Color white. > + progress progressColor: Color gray. > + progress extent: 200 @ 15. > + ! > > Item was added: > + ----- Method: ProgressMorph>>initSubLabelMorph (in category 'initialization') ----- > + initSubLabelMorph > + ^ subLabelMorph := StringMorph contents: '' font: (self fontOfPointSize: 12)! > > Item was added: > + ----- Method: ProgressMorph>>initialize (in category 'initialization') ----- > + initialize > + super initialize. > + self setupMorphs! > > Item was added: > + ----- Method: ProgressMorph>>label (in category 'accessing') ----- > + label > + ^self labelMorph contents! > > Item was added: > + ----- Method: ProgressMorph>>label: (in category 'accessing') ----- > + label: aString > + self labelMorph contents: aString. > + self currentWorld displayWorld! > > Item was added: > + ----- Method: ProgressMorph>>labelMorph (in category 'private') ----- > + labelMorph > + ^labelMorph ifNil: [self initLabelMorph]! > > Item was added: > + ----- Method: ProgressMorph>>progress (in category 'accessing') ----- > + progress > + ^progress ifNil: [self initProgressMorph]! > > Item was added: > + ----- Method: ProgressMorph>>setupMorphs (in category 'initialization') ----- > + setupMorphs > + | | > + self initProgressMorph. > + self > + layoutPolicy: TableLayout new; > + listDirection: #topToBottom; > + cellPositioning: #topCenter; > + listCentering: #center; > + hResizing: #shrinkWrap; > + vResizing: #shrinkWrap; > + color: Color transparent. > + > + self addMorphBack: self labelMorph. > + self addMorphBack: self subLabelMorph. > + self addMorphBack: self progress. > + > + self borderWidth: 2. > + self borderColor: Color black. > + > + self color: Color veryLightGray. > + self align: self fullBounds center with: Display boundingBox center > + ! > > Item was added: > + ----- Method: ProgressMorph>>subLabel (in category 'accessing') ----- > + subLabel > + ^self subLabelMorph contents! > > Item was added: > + ----- Method: ProgressMorph>>subLabel: (in category 'accessing') ----- > + subLabel: aString > + self subLabelMorph contents: aString. > + self currentWorld displayWorld! > > Item was added: > + ----- Method: ProgressMorph>>subLabelMorph (in category 'private') ----- > + subLabelMorph > + ^subLabelMorph ifNil: [self initSubLabelMorph]! > > From karlramberg at gmail.com Thu Nov 19 20:03:33 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 19 20:03:37 2015 Subject: [squeak-dev] The Trunk: MorphicExtras-kfr.167.mcz In-Reply-To: <901FF65D-F3BE-4AA6-BA6B-E6D85A8EDA80@gmx.de> References: <901FF65D-F3BE-4AA6-BA6B-E6D85A8EDA80@gmx.de> Message-ID: Not sure if it is to be deprecated, so I played it safe. Maybe some somewhere depends on it.... Best, Karl On Thu, Nov 19, 2015 at 9:00 PM, Tobias Pape wrote: > Hi Karl, > > On 19.11.2015, at 19:55, commits@source.squeak.org wrote: > > > Karl Ramberg uploaded a new version of MorphicExtras to project The > Trunk: > > http://source.squeak.org/trunk/MorphicExtras-kfr.167.mcz > > > > ==================== Summary ==================== > > > > Name: MorphicExtras-kfr.167 > > Author: kfr > > Time: 19 November 2015, 8:55:15.765 pm > > UUID: d101e159-825d-4c86-a582-8bd22029b3bf > > Ancestors: MorphicExtras-mt.166 > > > > ProgressMorph and ProgressBarMorph are not used as widgets. Moved to > MorphicExtras-Obsolete > > is that meant as a deprecation? > If so, I'd suggest putting them into 51Deprecated-MorphicExtras. > > Best regards > -Tobias > > > > > =============== Diff against MorphicExtras-mt.166 =============== > > > > Item was added: > > + BorderedMorph subclass: #ProgressBarMorph > > + instanceVariableNames: 'value progressColor lastValue' > > + classVariableNames: '' > > + poolDictionaries: '' > > + category: 'MorphicExtras-Obsolete'! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>addCustomMenuItems:hand: (in category > 'menu') ----- > > + addCustomMenuItems: aCustomMenu hand: aHandMorph > > + super addCustomMenuItems: aCustomMenu hand: aHandMorph. > > + aCustomMenu addList: { > > + {'progress color...' translated. #changeProgressColor:}. > > + {'progress value...' translated. #changeProgressValue:}. > > + }! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>changeProgressColor: (in category > 'menu') ----- > > + changeProgressColor: evt > > + | aHand | > > + aHand := evt ifNotNil: [evt hand] ifNil: [self primaryHand]. > > + self changeColorTarget: self selector: #progressColor: > originalColor: self progressColor hand: aHand.! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>changeProgressValue: (in category > 'menu') ----- > > + changeProgressValue: evt > > + | answer | > > + answer := UIManager default > > + request: 'Enter new value (0 - 1.0)' > > + initialAnswer: self value contents asString. > > + answer isEmptyOrNil ifTrue: [^ self]. > > + self value contents: answer asNumber! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>drawOn: (in category 'drawing') ----- > > + drawOn: aCanvas > > + | width inner | > > + super drawOn: aCanvas. > > + inner := self innerBounds. > > + width := (inner width * lastValue) truncated min: inner width. > > + aCanvas fillRectangle: (inner origin extent: width @ inner height) > color: progressColor.! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>initialize (in category > 'initialization') ----- > > + initialize > > + super initialize. > > + progressColor := Color green. > > + self value: (ValueHolder new contents: 0.0). > > + lastValue := 0.0! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>progressColor (in category > 'accessing') ----- > > + progressColor > > + ^progressColor! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>progressColor: (in category > 'accessing') ----- > > + progressColor: aColor > > + progressColor = aColor > > + ifFalse: > > + [progressColor := aColor. > > + self changed]! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>update: (in category 'updating') ----- > > + update: aSymbol > > + aSymbol == #contents > > + ifTrue: > > + [lastValue := value contents. > > + self changed]! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>value (in category 'accessing') ----- > > + value > > + ^value! > > > > Item was added: > > + ----- Method: ProgressBarMorph>>value: (in category 'accessing') ----- > > + value: aModel > > + value ifNotNil: [value removeDependent: self]. > > + value := aModel. > > + value ifNotNil: [value addDependent: self]! > > > > Item was added: > > + RectangleMorph subclass: #ProgressMorph > > + instanceVariableNames: 'labelMorph subLabelMorph progress' > > + classVariableNames: '' > > + poolDictionaries: '' > > + category: 'MorphicExtras-Obsolete'! > > > > Item was added: > > + ----- Method: ProgressMorph class>>example (in category 'example') > ----- > > + example > > + "ProgressMorph example" > > + > > + | progress | > > + progress := ProgressMorph label: 'Test progress'. > > + progress subLabel: 'this is the subheading'. > > + progress openInWorld. > > + [10 timesRepeat: > > + [(Delay forMilliseconds: 200) wait. > > + progress incrDone: 0.1]. > > + progress delete] fork! > > > > Item was added: > > + ----- Method: ProgressMorph class>>label: (in category 'instance > creation') ----- > > + label: aString > > + ^self new label: aString! > > > > Item was added: > > + ----- Method: ProgressMorph>>done (in category 'accessing') ----- > > + done > > + ^self progress value contents! > > > > Item was added: > > + ----- Method: ProgressMorph>>done: (in category 'accessing') ----- > > + done: amountDone > > + self progress value contents: ((amountDone min: 1.0) max: 0.0). > > + self currentWorld displayWorld! > > > > Item was added: > > + ----- Method: ProgressMorph>>fontOfPointSize: (in category 'private') > ----- > > + fontOfPointSize: size > > + ^ (TextConstants at: Preferences standardEToysFont familyName > ifAbsent: [TextStyle default]) fontOfPointSize: size! > > > > Item was added: > > + ----- Method: ProgressMorph>>incrDone: (in category 'accessing') ----- > > + incrDone: incrDone > > + self done: self done + incrDone! > > > > Item was added: > > + ----- Method: ProgressMorph>>initLabelMorph (in category > 'initialization') ----- > > + initLabelMorph > > + ^ labelMorph := StringMorph contents: '' font: (self > fontOfPointSize: 14)! > > > > Item was added: > > + ----- Method: ProgressMorph>>initProgressMorph (in category > 'initialization') ----- > > + initProgressMorph > > + progress := ProgressBarMorph new. > > + progress borderWidth: 1. > > + progress color: Color white. > > + progress progressColor: Color gray. > > + progress extent: 200 @ 15. > > + ! > > > > Item was added: > > + ----- Method: ProgressMorph>>initSubLabelMorph (in category > 'initialization') ----- > > + initSubLabelMorph > > + ^ subLabelMorph := StringMorph contents: '' font: (self > fontOfPointSize: 12)! > > > > Item was added: > > + ----- Method: ProgressMorph>>initialize (in category 'initialization') > ----- > > + initialize > > + super initialize. > > + self setupMorphs! > > > > Item was added: > > + ----- Method: ProgressMorph>>label (in category 'accessing') ----- > > + label > > + ^self labelMorph contents! > > > > Item was added: > > + ----- Method: ProgressMorph>>label: (in category 'accessing') ----- > > + label: aString > > + self labelMorph contents: aString. > > + self currentWorld displayWorld! > > > > Item was added: > > + ----- Method: ProgressMorph>>labelMorph (in category 'private') ----- > > + labelMorph > > + ^labelMorph ifNil: [self initLabelMorph]! > > > > Item was added: > > + ----- Method: ProgressMorph>>progress (in category 'accessing') ----- > > + progress > > + ^progress ifNil: [self initProgressMorph]! > > > > Item was added: > > + ----- Method: ProgressMorph>>setupMorphs (in category > 'initialization') ----- > > + setupMorphs > > + | | > > + self initProgressMorph. > > + self > > + layoutPolicy: TableLayout new; > > + listDirection: #topToBottom; > > + cellPositioning: #topCenter; > > + listCentering: #center; > > + hResizing: #shrinkWrap; > > + vResizing: #shrinkWrap; > > + color: Color transparent. > > + > > + self addMorphBack: self labelMorph. > > + self addMorphBack: self subLabelMorph. > > + self addMorphBack: self progress. > > + > > + self borderWidth: 2. > > + self borderColor: Color black. > > + > > + self color: Color veryLightGray. > > + self align: self fullBounds center with: Display boundingBox center > > + ! > > > > Item was added: > > + ----- Method: ProgressMorph>>subLabel (in category 'accessing') ----- > > + subLabel > > + ^self subLabelMorph contents! > > > > Item was added: > > + ----- Method: ProgressMorph>>subLabel: (in category 'accessing') ----- > > + subLabel: aString > > + self subLabelMorph contents: aString. > > + self currentWorld displayWorld! > > > > Item was added: > > + ----- Method: ProgressMorph>>subLabelMorph (in category 'private') > ----- > > + subLabelMorph > > + ^subLabelMorph ifNil: [self initSubLabelMorph]! > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/49cfd55d/attachment.htm From kbrown at mac.com Thu Nov 19 22:00:47 2015 From: kbrown at mac.com (Ken G. Brown) Date: Thu Nov 19 22:00:57 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447882211625-4861820.post@n4.nabble.com> <1447918970442-4861874.post@n4.nabble.com> Message-ID: <88CDAF29-AC8C-4176-8EE6-E19C5BD93ED7@mac.com> > On Nov 19, 2015, at 09:13, Chris Muller wrote: > > On Thu, Nov 19, 2015 at 1:42 AM, marcel.taeumel wrote: >> I like using TAB or SHIFT+TAB for indent resp. outdent. However, we have to >> get the selection right. We have to watch for the current context >> (surrounding whitespaces, beginning of the line etc.). > > After sleeping on it, I think Levente has the best idea -- that's > really what its about, indenting _multiple_ lines, otherwise, for > single line I can always just use Tab character. Eliot said he was > editing case statements, so that would work for that too. > >> If we cannot solve it, we should go back to CMD+SHIFT+L/R. > > I hope we won't need to, but if we did I would prefer to pick > different keys because L and R are very useful for global keys > (especially R). > >> P.S.: Really, ALT+TAB or CMD+TAB or CTRL+TAB is meant to be used for >> application/window cycling ... don't override this... :) > > OS's hook Alt+Tab, not Control+Tab, right? Apps like Google Chrome > hooks Control+Tab. Squeak is just another app that should be able to > hook Control+Tab too.. > How about using what the popular Mac editor, BBEdit uses, cmd-[ for move left and cmd-] for move right. Works the same for single and multiple lines. Ken G. Brown From jon at huv.com Thu Nov 19 22:24:43 2015 From: jon at huv.com (Jon Hylands) Date: Thu Nov 19 22:24:46 2015 Subject: [squeak-dev] Raspberry PI & omxplayer from Squeak In-Reply-To: <3BB08D39-D9EE-4CAF-96ED-AF5383F9B87B@rowledge.org> References: <20151119035601.GA32983@shell.msen.com> <3BB08D39-D9EE-4CAF-96ED-AF5383F9B87B@rowledge.org> Message-ID: Tim, Sorta kinda. I'm working on a side project for a group that protects endangered animals on game reserves in South Africa, and they want streaming video from their vehicles (they have wifi in most of the park). If you guys have another Camp Smalltalk out your way in Jan-Mar next year, I'll probably come. - Jon On Thu, Nov 19, 2015 at 2:32 PM, tim Rowledge wrote: > Hey Jon, > so trying to build a modern equivalent of the MediaPad eh? > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: GLV: Ground the Line Voltage > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151119/a2c6def9/attachment.htm From commits at source.squeak.org Thu Nov 19 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 19 22:55:05 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151119225502.11371.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009177.html Name: Tools-mt.654 Ancestors: Tools-ul.653 Makes hierarchy in class list more visible by using two instead of one space for each level. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009178.html Name: Morphic-mt.1047 Ancestors: Morphic-mt.1046 Makes intent/outdent via TAB resp. SHIFT+TAB more robust and fixes some bugs like replacing whitespace-only selections with tabs or indenting a block where the selection starts before the first character in a line. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009179.html Name: MorphicExtras-kfr.167 Ancestors: MorphicExtras-mt.166 ProgressMorph and ProgressBarMorph are not used as widgets. Moved to MorphicExtras-Obsolete ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009180.html Name: Morphic-kfr.1048 Ancestors: Morphic-mt.1047 ProgressMorph and ProgressBarMorph are not used as widgets. Moved to MorphicExtras-Obsolete ============================================= From eliot.miranda at gmail.com Fri Nov 20 00:37:19 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Nov 20 00:37:25 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1447949171326-4861997.post@n4.nabble.com> References: <1447882211625-4861820.post@n4.nabble.com> <1447918970442-4861874.post@n4.nabble.com> <1447949104456-4861996.post@n4.nabble.com> <1447949171326-4861997.post@n4.nabble.com> Message-ID: <9544055D-FC5C-4516-B0C5-67377A0819C5@gmail.com> Hi Marcel, today I noticed another bug with my code. If the selection is at the end of a text that ends with a tab then typing tab does nothing. It should insert another tab. _,,,^..^,,,_ (phone) > On Nov 19, 2015, at 8:06 AM, marcel.taeumel wrote: > > Btw, I improved Eliot's approach a little bit more: > http://forum.world.st/The-Trunk-Morphic-mt-1047-mcz-td4861883.html > > Still, we seem to be unsure whether we want to keept behavior...? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861997.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From eliot.miranda at gmail.com Fri Nov 20 00:39:30 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Nov 20 00:39:35 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1447918970442-4861874.post@n4.nabble.com> References: <1447882211625-4861820.post@n4.nabble.com> <1447918970442-4861874.post@n4.nabble.com> Message-ID: > On Nov 18, 2015, at 11:42 PM, marcel.taeumel wrote: > > I like using TAB or SHIFT+TAB for indent resp. outdent. However, we have to > get the selection right. We have to watch for the current context > (surrounding whitespaces, beginning of the line etc.). > > If we cannot solve it, we should go back to CMD+SHIFT+L/R. > > Best, > Marcel > > P.S.: Really, ALT+TAB or CMD+TAB or CTRL+TAB is meant to be used for > application/window cycling ... don't override this... :) +1 > View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861874.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Fri Nov 20 03:18:34 2015 From: asqueaker at gmail.com (Chris Muller) Date: Fri Nov 20 03:19:18 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1447949104456-4861996.post@n4.nabble.com> References: <1447882211625-4861820.post@n4.nabble.com> <1447918970442-4861874.post@n4.nabble.com> <1447949104456-4861996.post@n4.nabble.com> Message-ID: Oh, you meant SystemWindow cycling. Well, we do have Command+\ now which sort of does that, and I was thinking about a modified version of it which would equite to "make next to topmost" on the menu (toggles back and forth between two windows). On Thu, Nov 19, 2015 at 10:05 AM, marcel.taeumel wrote: >>> P.S.: Really, ALT+TAB or CMD+TAB or CTRL+TAB is meant to be used for >>> application/window cycling ... don't override this... :) > >> OS's hook Alt+Tab, not Control+Tab, right? Apps like Google Chrome >> hooks Control+Tab. Squeak is just another app that should be able to >> hook Control+Tab too.. > > Absolutely! But not for text editing, but system window cycling. :) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4861996.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Marcel.Taeumel at hpi.de Fri Nov 20 08:09:16 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 20 08:24:18 2015 Subject: [squeak-dev] Re: Welcome new core developer Patrick Rein In-Reply-To: <43117.136.2.1.104.1447954004.squirrel@webmail.msen.com> References: <43117.136.2.1.104.1447954004.squirrel@webmail.msen.com> Message-ID: <1448006956628-4862148.post@n4.nabble.com> Yay! :) -- View this message in context: http://forum.world.st/Welcome-new-core-developer-Patrick-Rein-tp4862014p4862148.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Nov 20 08:10:46 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 20 08:25:48 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-kfr.1048.mcz In-Reply-To: References: Message-ID: <1448007046887-4862149.post@n4.nabble.com> Why obsolete? Any application that may need a progress bar can use it. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-kfr-1048-mcz-tp4862058p4862149.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Nov 20 08:11:49 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 20 08:26:52 2015 Subject: [squeak-dev] Re: The Trunk: MorphicExtras-kfr.167.mcz In-Reply-To: References: <901FF65D-F3BE-4AA6-BA6B-E6D85A8EDA80@gmx.de> Message-ID: <1448007109217-4862150.post@n4.nabble.com> What should any new application use as progress bar-like indication embedded, for example, in a dialog window? Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-MorphicExtras-kfr-167-mcz-tp4862054p4862150.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Nov 20 08:13:26 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 20 08:28:27 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447918970442-4861874.post@n4.nabble.com> <1447949104456-4861996.post@n4.nabble.com> Message-ID: <1448007206144-4862151.post@n4.nabble.com> Not working here. It is CTRL+TAB in my Firefox browser, for example. :) Best, Marcel -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4862151.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Nov 20 08:15:35 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 20 08:30:36 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <9544055D-FC5C-4516-B0C5-67377A0819C5@gmail.com> References: <1447918970442-4861874.post@n4.nabble.com> <1447949104456-4861996.post@n4.nabble.com> <1447949171326-4861997.post@n4.nabble.com> <9544055D-FC5C-4516-B0C5-67377A0819C5@gmail.com> Message-ID: <1448007335359-4862152.post@n4.nabble.com> Hi Eliot, works for me in Update 15488. Or what do you mean? :) Best, Marcel -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4862152.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From patrick.rein at hpi.de Fri Nov 20 10:29:05 2015 From: patrick.rein at hpi.de (Patrick R.) Date: Fri Nov 20 10:44:07 2015 Subject: [squeak-dev] Mantis Questionable Issues Message-ID: <1448015345429-4862173.post@n4.nabble.com> Hi everyone, I have started looking at some of the open Mantis issues and commented on some which might be closed or need changes. Maybe someone could take a look at the following ones: - http://bugs.squeak.org/view.php?id=7768 - http://bugs.squeak.org/view.php?id=7796 - http://bugs.squeak.org/view.php?id=7770 - http://bugs.squeak.org/view.php?id=7774 Thanks :) Patrick -- View this message in context: http://forum.world.st/Mantis-Questionable-Issues-tp4862173.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Nov 20 11:04:18 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 20 11:04:20 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1049.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1049.mcz ==================== Summary ==================== Name: Morphic-mt.1049 Author: mt Time: 20 November 2015, 12:03:39.524 pm UUID: 5e8ed364-933c-4412-a21c-f9de5a0eead2 Ancestors: Morphic-kfr.1048 Fixes a bug with text selection and scrolling text boxes that have no soft line breaks. =============== Diff against Morphic-kfr.1048 =============== Item was changed: ----- Method: PluggableTextMorph>>scrollSelectionIntoView: (in category 'editor access') ----- scrollSelectionIntoView: event + "Scroll my text into view. Due to line composition mechanism, we must never use the right of a character block because the lines last character block right value always comes from a global container and is *not* line specific." + - "Scroll my text into view if necessary and return true, else return false" - | selRects rectToTest transform cpHere | selectionInterval := textMorph editor selectionInterval. + + textMorph editor hasSelection + ifFalse: [self scrollToShow: (textMorph editor startBlock withWidth: 1)] + ifTrue: [ + self scrollToShow: (textMorph editor startBlock topLeft corner: textMorph editor stopBlock bottomLeft). + self scrollToShow: (textMorph editor pointBlock withWidth: 1). "Ensure text cursor visibility."]. + - selRects := textMorph paragraph selectionRects. - selRects isEmpty ifTrue: [^ false]. - rectToTest := selRects reduce: [:r1 :r2 | r1 quickMerge: r2]. - transform := scroller transformFrom: self. - (event notNil and: [event anyButtonPressed]) ifTrue: "Check for autoscroll" - [cpHere := transform localPointToGlobal: event cursorPoint. - cpHere y <= self top - ifTrue: [rectToTest := selRects first topLeft extent: 2@2] - ifFalse: [cpHere y >= self bottom - ifTrue: [rectToTest := selRects last bottomRight extent: 2@2] - ifFalse: [^ false]]]. - self scrollToShow: rectToTest. - self scrollToShow: textMorph editor pointBlock. "Ensure text cursor visibility." ^ true! Item was changed: ----- Method: PluggableTextMorph>>setSelection: (in category 'model access') ----- setSelection: sel selectionInterval := sel. textMorph editor selectFrom: sel first to: sel last. + self scrollSelectionIntoView.! - self scrollSelectionIntoView ifFalse: [scroller changed].! Item was changed: ----- Method: TextMorph>>container (in category 'geometry') ----- container "Return the container for composing this text. There are four cases: 1. container is specified as, eg, an arbitrary shape, 2. container is specified as the bound rectangle, because this morph is linked to others, 3. container is nil, and wrap is true -- grow downward as necessary, + 4. container is nil, and wrap is false -- grow in 2D as necessary." - 4. container is nil, and wrap is false -- grow in 2D as nexessary." container ifNil: [successor ifNotNil: [^ self compositionRectangle]. + wrapFlag ifTrue: [^ self compositionRectangle withHeight: self maximumContainerExtent y]. + ^ self compositionRectangle topLeft extent: self maximumContainerExtent]. - wrapFlag ifTrue: [^ self compositionRectangle withHeight: 9999999]. - ^ self compositionRectangle topLeft extent: 9999999@9999999]. ^ container! Item was added: + ----- Method: TextMorph>>maximumContainerExtent (in category 'geometry') ----- + maximumContainerExtent + "For text composition. Returns the maximum area for text to be composed." + + ^ 9999999@9999999! From nicolaihess at gmail.com Fri Nov 20 11:09:29 2015 From: nicolaihess at gmail.com (Nicolai Hess) Date: Fri Nov 20 11:09:31 2015 Subject: [squeak-dev] Mantis Questionable Issues In-Reply-To: <1448015345429-4862173.post@n4.nabble.com> References: <1448015345429-4862173.post@n4.nabble.com> Message-ID: 2015-11-20 11:29 GMT+01:00 Patrick R. : > Hi everyone, > > I have started looking at some of the open Mantis issues and commented on > some which might be closed or need changes. Maybe someone could take a look > at the following ones: > > - http://bugs.squeak.org/view.php?id=7768 > This one can be closed, I just can not do it myself: > - http://bugs.squeak.org/view.php?id=7796 > > - http://bugs.squeak.org/view.php?id=7770 > This is a nasty one. It is how squeak app uses the imagename from the squeak.ini file, there were some discussions on the mailing list, AFAIK this behavior is on purpose (I don't like it). > - http://bugs.squeak.org/view.php?id=7774 > > Thanks :) > Patrick > > > > -- > View this message in context: > http://forum.world.st/Mantis-Questionable-Issues-tp4862173.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151120/f04ce1ab/attachment.htm From commits at source.squeak.org Fri Nov 20 13:17:15 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 20 13:17:17 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1050.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1050.mcz ==================== Summary ==================== Name: Morphic-mt.1050 Author: mt Time: 20 November 2015, 2:16:41.426 pm UUID: 188b4bcf-d1d3-4d41-a0dd-927519e120fb Ancestors: Morphic-mt.1049 Another update for indent/outdent after the suggestion from Levente and Chris. Indent only with TAB if multiple lines are selected. =============== Diff against Morphic-mt.1049 =============== 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." (Character separators includes: typedChar) ifTrue: [self closeTypeIn]. "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]]]. - ((typedChar == Character tab - and: [self hasSelection]) - and: [self isInWhitespaceAtStartOfLine]) ifTrue: [ - aKeyboardEvent shiftPressed - ifTrue: [self outdent: aKeyboardEvent] - ifFalse: [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 ifTrue: [((self hasSelection and: [self enclose: aKeyboardEvent]) or: [self autoEncloseFor: typedChar]) ifTrue: [^ true]]. self normalCharacter: aKeyboardEvent. ^ false! Item was added: + ----- Method: TextEditor>>hasMultipleLinesSelected (in category 'typing support') ----- + hasMultipleLinesSelected + + ^ self hasSelection and: [self startBlock top < self stopBlock top]! Item was removed: - ----- Method: TextEditor>>isInWhitespaceAtStartOfLine (in category 'typing support') ----- - isInWhitespaceAtStartOfLine - - ^ (self selectionStringFromBeginningOfLine allSatisfy: [:c| c isSeparator]) - and: [self selection anySatisfy: [:c | c isSeparator not] "Ignore whitespace-only selections."]! Item was removed: - ----- Method: TextEditor>>selectionStringFromBeginningOfLine (in category 'accessing-selection') ----- - selectionStringFromBeginningOfLine - - ^ self paragraph string - copyFrom: (self beginningOfLine: self startIndex) to: self startIndex - 1! From commits at source.squeak.org Fri Nov 20 13:29:48 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 20 13:29:50 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1051.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1051.mcz ==================== Summary ==================== Name: Morphic-mt.1051 Author: mt Time: 20 November 2015, 2:29:13.339 pm UUID: ccdb7ba4-414d-4c5b-ac18-6b858c14b3ea Ancestors: Morphic-mt.1050 Minor fix in text editor history. Do not create separate commands for consecutively typed separators. Allows for search/replace tabs with spaces (or vice versa) in-place. =============== Diff against Morphic-mt.1050 =============== Item was changed: Editor subclass: #TextEditor + instanceVariableNames: 'model paragraph markBlock pointBlock beginTypeInIndex emphasisHere lastParenLocation otherInterval oldInterval typeAhead history previousKeyCharacter' - instanceVariableNames: 'model paragraph markBlock pointBlock beginTypeInIndex emphasisHere lastParenLocation otherInterval oldInterval typeAhead history' classVariableNames: 'AutoEnclose AutoIndent ChangeText FindText' poolDictionaries: '' category: 'Morphic-Text Support'! TextEditor class instanceVariableNames: 'cmdActions shiftCmdActions yellowButtonMenu shiftedYellowButtonMenu'! !TextEditor commentStamp: '' 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. - "Create a new command for separating characters." - (Character separators includes: typedChar) - ifTrue: [self closeTypeIn]. "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 ifTrue: [((self hasSelection and: [self enclose: aKeyboardEvent]) or: [self autoEncloseFor: typedChar]) ifTrue: [^ true]]. self normalCharacter: aKeyboardEvent. ^ false! From karlramberg at gmail.com Fri Nov 20 13:54:53 2015 From: karlramberg at gmail.com (karl ramberg) Date: Fri Nov 20 13:54:56 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-kfr.1048.mcz In-Reply-To: <1448007046887-4862149.post@n4.nabble.com> References: <1448007046887-4862149.post@n4.nabble.com> Message-ID: All progress bar uses in image is SystemProgressMorph which is used from MorphicUIManager. Best, Karl On Fri, Nov 20, 2015 at 9:10 AM, marcel.taeumel wrote: > Why obsolete? Any application that may need a progress bar can use it. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Morphic-kfr-1048-mcz-tp4862058p4862149.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151120/699b93eb/attachment.htm From commits at source.squeak.org Fri Nov 20 13:58:19 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 20 13:58:21 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz Message-ID: A new version of Traits was added to project The Inbox: http://source.squeak.org/inbox/Traits-pre.307.mcz ==================== Summary ==================== Name: Traits-pre.307 Author: pre Time: 20 November 2015, 2:58:26.562 pm UUID: f0955b2d-775c-4862-85b9-5d6e616cd2e4 Ancestors: Traits-eem.306 This fixes http://bugs.squeak.org/view.php?id=7767 which is about the - and @ operator of Trait compositions ignoring brackets. This implementation uses the normal left to right evaluation order of Smalltalk to avoid confusions about the way trait composition expressions are evaluated. =============== Diff against Traits-eem.306 =============== Item was changed: ----- Method: TraitAlias>>printOn: (in category 'operations') ----- printOn: s "Answer the trait composition string (used for class definitions)" + s nextPutAll: '('. s nextPutAll: subject asString. s nextPutAll: ' @ {'. aliases do:[:assoc| s print: assoc] separatedBy:[s nextPutAll:'. ']. s nextPutAll: '}'. + s nextPutAll: ')'.! - ! Item was changed: ----- Method: TraitComposition>>- (in category 'converting') ----- - anArray - "the modifier operators #@ and #- bind stronger than +. - Thus, #@ or #- sent to a sum will only affect the most right summand" + self updateTraits: (self traitsCollect: [:aTrait | aTrait - anArray ])! - self addLast: (self removeLast - anArray)! Item was changed: ----- Method: TraitComposition>>@ (in category 'converting') ----- @ anArrayOfAssociations + + self updateTraits: (self traitsCollect: [:aTrait | aTrait @ anArrayOfAssociations ])! - "the modifier operators #@ and #- bind stronger than +. - Thus, #@ or #- sent to a sum will only affect the most right summand" - - self addLast: (self removeLast @ anArrayOfAssociations)! Item was added: + ----- Method: TraitComposition>>traitsCollect: (in category 'accessing') ----- + traitsCollect: aBlock + ^self collect: [:each| each traitsDo: aBlock]! Item was changed: ----- Method: TraitComposition>>traitsDo: (in category 'accessing') ----- traitsDo: aBlock + ^self do: [:each| each traitsDo: aBlock]! - ^self do:[:each| each traitsDo: aBlock]! Item was added: + ----- Method: TraitComposition>>updateTraits: (in category 'converting') ----- + updateTraits: aCollection + + self + removeAll; + addAll: aCollection! Item was changed: ----- Method: TraitExclusion>>printOn: (in category 'composition') ----- printOn: aStream "Answer the trait composition string (used for class definitions)" + aStream nextPutAll: '('. aStream nextPutAll: subject asString. aStream nextPutAll: ' - {'. exclusions asArray sort do:[:exc| aStream store: exc] separatedBy:[aStream nextPutAll: '. ']. + aStream nextPutAll: '}'. + aStream nextPutAll: ')'.! - aStream nextPutAll: '}'.! From commits at source.squeak.org Fri Nov 20 14:00:44 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 20 14:00:46 2015 Subject: [squeak-dev] The Inbox: TraitsTests-pre.15.mcz Message-ID: A new version of TraitsTests was added to project The Inbox: http://source.squeak.org/inbox/TraitsTests-pre.15.mcz ==================== Summary ==================== Name: TraitsTests-pre.15 Author: pre Time: 20 November 2015, 3:00:52.59 pm UUID: 3faad7d5-71f7-48d2-9ccb-4162d332c62a Ancestors: TraitsTests-nice.14 Updates the Traits tests to reflect the changes to the trait composition operator evaluation order =============== Diff against TraitsTests-nice.14 =============== Item was changed: ----- Method: ClassTraitTest>>testConflictsAliasesAndExclusions (in category 'testing') ----- testConflictsAliasesAndExclusions "conflict" self t1 classTrait compile: 'm2ClassSide: x ^99' classified: 'mycategory'. self assert: (self t1 classTrait includesLocalSelector: #m2ClassSide:). self assert: (self t5 classTrait >> #m2ClassSide:) isConflict. self assert: (self c2 class >> #m2ClassSide:) isConflict. "exclusion and alias" self assert: self t5 classSide traitComposition asString = 'T1 classTrait + T2 classTrait'. self t5 classSide uses: (self t1 classTrait @ { (#m2ClassSideAlias1: -> #m2ClassSide:) } + + (self t2 classTrait @ { (#m2ClassSideAlias2: -> #m2ClassSide:) } - { #m2ClassSide: })). - + self t2 classTrait) @ { (#m2ClassSideAlias2: -> #m2ClassSide:) } - - { #m2ClassSide: }. self deny: (self t5 classTrait >> #m2ClassSide:) isConflict. self deny: (self c2 class >> #m2ClassSide:) isConflict. self assert: (self c2 m2ClassSideAlias1: 13) = 99. self assert: (self c2 m2ClassSideAlias2: 13) = 13! Item was changed: ----- Method: PureBehaviorTest>>testChangeSuperclass (in category 'testing-applying trait composition') ----- testChangeSuperclass "self run: #testChangeSuperclass" "Test that when the superclass of a class is changed the non-local methods of the class sending super are recompiled to correctly store the new superclass." | aC2 newSuperclass | aC2 := self c2 new. "C1 is current superclass of C2" self assert: aC2 m51. self assert: self c2 superclass == self c1. self deny: (self c2 localSelectors includes: #m51). self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!" + self assert: self c2 traitCompositionString = '(T5 - {#m11})'. - self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sort = #(bar foo). "change superclass of C2 from C1 to X" newSuperclass := self createClassNamed: #X superclass: Object uses: {}. newSuperclass subclass: self c2 name uses: self c2 traitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self c2 category. self assert: self c2 superclass == newSuperclass. newSuperclass compile: 'foo ^17'. self assert: aC2 m51 = 17. self deny: (self c2 localSelectors includes: #m51). self c2 compile: 'm51 ^19'. self assert: aC2 m51 = 19. self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!" + self assert: self c2 traitCompositionString = '(T5 - {#m11})'. - self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sort = #(bar foo m51). "change superclass of C2 back to C1" self c1 subclass: self c2 name uses: self c2 traitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self c2 category. self assert: (aC2 m51 = 19). self assert: self c2 superclass == self c1. self assert: (self c2 localSelectors includes: #m51). self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!" + self assert: self c2 traitCompositionString = '(T5 - {#m11})'. - self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sort = #(bar foo m51). ! Item was changed: ----- Method: PureBehaviorTest>>testPropagationWhenTraitCompositionModifications (in category 'testing-applying trait composition') ----- testPropagationWhenTraitCompositionModifications "Test that the propagation mechanism works when setting new traitCompositions." self assert: self c2 methodDict size = 9. "2 + (3+(3+2))-1" "removing methods" self createTraitNamed: #T5 + uses: self t1 + (self t2 - { #m21. #m22 }). - uses: self t1 + self t2 - { #m21. #m22 }. self assert: self c2 methodDict size = 7. "adding methods" self createTraitNamed: #T2 uses: self t3. self assert: self c2 methodDict size = 10. self assert: (self c2 methodDict keys includesAllOf: #(#m31 #m32 #m33 ))! Item was changed: ----- Method: PureBehaviorTest>>testReshapeClass (in category 'testing-applying trait composition') ----- testReshapeClass "self run: #testReshapeClass" "Ensure that reshaping a class has no impact on its traits" + self assert: self c2 traitCompositionString = '(T5 - {#m11})'. - self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sort = #(bar foo). self c2 addInstVarName: 'foobar'. + self assert: self c2 traitCompositionString = '(T5 - {#m11})'. - self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sort = #(bar foo). self c2 removeInstVarName: 'foobar'. + self assert: self c2 traitCompositionString = '(T5 - {#m11})'. - self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sort = #(bar foo). ! Item was changed: ----- Method: TraitCompositionTest>>testInvalidComposition (in category 'testing-basic') ----- testInvalidComposition self shouldnt: [self t1 @ { (#a -> #b) } @ { (#x -> #y) }] raise: TraitCompositionException. self shouldnt: [(self t1 + self t2) @ { (#a -> #b) } @ { (#x -> #y) }] raise: TraitCompositionException. self shouldnt: [self t1 - { #a } - { #b }] raise: TraitCompositionException. self shouldnt: [self t1 + self t2 - { #a } - { #b }] raise: TraitCompositionException. self should: [(self t1 - { #x }) @ { (#a -> #b) }] raise: TraitCompositionException. + self should: [(self t1 + (self t2 - { #x } @ { (#a -> #b) }))] - self should: [(self t1 + self t2 - { #x }) @ { (#a -> #b) }] raise: TraitCompositionException. self should: [self t1 + self t1] raise: TraitCompositionException. self should: [(self t1 + self t2) @ { (#a -> #b) } + self t1] raise: TraitCompositionException. self should: [self t1 @ { (#a -> #m11). (#a -> #m12) }] raise: TraitCompositionException. self should: [self t1 @ { (#a -> #m11). (#b -> #a) }] raise: TraitCompositionException! Item was changed: ----- Method: TraitCompositionTest>>testPrinting (in category 'testing-basic') ----- testPrinting | composition1 composition2 | + composition1 := ((self t1 - { #a } + (self t2 @ { (#z -> #c) } - { #b. #c })) + + (self t3 - { #d. #e }) + + (self t4 @ { (#x -> #a). (#y -> #b) })). + composition2 := (self t4 @ { (#x -> #a). (#y -> #b) }) + (self t1 - { #a }) + + (self t3 - { #d. #e }) + + (self t2 - { #b. #c }). - composition1 := ((self t1 - { #a } + self t2) @ { (#z -> #c) } - { #b. #c } - + self t3 - { #d. #e } - + self t4) @ { (#x -> #a). (#y -> #b) }. - composition2 := self t4 @ { (#x -> #a). (#y -> #b) } + self t1 - { #a } - + self t3 - { #d. #e } - + self t2 - { #b. #c }. self assertPrints: composition1 printString + like: '(T1 - {#a}) + ((T2 @ {#z->#c}) - {#b. #c}) + (T3 - {#d. #e}) + (T4 @ {#x->#a. #y->#b})'. - like: 'T1 - {#a} + T2 @ {#z->#c} - {#b. #c} + T3 - {#d. #e} + T4 @ {#x->#a. #y->#b}'. self assertPrints: composition2 printString + like: '(T4 @ {#x->#a. #y->#b}) + (T1 - {#a}) + (T3 - {#d. #e}) + (T2 - {#b. #c})'! - like: 'T4 @ {#x->#a. #y->#b} + T1 - {#a} + T3 - {#d. #e} + T2 - {#b. #c}'! Item was changed: ----- Method: TraitFileOutTest>>setUp (in category 'running') ----- setUp super setUp. SystemOrganization addCategory: self categoryName. td := self createTraitNamed: #TD uses: {}. td compile: 'd' classified: #cat1. tc := self createTraitNamed: #TC uses: td. tc compile: 'c' classified: #cat1. tb := self createTraitNamed: #TB uses: td. tb compile: 'b' classified: #cat1. + ta := self createTraitNamed: #TA uses: tb + ((tc @ {#cc->#c}) - {#c}). - ta := self createTraitNamed: #TA uses: tb + tc @ {#cc->#c} - {#c}. ta compile: 'a' classified: #cat1. ca := self createClassNamed: #CA superclass: Object uses: {}. ca compile: 'ca' classified: #cat1. cb := self createClassNamed: #CB superclass: ca uses: ta. cb compile: 'cb' classified: #cat1. "make the class of cb also use tc:" cb class uses: ta classTrait + tc instanceVariableNames: ''.! Item was changed: ----- Method: TraitFileOutTest>>testFileOutCategory (in category 'testing') ----- testFileOutCategory "File out whole system category, delete all classes and traits and then file them in again." "self run: #testFileOutCategory" SystemOrganization fileOutCategory: self categoryName. SystemOrganization removeSystemCategory: self categoryName. self deny: (Smalltalk globals keys includesAnyOf: #(CA CB TA TB TC TD)). self fileIn: self categoryName , '.st'.. self assert: (Smalltalk globals keys includesAllOf: #(CA CB TA TB TC TD)). ta := Smalltalk at: #TA. self assert: (ta isKindOf: Trait). + self assert: 'TB + ((TC @ {#cc->#c}) - {#c})' equals: ta traitComposition asString. - self assert: 'TB + TC @ {#cc->#c} - {#c}' equals: ta traitComposition asString. self assert: (ta methodDict keys includesAllOf: #(a b cc)). cb := Smalltalk at: #CB. self assert: (cb isKindOf: Class). self assert: 'TA' equals: cb traitComposition asString. self assert: (cb methodDict keys includesAllOf: #(cb a b cc)). "test classSide traitComposition of CB" self assert: 'TA classTrait + TC' equals: cb classSide traitComposition asString. self assert: (cb classSide methodDict keys includesAllOf: #(d c)) ! Item was changed: ----- Method: TraitFileOutTest>>testFileOutTrait (in category 'testing') ----- testFileOutTrait "fileOut trait T6, remove it from system and then file it in again" "self run: #testFileOutTrait" | fileName | self t6 compile: 'localMethod: argument ^argument'. self t6 classSide compile: 'localClassSideMethod: argument ^argument'. self t6 fileOut. fileName := self t6 asString , '.st'. self resourceClassesAndTraits remove: self t6. self t6 removeFromSystem. self fileIn: fileName. self assert: (Smalltalk includesKey: #T6). TraitsResource current t6: (Smalltalk at: #T6). self resourceClassesAndTraits add: self t6. self assert: (self t6 isKindOf: Trait). + self assert: 'T1 + (T2 @ {#m22Alias->#m22})' equals: self t6 traitComposition asString. - self assert: 'T1 + T2 @ {#m22Alias->#m22}' equals: self t6 traitComposition asString. self assert: (self t6 methodDict keys includesAllOf: #( #localMethod: #m11 #m12 #m13 #m21 #m22 #m22Alias )). self assert: 2 equals: self t6 classSide methodDict size. self assert: (self t6 classSide methodDict keys includes: #localClassSideMethod:) description: 'Missing selector #localClassSideMethod:'. self assert: (self t6 classSide methodDict keys includes: #m2ClassSide:) description: 'Missing selector #m2ClassSide:'.! Item was changed: ----- Method: TraitTest>>testPrinting (in category 'testing') ----- testPrinting self assertPrints: self t6 definition like: 'Trait named: #T6 + uses: T1 + (T2 @ {#m22Alias->#m22}) - uses: T1 + T2 @ {#m22Alias->#m22} category: ''TraitsTests-Kernel'''! Item was changed: ----- Method: TraitsResource>>setUp (in category 'as yet unclassified') ----- setUp "Please note, that most tests rely on this setup of traits and classes - and that especially the order of the definitions matters." "SetUpCount := SetUpCount + 1." dirty := false. SystemChangeNotifier uniqueInstance doSilently: [self t1: (self createTraitNamed: #T1 uses: { }). self t1 comment: 'I am the trait T1'. self t2: (self createTraitNamed: #T2 uses: { }). self t2 compile: 'm21 ^21' classified: #cat1. self t2 compile: 'm22 ^22' classified: #cat2. self t2 classSide compile: 'm2ClassSide: a ^a'. self t3: (self createTraitNamed: #T3 uses: { }). self t3 compile: 'm31 ^31' classified: #cat1. self t3 compile: 'm32 ^32' classified: #cat2. self t3 compile: 'm33 ^33' classified: #cat3. self t4: (self createTraitNamed: #T4 uses: { (self t1). (self t2) }). self t4 compile: 'm11 ^41' classified: #catX. "overrides T1>>m11" self t4 compile: 'm42 ^42' classified: #cat2. self t5: (self createTraitNamed: #T5 uses: self t1 + self t2). self t5 compile: 'm51 ^super foo' classified: #cat1. self t5 compile: 'm52 ^ self class bar' classified: #cat1. self t5 compile: 'm53 ^ self class bar' classified: #cat1. self t6: (self createTraitNamed: #T6 + uses: (self t1 + (self t2 @ { (#m22Alias -> #m22) }))). - uses: (self t1 + self t2) @ { (#m22Alias -> #m22) }). self c1: (self createClassNamed: #C1 superclass: Object uses: { }). self c1 compile: 'foo ^true' classified: #accessing. self t1 compile: 'm11 ^11' classified: #cat1. self t1 compile: 'm12 ^12' classified: #cat2. self t1 compile: 'm13 ^self m12' classified: #cat3. self c2: (self createClassNamed: #C2 superclass: self c1 uses: self t5 - { #m11 }). self c2 compile: 'foo ^false' classified: #private. self c2 compile: 'bar ^self foo' classified: #private. self setUpTrivialRequiresFixture. self setUpTwoLevelRequiresFixture. self setUpTranslatingRequiresFixture]. SystemChangeNotifier uniqueInstance notify: self ofAllSystemChangesUsing: #codeChangedEvent:! From Patrick.Rein at hpi.de Fri Nov 20 14:07:22 2015 From: Patrick.Rein at hpi.de (Rein, Patrick) Date: Fri Nov 20 14:07:25 2015 Subject: AW: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> Message-ID: <1448028452837.42806@hpi.de> I want to add some more reasoning to this commit. The commit is intended to fix this issue: http://bugs.squeak.org/view.php?id=7767 My implementation is based on the corresponding Pharo Traits implementation, except for the TraitsComposition>>#printOn: implementation. Do you think it is worth also recreating that behavior? In general, the most important thing regarding this change is, that this might break older .st or .cs files containing Traits definitions based on the old evaluation order. Bests Patrick ________________________________________ Von: squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von commits@source.squeak.org Gesendet: Freitag, 20. November 2015 09:52 An: squeak-dev@lists.squeakfoundation.org Betreff: [squeak-dev] The Inbox: Traits-pre.307.mcz A new version of Traits was added to project The Inbox: http://source.squeak.org/inbox/Traits-pre.307.mcz ==================== Summary ==================== Name: Traits-pre.307 Author: pre Time: 20 November 2015, 2:58:26.562 pm UUID: f0955b2d-775c-4862-85b9-5d6e616cd2e4 Ancestors: Traits-eem.306 This fixes http://bugs.squeak.org/view.php?id=7767 which is about the - and @ operator of Trait compositions ignoring brackets. This implementation uses the normal left to right evaluation order of Smalltalk to avoid confusions about the way trait composition expressions are evaluated. =============== Diff against Traits-eem.306 =============== Item was changed: ----- Method: TraitAlias>>printOn: (in category 'operations') ----- printOn: s "Answer the trait composition string (used for class definitions)" + s nextPutAll: '('. s nextPutAll: subject asString. s nextPutAll: ' @ {'. aliases do:[:assoc| s print: assoc] separatedBy:[s nextPutAll:'. ']. s nextPutAll: '}'. + s nextPutAll: ')'.! - ! Item was changed: ----- Method: TraitComposition>>- (in category 'converting') ----- - anArray - "the modifier operators #@ and #- bind stronger than +. - Thus, #@ or #- sent to a sum will only affect the most right summand" + self updateTraits: (self traitsCollect: [:aTrait | aTrait - anArray ])! - self addLast: (self removeLast - anArray)! Item was changed: ----- Method: TraitComposition>>@ (in category 'converting') ----- @ anArrayOfAssociations + + self updateTraits: (self traitsCollect: [:aTrait | aTrait @ anArrayOfAssociations ])! - "the modifier operators #@ and #- bind stronger than +. - Thus, #@ or #- sent to a sum will only affect the most right summand" - - self addLast: (self removeLast @ anArrayOfAssociations)! Item was added: + ----- Method: TraitComposition>>traitsCollect: (in category 'accessing') ----- + traitsCollect: aBlock + ^self collect: [:each| each traitsDo: aBlock]! Item was changed: ----- Method: TraitComposition>>traitsDo: (in category 'accessing') ----- traitsDo: aBlock + ^self do: [:each| each traitsDo: aBlock]! - ^self do:[:each| each traitsDo: aBlock]! Item was added: + ----- Method: TraitComposition>>updateTraits: (in category 'converting') ----- + updateTraits: aCollection + + self + removeAll; + addAll: aCollection! Item was changed: ----- Method: TraitExclusion>>printOn: (in category 'composition') ----- printOn: aStream "Answer the trait composition string (used for class definitions)" + aStream nextPutAll: '('. aStream nextPutAll: subject asString. aStream nextPutAll: ' - {'. exclusions asArray sort do:[:exc| aStream store: exc] separatedBy:[aStream nextPutAll: '. ']. + aStream nextPutAll: '}'. + aStream nextPutAll: ')'.! - aStream nextPutAll: '}'.! From karlramberg at gmail.com Fri Nov 20 14:07:51 2015 From: karlramberg at gmail.com (karl ramberg) Date: Fri Nov 20 14:07:54 2015 Subject: [squeak-dev] Mantis Questionable Issues In-Reply-To: References: <1448015345429-4862173.post@n4.nabble.com> Message-ID: - http://bugs.squeak.org/view.php?id=7774 This is a issue that is annoying. The squeak.ini file limits the use of a 'all in one' download for general use. Best, Karl On Fri, Nov 20, 2015 at 12:09 PM, Nicolai Hess wrote: > > > 2015-11-20 11:29 GMT+01:00 Patrick R. : > >> Hi everyone, >> >> I have started looking at some of the open Mantis issues and commented on >> some which might be closed or need changes. Maybe someone could take a >> look >> at the following ones: >> >> - http://bugs.squeak.org/view.php?id=7768 >> > > > This one can be closed, I just can not do it myself: > > >> - http://bugs.squeak.org/view.php?id=7796 >> > > > >> - http://bugs.squeak.org/view.php?id=7770 >> > > This is a nasty one. It is how squeak app uses the imagename from the > squeak.ini file, > there were some discussions on the mailing list, AFAIK this behavior is on > purpose (I don't like it). > > >> - http://bugs.squeak.org/view.php?id=7774 >> >> Thanks :) >> Patrick >> >> >> >> -- >> View this message in context: >> http://forum.world.st/Mantis-Questionable-Issues-tp4862173.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151120/8e372b03/attachment.htm From tim at rowledge.org Fri Nov 20 18:40:37 2015 From: tim at rowledge.org (tim Rowledge) Date: Fri Nov 20 18:40:41 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <1448028452837.42806@hpi.de> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> Message-ID: <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Should we keep Traits? It was a neat idea that I was happy to support but it got left unfinished. Where are tools to develop & manage Traits? Where is the usage? Unless there is a compelling reason - and subsequent effort to fill out support - I suggest we should remove them. Along with Islands. And Universes. And probably Environments too, since that has stalled without becoming a proper part of the system. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: IG: Insert Garbage From leves at elte.hu Fri Nov 20 19:15:31 2015 From: leves at elte.hu (Levente Uzonyi) Date: Fri Nov 20 19:15:36 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On Fri, 20 Nov 2015, tim Rowledge wrote: > Should we keep Traits? It was a neat idea that I was happy to support but it got left unfinished. Where are tools to develop & manage Traits? Where is the usage? I always considered Traits to be a weak concept. IMHO with less effort, one could have created a stateful deterministic mixin system which would have been superior to Traits. Andreas has replaced the original Traits implementation with his own "NanoKernel" variant. It's probably the simplest thing that can be considered as Traits. If you need tools, then you'll have to look somewhere else. The Pharo guys might have come up with something over the years. I think only Pharo and some related projects use Traits, but even there the use-cases are extremely limited. > > Unless there is a compelling reason - and subsequent effort to fill out support - I suggest we should remove them. Along with Islands. And Universes. And probably Environments too, since that has stalled without becoming a proper part of the system. Backwards compatibility is the only reason for it to be in the image. In the 4.1 release, it was unloadable. We should check whether it still is. Sadly I have to agree with you on the rest, too. Levente > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: IG: Insert Garbage > > > > From karlramberg at gmail.com Fri Nov 20 19:18:52 2015 From: karlramberg at gmail.com (karl ramberg) Date: Fri Nov 20 19:18:56 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On Fri, Nov 20, 2015 at 7:40 PM, tim Rowledge wrote: > Should we keep Traits? It was a neat idea that I was happy to support but > it got left unfinished. Where are tools to develop & manage Traits? Where > is the usage? > > Unless there is a compelling reason - and subsequent effort to fill out > support - I suggest we should remove them. Along with Islands. And > Universes. And probably Environments too, since that has stalled without > becoming a proper part of the system. > Yes, it's very hard to maintain half implemented stuff, that lacks documentation and direction. And if people really cared about any of these I guess they would be used somehow. And improved over the years. Very little has happened with either of these. If these subsystems are just cruft left over and nobody uses them, it would be good to move them out of trunk. Best, Karl > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: IG: Insert Garbage > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151120/f0673188/attachment.htm From nicolas.cellier.aka.nice at gmail.com Fri Nov 20 20:54:58 2015 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Fri Nov 20 20:55:01 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: Concerning Traits I would keep them in trunk for these reasons: - if the package is not in trunk it will rapidly rot - this package can extend cross compatibility with Pharo a bit further I don't know which package really use them though, but that's my feeling 2015-11-20 20:18 GMT+01:00 karl ramberg : > > > On Fri, Nov 20, 2015 at 7:40 PM, tim Rowledge wrote: > >> Should we keep Traits? It was a neat idea that I was happy to support but >> it got left unfinished. Where are tools to develop & manage Traits? Where >> is the usage? >> >> Unless there is a compelling reason - and subsequent effort to fill out >> support - I suggest we should remove them. Along with Islands. And >> Universes. And probably Environments too, since that has stalled without >> becoming a proper part of the system. >> > > Yes, it's very hard to maintain half implemented stuff, that lacks > documentation and direction. > And if people really cared about any of these I guess they would be used > somehow. And improved over the years. Very little has happened with either > of these. > > If these subsystems are just cruft left over and nobody uses them, it > would be good to move them out of trunk. > > Best, > Karl > >> >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> Strange OpCodes: IG: Insert Garbage >> >> >> >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151120/85d3f90a/attachment.htm From Marcel.Taeumel at hpi.de Fri Nov 20 20:49:24 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 20 21:04:29 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-kfr.1048.mcz In-Reply-To: References: <1448007046887-4862149.post@n4.nabble.com> Message-ID: <1448052564813-4862317.post@n4.nabble.com> Imagine a wizard that wants to indicate progress to the user. Or a questionnaire. :) Like this widget: http://doc.qt.io/qt-4.8/qprogressbar.html Maybe we need a PluggableProgressBar. I understand that the ProgressBarMorph used to be used to show system progress. Nevertheless, such a widget can be valuable for any application. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-kfr-1048-mcz-tp4862058p4862317.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Nov 20 20:51:50 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 20 21:06:57 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: <1448052710850-4862318.post@n4.nabble.com> I like traits. I use them for documenting extension points/interfaces: https://github.com/hpi-swa/vivide/tree/master/repository/Vivide.package/TViObjectView.trait https://github.com/hpi-swa/vivide/tree/master/repository/Vivide.package/TViMemento.trait Please keep them in the image. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Traits-pre-307-mcz-tp4862218p4862318.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Fri Nov 20 22:37:14 2015 From: karlramberg at gmail.com (karl ramberg) Date: Fri Nov 20 22:37:17 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-kfr.1048.mcz In-Reply-To: <1448052564813-4862317.post@n4.nabble.com> References: <1448007046887-4862149.post@n4.nabble.com> <1448052564813-4862317.post@n4.nabble.com> Message-ID: Maybe it should be moved to MorphicExtras-Widgets ? If it's in Morphic-Widgets it's seems like it's the standard progress widget, which it is not . Best, Karl On Fri, Nov 20, 2015 at 9:49 PM, marcel.taeumel wrote: > Imagine a wizard that wants to indicate progress to the user. Or a > questionnaire. :) > > Like this widget: http://doc.qt.io/qt-4.8/qprogressbar.html > > Maybe we need a PluggableProgressBar. I understand that the > ProgressBarMorph > used to be used to show system progress. Nevertheless, such a widget can be > valuable for any application. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Morphic-kfr-1048-mcz-tp4862058p4862317.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151120/3f9109f9/attachment-0001.htm From Das.Linux at gmx.de Fri Nov 20 22:52:32 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Fri Nov 20 22:52:36 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-kfr.1048.mcz In-Reply-To: References: <1448007046887-4862149.post@n4.nabble.com> <1448052564813-4862317.post@n4.nabble.com> Message-ID: <1C815E3E-BE29-4AC6-B0E3-C4E89DC105EF@gmx.de> On 20.11.2015, at 23:37, karl ramberg wrote: > Maybe it should be moved to MorphicExtras-Widgets ? > > If it's in Morphic-Widgets it's seems like it's the standard progress widget, which it is not . It depends on what 'standard progress widget' means. If it is the one I can just use in my mophic application, without anythin fancy, won't that be the 'standard widget'? And the one opened during system progress (using that Progress Notification thingy) be the system progress widget, hence, 'non-standard' (but special) widget? just my 2ct Best regards -Tobias > > Best, > Karl > > > On Fri, Nov 20, 2015 at 9:49 PM, marcel.taeumel wrote: > Imagine a wizard that wants to indicate progress to the user. Or a > questionnaire. :) > > Like this widget: http://doc.qt.io/qt-4.8/qprogressbar.html > > Maybe we need a PluggableProgressBar. I understand that the ProgressBarMorph > used to be used to show system progress. Nevertheless, such a widget can be > valuable for any application. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Morphic-kfr-1048-mcz-tp4862058p4862317.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > > From commits at source.squeak.org Fri Nov 20 22:55:03 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 20 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151120225503.6738.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009181.html Name: Morphic-mt.1049 Ancestors: Morphic-kfr.1048 Fixes a bug with text selection and scrolling text boxes that have no soft line breaks. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009182.html Name: Morphic-mt.1050 Ancestors: Morphic-mt.1049 Another update for indent/outdent after the suggestion from Levente and Chris. Indent only with TAB if multiple lines are selected. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009183.html Name: Morphic-mt.1051 Ancestors: Morphic-mt.1050 Minor fix in text editor history. Do not create separate commands for consecutively typed separators. Allows for search/replace tabs with spaces (or vice versa) in-place. ============================================= From commits at source.squeak.org Fri Nov 20 23:30:37 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Nov 20 23:30:38 2015 Subject: [squeak-dev] The Trunk: WebClient-HTTP-cmm.4.mcz Message-ID: Chris Muller uploaded a new version of WebClient-HTTP to project The Trunk: http://source.squeak.org/trunk/WebClient-HTTP-cmm.4.mcz ==================== Summary ==================== Name: WebClient-HTTP-cmm.4 Author: cmm Time: 20 November 2015, 5:30:31.892 pm UUID: 8f2d17a2-99b0-4216-8808-5d3276f15ae0 Ancestors: WebClient-HTTP-cmm.3 Support the 'args' variable in HTTPSocket class>>#httpGet:args:user:passwd:. This fixes the in-image 'mc history' and origin functions for methods and classes. =============== Diff against WebClient-HTTP-cmm.3 =============== Item was changed: ----- Method: HTTPSocket class>>httpGet:args:user:passwd: (in category '*webclient-http') ----- httpGet: url args: args user: user passwd: passwd "Upload the contents of the stream to a file on the server. WARNING: This method will send a basic auth header proactively. This is necessary to avoid breaking MC and SqueakSource since SS does not return a 401 when accessing a private (global no access) repository." | urlString xhdrs client resp progress | + "Normalize the url and append args" - "Normalize the url" urlString := (Url absoluteFromText: url) asString. + args ifNotNil: [ + urlString := urlString, (self argString: args) + ]. "Some raw extra headers which historically have been added" xhdrs := HTTPProxyCredentials, HTTPBlabEmail. "may be empty" client := WebClient new. client username: user; password: passwd. ^[resp := client httpGet: urlString do:[:req| "HACK: Proactively send a basic auth header. See comment above." req headerAt: 'Authorization' put: 'Basic ', (user, ':', passwd) base64Encoded. "Accept anything" req addHeader: 'Accept' value: '*/*'. "Add the additional headers" (WebUtils readHeadersFrom: xhdrs readStream) do:[:assoc| req addHeader: assoc key value: assoc value]]. progress := [:total :amount| (HTTPProgress new) total: total; amount: amount; signal: 'Downloading...' ]. "Simulate old HTTPSocket return behavior" (resp code between: 200 and: 299) ifTrue:[^(RWBinaryOrTextStream with: (resp contentWithProgress: progress)) reset] ifFalse:[resp asString, resp content]. ] ensure:[client destroy]. ! From eliot.miranda at gmail.com Sat Nov 21 01:51:23 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Nov 21 01:51:24 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: <1448007335359-4862152.post@n4.nabble.com> References: <1447918970442-4861874.post@n4.nabble.com> <1447949104456-4861996.post@n4.nabble.com> <1447949171326-4861997.post@n4.nabble.com> <9544055D-FC5C-4516-B0C5-67377A0819C5@gmail.com> <1448007335359-4862152.post@n4.nabble.com> Message-ID: Hi Marcel, On Fri, Nov 20, 2015 at 12:15 AM, marcel.taeumel wrote: > Hi Eliot, > > works for me in Update 15488. Or what do you mean? :) > You fixed it. Works great. Thanks!! > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4862152.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151120/78c0301b/attachment.htm From cunningham.cb at gmail.com Sat Nov 21 02:48:59 2015 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Sat Nov 21 02:49:01 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: <1448052710850-4862318.post@n4.nabble.com> References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <1448052710850-4862318.post@n4.nabble.com> Message-ID: I used them while building up some COBOL software analysis code http://smalltalkhub.com/#!/~cbc/PetitCobol I've considered using them elsewhere, but the tools deficit is an issue, yes. You CAN work around the issue with the current tools - it's just not as nice as using the rest of the language. --cbc On Fri, Nov 20, 2015 at 12:51 PM, marcel.taeumel wrote: > I like traits. I use them for documenting extension points/interfaces: > > > https://github.com/hpi-swa/vivide/tree/master/repository/Vivide.package/TViObjectView.trait > > https://github.com/hpi-swa/vivide/tree/master/repository/Vivide.package/TViMemento.trait > > Please keep them in the image. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Inbox-Traits-pre-307-mcz-tp4862218p4862318.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151120/ddad5205/attachment.htm From asqueaker at gmail.com Sat Nov 21 07:16:13 2015 From: asqueaker at gmail.com (Chris Muller) Date: Sat Nov 21 07:16:54 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On Fri, Nov 20, 2015 at 12:40 PM, tim Rowledge wrote: > Should we keep Traits? It was a neat idea that I was happy to support but it got left unfinished. Where are tools to develop & manage Traits? Where is the usage? > > Unless there is a compelling reason - and subsequent effort to fill out support - I suggest we should remove them. Along with Islands. And Universes. And probably Environments too, since that has stalled without becoming a proper part of the system. +1. +1. +1 and, +1. Doing the most with the least is the most beautiful and admirable aspect of Squeak. Six reserved words, assignment, and sending messages to objects. That's pretty much it. Those concepts alone form the building blocks of the entire IDE, and still able to push the language with clever hacks like Mixins, Generators, Promises, Futures, WriteBarriers, and Continuations. Traits, Slots, Islands, Environments and Pragmas never convinced me that they deserve to be part of a language this wonderfully sparse. From Marcel.Taeumel at hpi.de Sat Nov 21 08:00:08 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Nov 21 08:15:15 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: <1448092808016-4862350.post@n4.nabble.com> The then trade-off would be to make them unloadable, right? ;) Just like anyone can unload *-Deprecated packages. This simplifies maintenance. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Traits-pre-307-mcz-tp4862218p4862350.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Nov 21 08:08:36 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Nov 21 08:23:45 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447918970442-4861874.post@n4.nabble.com> <1447949104456-4861996.post@n4.nabble.com> <1447949171326-4861997.post@n4.nabble.com> <9544055D-FC5C-4516-B0C5-67377A0819C5@gmail.com> <1448007335359-4862152.post@n4.nabble.com> Message-ID: <1448093316786-4862352.post@n4.nabble.com> You're welcome. :) Best, Marcel -- View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4862352.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From robert.hirschfeld at gmx.net Sat Nov 21 08:30:30 2015 From: robert.hirschfeld at gmx.net (Robert Hirschfeld) Date: Sat Nov 21 08:30:34 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: <51C0BD2D-7710-4997-A771-0B587217A44C@gmx.net> I would like island to stay also. To me, they are one of the most interesting additions to our base over the recent years. (We use them in Archipelago [*]...) Best, Robert [*] http://www.hpi.uni-potsdam.de/swa/publications/media/SecklerHirschfeld_2014_ArchipelagoAResearchPlatformForComponentInteractionInDistributedApplications_AuthorsVersion.pdf > On 20 Nov 2015, at 21:54, Nicolas Cellier wrote: > > Concerning Traits I would keep them in trunk for these reasons: > - if the package is not in trunk it will rapidly rot > - this package can extend cross compatibility with Pharo a bit further > I don't know which package really use them though, but that's my feeling > > 2015-11-20 20:18 GMT+01:00 karl ramberg : > > > On Fri, Nov 20, 2015 at 7:40 PM, tim Rowledge wrote: > Should we keep Traits? It was a neat idea that I was happy to support but it got left unfinished. Where are tools to develop & manage Traits? Where is the usage? > > Unless there is a compelling reason - and subsequent effort to fill out support - I suggest we should remove them. Along with Islands. And Universes. And probably Environments too, since that has stalled without becoming a proper part of the system. > > Yes, it's very hard to maintain half implemented stuff, that lacks documentation and direction. > And if people really cared about any of these I guess they would be used somehow. And improved over the years. Very little has happened with either of these. > > If these subsystems are just cruft left over and nobody uses them, it would be good to move them out of trunk. > > Best, > Karl > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: IG: Insert Garbage > > > > > > > > > -- Robert Hirschfeld hirschfeld@acm.org www.hirschfeld.org From lewis at mail.msen.com Sat Nov 21 16:17:54 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Nov 21 16:17:56 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: <1448092808016-4862350.post@n4.nabble.com> References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <1448092808016-4862350.post@n4.nabble.com> Message-ID: <20151121161754.GA86009@shell.msen.com> On Sat, Nov 21, 2015 at 12:00:08AM -0800, marcel.taeumel wrote: > The then trade-off would be to make them unloadable, right? ;) Just like > anyone can unload *-Deprecated packages. This simplifies maintenance. > Right. Making these packages reloadable is a very good idea. The idea of just deleting them seems rather unhelpful to me. Dave From commits at source.squeak.org Sat Nov 21 17:23:58 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 21 17:24:01 2015 Subject: [squeak-dev] The Trunk: Morphic-cmm.1052.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1052.mcz ==================== Summary ==================== Name: Morphic-cmm.1052 Author: cmm Time: 21 November 2015, 11:23:10.034 am UUID: 984e80fd-459b-467b-b350-bff00bb77b60 Ancestors: Morphic-mt.1051 - Restore the use-case "Replace Expression With A New Expression" (e.g., fix autoEnclose). "Connect Existing Expression To A New Expression" is already present via the Command key. We need to support both of those use cases. =============== Diff against Morphic-mt.1051 =============== Item was changed: ----- Method: TextEditor>>autoEncloseFor: (in category 'typing support') ----- autoEncloseFor: typedChar "Answer whether typeChar was handled by auto-enclosure. Caller should call normalCharacter if not." | openers closers | openers := '([{'. closers := ')]}'. (closers includes: typedChar) ifTrue: [ | pos | self blinkPrevParen: typedChar. ((pos := self indexOfNextNonwhitespaceCharacter) notNil and: [ (paragraph string at: pos) = typedChar ]) ifTrue: [ self moveCursor: [ : position | position + pos - pointBlock stringIndex + 1 ] forward: true select: false. ^ true ] ifFalse: [ ^ false ] ]. + (self class autoEnclose and: [ openers includes: typedChar ]) ifTrue: + [ self + addString: (closers at: (openers indexOf: typedChar)) asString ; + insertTypeAhead ; - (openers includes: typedChar) ifTrue: [ - self - openTypeIn; - addString: typedChar asString; - addString: (closers at: (openers indexOf: typedChar)) asString ; - insertAndCloseTypeIn ; moveCursor: [ : position | position - 1 ] forward: false select: false. + ^ false ]. - ^ true ]. ^ false! 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 + ifTrue: + [ (self autoEncloseFor: typedChar) ifFalse: [ self normalCharacter: aKeyboardEvent ] ] + ifFalse: [ self normalCharacter: aKeyboardEvent ]. + - ifTrue: [((self hasSelection and: [self enclose: aKeyboardEvent]) - or: [self autoEncloseFor: typedChar]) - ifTrue: [^ true]]. - - self normalCharacter: aKeyboardEvent. ^ false! From Marcel.Taeumel at hpi.de Sat Nov 21 17:15:22 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Nov 21 17:30:33 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1052.mcz In-Reply-To: References: Message-ID: <1448126122336-4862409.post@n4.nabble.com> -1 1. This breaks the undo for #autoEnclose, which I had fixed on purpose. 2. This removes a very convenient feature to put brackets around the current selection. Please revert that commit or give a rationale. ;-) Or both. What is that use case "replace expression with new expression"? Just from reading the words, it just worked fine. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-cmm-1052-mcz-tp4862408p4862409.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lewis at mail.msen.com Sat Nov 21 17:40:25 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Nov 21 17:40:28 2015 Subject: [squeak-dev] Input event monitor? Message-ID: <20151121173909.GA222@shell.msen.com> I think that we have (or had?) a utility in the image for displaying input events as they are delivered to the image. I cannot find it in the image, can someone please remind me what it was? Thanks, Dave From karlramberg at gmail.com Sat Nov 21 17:43:00 2015 From: karlramberg at gmail.com (karl ramberg) Date: Sat Nov 21 17:43:02 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: <20151121161754.GA86009@shell.msen.com> References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <1448092808016-4862350.post@n4.nabble.com> <20151121161754.GA86009@shell.msen.com> Message-ID: On Sat, Nov 21, 2015 at 5:17 PM, David T. Lewis wrote: > On Sat, Nov 21, 2015 at 12:00:08AM -0800, marcel.taeumel wrote: > > The then trade-off would be to make them unloadable, right? ;) Just like > > anyone can unload *-Deprecated packages. This simplifies maintenance. > > > > Right. Making these packages reloadable is a very good idea. The idea of > just deleting them seems rather unhelpful to me. > Environments are currently not working and as a consequence blocking use of project/ image segment loading/ unloading. Karl > > Dave > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151121/23543c35/attachment.htm From karlramberg at gmail.com Sat Nov 21 17:48:25 2015 From: karlramberg at gmail.com (karl ramberg) Date: Sat Nov 21 17:48:28 2015 Subject: [squeak-dev] Input event monitor? In-Reply-To: <20151121173909.GA222@shell.msen.com> References: <20151121173909.GA222@shell.msen.com> Message-ID: HandMorph showEvents: true ? Best, Karl On Sat, Nov 21, 2015 at 6:40 PM, David T. Lewis wrote: > I think that we have (or had?) a utility in the image for displaying input > events as they are delivered to the image. I cannot find it in the image, > can someone please remind me what it was? > > Thanks, > Dave > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151121/fc775752/attachment.htm From asqueaker at gmail.com Sat Nov 21 17:49:54 2015 From: asqueaker at gmail.com (Chris Muller) Date: Sat Nov 21 17:50:35 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1052.mcz In-Reply-To: <1448126122336-4862409.post@n4.nabble.com> References: <1448126122336-4862409.post@n4.nabble.com> Message-ID: Hi Marcel, I hope you can find another solution to the Undo. The change that was made to autoEnclose introduced several bugs, whilst nullifying one use case and overloading another. User-expectations about selection-replacement were violated -- we just talked about this for the Tab key. When the user types a regular character into the Editor, they expect that character to be typed. If the user wishes to modify that expected behavior, they may use one of the modifier keys. With your change, I could not replace any selection with a 9, (, [, {, ' or ". , because "Replace Expression With A New Expression" was eliminated, while at the same time "Connect Existing Expression To A New Expression" was overloaded (introduced a second ways to accomplish the same thing). On Sat, Nov 21, 2015 at 11:15 AM, marcel.taeumel wrote: > -1 > > 1. This breaks the undo for #autoEnclose, which I had fixed on purpose. > 2. This removes a very convenient feature to put brackets around the current > selection. > > Please revert that commit or give a rationale. ;-) Or both. > > What is that use case "replace expression with new expression"? Just from > reading the words, it just worked fine. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Morphic-cmm-1052-mcz-tp4862408p4862409.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From karlramberg at gmail.com Sat Nov 21 17:51:23 2015 From: karlramberg at gmail.com (karl ramberg) Date: Sat Nov 21 17:51:25 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-kfr.1048.mcz In-Reply-To: <1C815E3E-BE29-4AC6-B0E3-C4E89DC105EF@gmx.de> References: <1448007046887-4862149.post@n4.nabble.com> <1448052564813-4862317.post@n4.nabble.com> <1C815E3E-BE29-4AC6-B0E3-C4E89DC105EF@gmx.de> Message-ID: ProgressMorph can by definition not be the standard widget since it is not used at all in the image. Best, Karl On Fri, Nov 20, 2015 at 11:52 PM, Tobias Pape wrote: > > On 20.11.2015, at 23:37, karl ramberg wrote: > > > Maybe it should be moved to MorphicExtras-Widgets ? > > > > If it's in Morphic-Widgets it's seems like it's the standard progress > widget, which it is not . > > It depends on what 'standard progress widget' means. > > If it is the one I can just use in my mophic application, without anythin > fancy, won't that be the 'standard widget'? > And the one opened during system progress (using that Progress > Notification thingy) be the system progress widget, hence, 'non-standard' > (but special) widget? > > just my 2ct > > Best regards > -Tobias > > > > > > Best, > > Karl > > > > > > On Fri, Nov 20, 2015 at 9:49 PM, marcel.taeumel > wrote: > > Imagine a wizard that wants to indicate progress to the user. Or a > > questionnaire. :) > > > > Like this widget: http://doc.qt.io/qt-4.8/qprogressbar.html > > > > Maybe we need a PluggableProgressBar. I understand that the > ProgressBarMorph > > used to be used to show system progress. Nevertheless, such a widget can > be > > valuable for any application. > > > > Best, > > Marcel > > > > > > > > -- > > View this message in context: > http://forum.world.st/The-Trunk-Morphic-kfr-1048-mcz-tp4862058p4862317.html > > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151121/9a234d1c/attachment.htm From lewis at mail.msen.com Sat Nov 21 18:19:24 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Nov 21 18:19:27 2015 Subject: [squeak-dev] Input event monitor? In-Reply-To: References: <20151121173909.GA222@shell.msen.com> Message-ID: <20151121181924.GA8024@shell.msen.com> Thank you Karl :-) Dave On Sat, Nov 21, 2015 at 06:48:25PM +0100, karl ramberg wrote: > HandMorph showEvents: true ? > > Best, > Karl > > On Sat, Nov 21, 2015 at 6:40 PM, David T. Lewis wrote: > > > I think that we have (or had?) a utility in the image for displaying input > > events as they are delivered to the image. I cannot find it in the image, > > can someone please remind me what it was? > > > > Thanks, > > Dave > > > > > > > From lewis at mail.msen.com Sat Nov 21 18:23:40 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Nov 21 18:23:43 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1052.mcz In-Reply-To: References: <1448126122336-4862409.post@n4.nabble.com> Message-ID: <20151121182340.GB8024@shell.msen.com> This sounds like the sort of change that might benefit from a couple of days in the inbox. Dave On Sat, Nov 21, 2015 at 11:49:54AM -0600, Chris Muller wrote: > Hi Marcel, I hope you can find another solution to the Undo. The > change that was made to autoEnclose introduced several bugs, whilst > nullifying one use case and overloading another. > > User-expectations about selection-replacement were violated -- we just > talked about this for the Tab key. When the user types a regular > character into the Editor, they expect that character to be typed. If > the user wishes to modify that expected behavior, they may use one of > the modifier keys. > > With your change, I could not replace any selection with a 9, (, [, {, > ' or ". , because "Replace Expression With A New Expression" was > eliminated, while at the same time "Connect Existing Expression To A > New Expression" was overloaded (introduced a second ways to accomplish > the same thing). > > > On Sat, Nov 21, 2015 at 11:15 AM, marcel.taeumel wrote: > > -1 > > > > 1. This breaks the undo for #autoEnclose, which I had fixed on purpose. > > 2. This removes a very convenient feature to put brackets around the current > > selection. > > > > Please revert that commit or give a rationale. ;-) Or both. > > > > What is that use case "replace expression with new expression"? Just from > > reading the words, it just worked fine. > > > > Best, > > Marcel > > > > > > > > -- > > View this message in context: http://forum.world.st/The-Trunk-Morphic-cmm-1052-mcz-tp4862408p4862409.html > > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From lewis at mail.msen.com Sat Nov 21 18:28:28 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Nov 21 18:28:30 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <1448092808016-4862350.post@n4.nabble.com> <20151121161754.GA86009@shell.msen.com> Message-ID: <20151121182828.GA9930@shell.msen.com> On Sat, Nov 21, 2015 at 06:43:00PM +0100, karl ramberg wrote: > On Sat, Nov 21, 2015 at 5:17 PM, David T. Lewis wrote: > > > On Sat, Nov 21, 2015 at 12:00:08AM -0800, marcel.taeumel wrote: > > > The then trade-off would be to make them unloadable, right? ;) Just like > > > anyone can unload *-Deprecated packages. This simplifies maintenance. > > > > > > > Right. Making these packages reloadable is a very good idea. The idea of > > just deleting them seems rather unhelpful to me. > > > > Environments are currently not working and as a consequence blocking use of > project/ image segment loading/ unloading. > I am not sure what is involved, but is it because of this? http://bugs.squeak.org/view.php?id=7814 If so we should try Colin's suggested workaround: http://lists.squeakfoundation.org/pipermail/squeak-dev/2014-September/180018.html Dave From leves at elte.hu Sat Nov 21 18:33:33 2015 From: leves at elte.hu (Levente Uzonyi) Date: Sat Nov 21 18:33:36 2015 Subject: [squeak-dev] Re: Fixing tab behaviour and browser hierarchy appearance In-Reply-To: References: <1447918970442-4861874.post@n4.nabble.com> <1447949104456-4861996.post@n4.nabble.com> <1447949171326-4861997.post@n4.nabble.com> <9544055D-FC5C-4516-B0C5-67377A0819C5@gmail.com> <1448007335359-4862152.post@n4.nabble.com> Message-ID: Almost. :) If there's only on character on a line, then that line won't be indented by Tab. Levente On Fri, 20 Nov 2015, Eliot Miranda wrote: > Hi Marcel, > On Fri, Nov 20, 2015 at 12:15 AM, marcel.taeumel wrote: > Hi Eliot, > > works for me in Update 15488. Or what do you mean? :) > > > You fixed it.? Works great.? Thanks!! > ? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Fixing-tab-behaviour-and-browser-hierarchy-appearance-tp4861769p4862152.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > > > > -- > _,,,^..^,,,_ > best,?Eliot > > From Das.Linux at gmx.de Sat Nov 21 19:26:34 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Sat Nov 21 19:26:38 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-kfr.1048.mcz In-Reply-To: References: <1448007046887-4862149.post@n4.nabble.com> <1448052564813-4862317.post@n4.nabble.com> <1C815E3E-BE29-4AC6-B0E3-C4E89DC105EF@gmx.de> Message-ID: On 21.11.2015, at 18:51, karl ramberg wrote: > ProgressMorph can by definition not be the standard widget since it is not used at all in the image. > But we're talking about Applications that are not in the base image, aren't we? It's like saying, "nobody in the Qt framework uses this widget, remove it", when actually, the users cannot be expected _within_ the framework but rather as users of the framework. Just because our bundled morphic tools/applications have no need for such a progress bar, does not mean that non-base-image applications have neither. Marcel made the case for a simple "questionnaire application" where you would want to indicate progress throughout the questioning process. The system progress bar would be unfit, as it is designed to be used modally (see examples of both progress morphs). Don't get me wrong, I'm not making the case for keeping things (the ProgressMorph in this case) just because, but to make sure we are not deprecating/obsoleting stuff that would count as framework outlet point or "public widgets". :) Best regards -Tobias PS: some other widgets that are unused in the base image JoysickMorph is only in Flaps MorphHierarchy (?) SelectedObjectThumbnail BackgroundMorph BasicButton (And others in the MorphicExtras-Widgets category) > > Best, > Karl > > > On Fri, Nov 20, 2015 at 11:52 PM, Tobias Pape wrote: > > On 20.11.2015, at 23:37, karl ramberg wrote: > > > Maybe it should be moved to MorphicExtras-Widgets ? > > > > If it's in Morphic-Widgets it's seems like it's the standard progress widget, which it is not . > > It depends on what 'standard progress widget' means. > > If it is the one I can just use in my mophic application, without anythin fancy, won't that be the 'standard widget'? > And the one opened during system progress (using that Progress Notification thingy) be the system progress widget, hence, 'non-standard' (but special) widget? > > just my 2ct > > Best regards > -Tobias > > > > > > Best, > > Karl > > > > > > On Fri, Nov 20, 2015 at 9:49 PM, marcel.taeumel wrote: > > Imagine a wizard that wants to indicate progress to the user. Or a > > questionnaire. :) > > > > Like this widget: http://doc.qt.io/qt-4.8/qprogressbar.html > > > > Maybe we need a PluggableProgressBar. I understand that the ProgressBarMorph > > used to be used to show system progress. Nevertheless, such a widget can be > > valuable for any application. > > > > Best, > > Marcel > > > > > > > > -- > > View this message in context: http://forum.world.st/The-Trunk-Morphic-kfr-1048-mcz-tp4862058p4862317.html > > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > > > > > > > > > From karlramberg at gmail.com Sat Nov 21 21:32:03 2015 From: karlramberg at gmail.com (karl ramberg) Date: Sat Nov 21 21:32:04 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: <20151121182828.GA9930@shell.msen.com> References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <1448092808016-4862350.post@n4.nabble.com> <20151121161754.GA86009@shell.msen.com> <20151121182828.GA9930@shell.msen.com> Message-ID: The Binding issue is fixed by this. I'll commit that. The saved project can not be loaded though,,, Best, Karl On Sat, Nov 21, 2015 at 7:28 PM, David T. Lewis wrote: > On Sat, Nov 21, 2015 at 06:43:00PM +0100, karl ramberg wrote: > > On Sat, Nov 21, 2015 at 5:17 PM, David T. Lewis > wrote: > > > > > On Sat, Nov 21, 2015 at 12:00:08AM -0800, marcel.taeumel wrote: > > > > The then trade-off would be to make them unloadable, right? ;) Just > like > > > > anyone can unload *-Deprecated packages. This simplifies maintenance. > > > > > > > > > > Right. Making these packages reloadable is a very good idea. The idea > of > > > just deleting them seems rather unhelpful to me. > > > > > > > Environments are currently not working and as a consequence blocking use > of > > project/ image segment loading/ unloading. > > > > I am not sure what is involved, but is it because of this? > > http://bugs.squeak.org/view.php?id=7814 > > If so we should try Colin's suggested workaround: > > > http://lists.squeakfoundation.org/pipermail/squeak-dev/2014-September/180018.html > > Dave > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151121/52a82d0e/attachment.htm From commits at source.squeak.org Sat Nov 21 21:33:56 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 21 21:33:58 2015 Subject: [squeak-dev] The Trunk: Environments-kfr.59.mcz Message-ID: Karl Ramberg uploaded a new version of Environments to project The Trunk: http://source.squeak.org/trunk/Environments-kfr.59.mcz ==================== Summary ==================== Name: Environments-kfr.59 Author: kfr Time: 21 November 2015, 10:33:48.689 pm UUID: 28f20424-19f0-4333-90c3-7fe53fbd51b5 Ancestors: Environments-eem.58 Colin's suggested workaround for Bindings http://lists.squeakfoundation.org/pipermail/squeak-dev/2014-September/180018.html =============== Diff against Environments-eem.58 =============== Item was changed: ----- Method: Binding>>objectForDataStream: (in category 'as yet unclassified') ----- + objectForDataStream: refStrm + | dp | + "I am about to be written on an object file. If I am a known global, write a proxy that will hook up with the same resource in the destination system." + self flag: #environments. + + ^ (Smalltalk globals associationAt: key ifAbsent: [nil]) == self + ifTrue: [dp := DiskProxy global: #Smalltalk selector: #associationOrUndeclaredAt: + args: (Array with: key). + refStrm replace: self with: dp. + dp] + ifFalse: [self]! - objectForDataStream: refStream - "It's not yet clear how serialization should work in the presence of environments" - - self shouldBeImplemented.! From commits at source.squeak.org Sat Nov 21 21:36:48 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 21 21:36:50 2015 Subject: [squeak-dev] The Trunk: MorphicExtras-kfr.168.mcz Message-ID: Karl Ramberg uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-kfr.168.mcz ==================== Summary ==================== Name: MorphicExtras-kfr.168 Author: kfr Time: 21 November 2015, 10:36:27.418 pm UUID: 99d2fb92-d0ff-4175-9ca5-73d90053a5a1 Ancestors: MorphicExtras-kfr.167 Moved from MorphicExtras-Obsolete to Morphic-Extras-Widgets =============== Diff against MorphicExtras-kfr.167 =============== Item was changed: BorderedMorph subclass: #ProgressBarMorph instanceVariableNames: 'value progressColor lastValue' classVariableNames: '' poolDictionaries: '' + category: 'MorphicExtras-Widgets'! - category: 'MorphicExtras-Obsolete'! Item was changed: RectangleMorph subclass: #ProgressMorph instanceVariableNames: 'labelMorph subLabelMorph progress' classVariableNames: '' poolDictionaries: '' + category: 'MorphicExtras-Widgets'! - category: 'MorphicExtras-Obsolete'! From karlramberg at gmail.com Sat Nov 21 21:37:27 2015 From: karlramberg at gmail.com (karl ramberg) Date: Sat Nov 21 21:37:28 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-kfr.1048.mcz In-Reply-To: References: <1448007046887-4862149.post@n4.nabble.com> <1448052564813-4862317.post@n4.nabble.com> <1C815E3E-BE29-4AC6-B0E3-C4E89DC105EF@gmx.de> Message-ID: I moved them to MorphicExtras-Widgets Best, Karl On Sat, Nov 21, 2015 at 8:26 PM, Tobias Pape wrote: > > On 21.11.2015, at 18:51, karl ramberg wrote: > > > ProgressMorph can by definition not be the standard widget since it is > not used at all in the image. > > > > But we're talking about Applications that are not in the base image, > aren't we? > It's like saying, "nobody in the Qt framework uses this widget, remove > it", when > actually, the users cannot be expected _within_ the framework but rather > as users of > the framework. Just because our bundled morphic tools/applications have no > need > for such a progress bar, does not mean that non-base-image applications > have neither. > > Marcel made the case for a simple "questionnaire application" where you > would want > to indicate progress throughout the questioning process. The system > progress bar > would be unfit, as it is designed to be used modally (see examples of both > progress morphs). > > Don't get me wrong, I'm not making the case for keeping things (the > ProgressMorph in this case) > just because, but to make sure we are not deprecating/obsoleting stuff > that would > count as framework outlet point or "public widgets". > > > :) > > Best regards > -Tobias > > PS: some other widgets that are unused in the base image > JoysickMorph is only in Flaps > MorphHierarchy (?) > SelectedObjectThumbnail > BackgroundMorph > BasicButton > (And others in the MorphicExtras-Widgets category) > > > > Best, > > Karl > > > > > > On Fri, Nov 20, 2015 at 11:52 PM, Tobias Pape wrote: > > > > On 20.11.2015, at 23:37, karl ramberg wrote: > > > > > Maybe it should be moved to MorphicExtras-Widgets ? > > > > > > If it's in Morphic-Widgets it's seems like it's the standard progress > widget, which it is not . > > > > It depends on what 'standard progress widget' means. > > > > If it is the one I can just use in my mophic application, without > anythin fancy, won't that be the 'standard widget'? > > And the one opened during system progress (using that Progress > Notification thingy) be the system progress widget, hence, 'non-standard' > (but special) widget? > > > > just my 2ct > > > > Best regards > > -Tobias > > > > > > > > > > Best, > > > Karl > > > > > > > > > On Fri, Nov 20, 2015 at 9:49 PM, marcel.taeumel > wrote: > > > Imagine a wizard that wants to indicate progress to the user. Or a > > > questionnaire. :) > > > > > > Like this widget: http://doc.qt.io/qt-4.8/qprogressbar.html > > > > > > Maybe we need a PluggableProgressBar. I understand that the > ProgressBarMorph > > > used to be used to show system progress. Nevertheless, such a widget > can be > > > valuable for any application. > > > > > > Best, > > > Marcel > > > > > > > > > > > > -- > > > View this message in context: > http://forum.world.st/The-Trunk-Morphic-kfr-1048-mcz-tp4862058p4862317.html > > > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > > > > > > > > > > > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151121/e68a4971/attachment.htm From commits at source.squeak.org Sat Nov 21 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 21 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151121225502.25903.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009184.html Name: WebClient-HTTP-cmm.4 Ancestors: WebClient-HTTP-cmm.3 Support the 'args' variable in HTTPSocket class>>#httpGet:args:user:passwd:. This fixes the in-image 'mc history' and origin functions for methods and classes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009185.html Name: Morphic-cmm.1052 Ancestors: Morphic-mt.1051 - Restore the use-case "Replace Expression With A New Expression" (e.g., fix autoEnclose). "Connect Existing Expression To A New Expression" is already present via the Command key. We need to support both of those use cases. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009186.html Name: Environments-kfr.59 Ancestors: Environments-eem.58 Colin's suggested workaround for Bindings http://lists.squeakfoundation.org/pipermail/squeak-dev/2014-September/180018.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009187.html Name: MorphicExtras-kfr.168 Ancestors: MorphicExtras-kfr.167 Moved from MorphicExtras-Obsolete to Morphic-Extras-Widgets ============================================= From commits at source.squeak.org Sat Nov 21 23:20:39 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 21 23:20:42 2015 Subject: [squeak-dev] The Trunk: Compiler-eem.317.mcz Message-ID: Eliot Miranda uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-eem.317.mcz ==================== Summary ==================== Name: Compiler-eem.317 Author: eem Time: 21 November 2015, 3:20:26.817 pm UUID: 956bcba6-bf0a-463c-aaef-90903732fb85 Ancestors: Compiler-nice.316 Small improvement to compiler performance. There is no need to scan for an assignment to the limit in a to:[by:]do: when the to: argument is known to be an argument, because arguments are not written to. =============== Diff against Compiler-nice.316 =============== Item was changed: ----- Method: MessageNode>>transformToDo: (in category 'macro transformations') ----- transformToDo: encoder " var := rcvr. L1: [var <= arg1] Bfp(L2) [block body. var := var + inc] Jmp(L1) L2: " + | limit increment block initStmt test incStmt limitInit blockVar myRange blockRange | - | limit increment block initStmt test incStmt limitInit blockVar myRange blockRange limitIsAssignedTo | block := arguments last. "First check for valid arguments" (block notNil and: [block isBlockNode and: [block numberOfArguments = 1 and: [block firstArgument isVariableReference "As with debugger remote vars"]]]) ifFalse: [^false]. arguments size = 3 ifTrue: [increment := arguments at: 2. (increment isConstantNumber and: [increment literalValue ~= 0]) ifFalse: [^false]] ifFalse: [increment := encoder encodeLiteral: 1]. (limit := arguments at: 1) isVariableReference ifTrue: + [| shouldScanForAssignment | + shouldScanForAssignment := limit isArg not + or: [limit isBlockArg and: [Scanner allowBlockArgumentAssignment]]. + shouldScanForAssignment ifTrue: + [block nodesDo: + [:node| + (node isAssignmentNode and: [node variable = limit]) ifTrue: + [^false]]]]. - [limitIsAssignedTo := false. - block nodesDo: - [:node| - (node isAssignmentNode and: [node variable = limit]) ifTrue: - [limitIsAssignedTo := true]]. - limitIsAssignedTo ifTrue: - [^false]]. arguments size < 3 ifTrue: "transform to full form" [selector := SelectorNode new key: #to:by:do: code: #macro]. "Now generate auxiliary structures" myRange := encoder rawSourceRanges at: self ifAbsent: [1 to: 0]. blockRange := encoder rawSourceRanges at: block ifAbsent: [1 to: 0]. blockVar := block firstArgument. initStmt := AssignmentNode new variable: blockVar value: receiver. + (limit isVariableReference or: [limit isConstantNumber]) - limit isVariableReference | limit isConstantNumber ifTrue: [limitInit := nil] ifFalse: "Need to store limit in a var" [limit := encoder bindBlockArg: blockVar key, 'LimiT' within: block. limit scope: -2. "Already done parsing block; flag so it won't print" block addArgument: limit. limitInit := AssignmentNode new variable: limit value: arguments first]. test := MessageNode new receiver: blockVar selector: (increment key > 0 ifTrue: [#<=] ifFalse: [#>=]) arguments: {limit} precedence: precedence from: encoder sourceRange: (myRange first to: blockRange first). incStmt := AssignmentNode new variable: blockVar value: (MessageNode new receiver: blockVar selector: #+ arguments: {increment} precedence: precedence from: encoder sourceRange: (myRange last to: (myRange last max: blockRange last))) from: encoder sourceRange: (myRange last to: (myRange last max: blockRange last)). arguments := {limit. increment. block. initStmt. test. incStmt. limitInit}. block noteOptimizedIn: self. ^true! From commits at source.squeak.org Sun Nov 22 13:45:55 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Nov 22 13:45:58 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1053.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1053.mcz ==================== Summary ==================== Name: Morphic-mt.1053 Author: mt Time: 22 November 2015, 2:45:14.467 pm UUID: a55f6a5e-b5c9-4e64-9ffa-9cac6cbc8e54 Ancestors: Morphic-cmm.1052 Fixes undo for autoEnclose again. =============== Diff against Morphic-cmm.1052 =============== Item was changed: ----- Method: TextEditor>>autoEncloseFor: (in category 'typing support') ----- autoEncloseFor: typedChar "Answer whether typeChar was handled by auto-enclosure. Caller should call normalCharacter if not." | openers closers | openers := '([{'. closers := ')]}'. (closers includes: typedChar) ifTrue: [ | pos | self blinkPrevParen: typedChar. ((pos := self indexOfNextNonwhitespaceCharacter) notNil and: [ (paragraph string at: pos) = typedChar ]) ifTrue: [ self moveCursor: [ : position | position + pos - pointBlock stringIndex + 1 ] forward: true select: false. ^ true ] ifFalse: [ ^ false ] ]. + (openers includes: typedChar) ifTrue: - (self class autoEnclose and: [ openers includes: typedChar ]) ifTrue: [ self + openTypeIn; + addString: typedChar asString; + addString: (closers at: (openers indexOf: typedChar)) asString; + insertAndCloseTypeIn; - addString: (closers at: (openers indexOf: typedChar)) asString ; - insertTypeAhead ; moveCursor: [ : position | position - 1 ] forward: false select: false. + ^ true ]. - ^ false ]. ^ false! 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. - self class autoEnclose - ifTrue: - [ (self autoEncloseFor: typedChar) ifFalse: [ self normalCharacter: aKeyboardEvent ] ] - ifFalse: [ self normalCharacter: aKeyboardEvent ]. - ^ false! From Marcel.Taeumel at hpi.de Sun Nov 22 13:40:51 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Nov 22 13:56:08 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1052.mcz In-Reply-To: References: <1448126122336-4862409.post@n4.nabble.com> Message-ID: <1448199651305-4862474.post@n4.nabble.com> Hi Chris, I fixed undo again: http://forum.world.st/The-Trunk-Morphic-mt-1053-mcz-td4862470.html Now we can continue this discussion. 1) I understand that that magical enclosing selection violates that "replace selection with new expression" principle. We might consider adding a preference for that because I just cannot recall those hidden enclose keyboard shotcuts. Having brackets enclosing selections this feels much more convenient. Keeps the flow, you know. ;-) For now, it's gone again. What a pity. 2) Why did you break the undo for autoEnclose in the first place? Was it a slip? Maybe I misunderstood "connect existing expression to a new expression" but the way TextEditor >> #autoEncloseFor: is now (with undo working again) it does not seem to harm anything. You must not modify the text cursor while just typing in (or calling #addString:). See #closeTypeIn for explanation. Btw: The (old/mini) undo in 5.0 was also broken for autoEnclose. That additional closing char did not disappear. --- However, it works now. Does this cover it? Introducing additional ways to do the same is very common in user interface design. It's not just about novices and experts. For example, there is CMD+V and the context menu with "Paste it". To ways to achieve the same thing. :) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-cmm-1052-mcz-tp4862408p4862474.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Sun Nov 22 18:27:29 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Nov 22 18:27:31 2015 Subject: [squeak-dev] ctrl-J and type in Message-ID: Hi Marcel, I like the new Ctrl-J. But there's one feature that was lost. It used to be that one could type over some string and then hit Ctrl-J to repeat the dir on the next occurrence of the string. For examplee, consider the following: [JumpZero] -> [opcode caseOf: { [CmpRR] -> [branch setOpcode: BrEqRR andOperandsFrom: self. branch operands at: 3 put: (operands at: 1). opcode := Label]. }]. [JumpNonZero]-> [opcode caseOf: { [CmpRR] -> [branch setOpcode: BrNeRR andOperandsFrom: self. branch operands at: 3 put: (operands at: 1). opcode := Label]. }]. [JumpLongZero]-> [opcode caseOf: { [CmpRR] -> [branch setOpcode: BrNeRR andOperandsFrom: self. "skip the following long branch" branch operands at: 3 put: self jumpLongByteSize. opcode := JumpLong]. }]. [JumpLongNonZero]-> [opcode caseOf: { [CmpRR] -> [branch setOpcode: BrEqRR andOperandsFrom: self. "skip the following long branch" branch operands at: 3 put: self jumpLongByteSize. opcode := JumpLong]. opcode := Label]. }]. where it turns out branch operands at: 3 should read branch operands at: 2. So it used to be that one could select the first "at: 3", type "at: 2", and then hit Ctrl-J to edit the next, Ctrl-J to edit the one after that and so on. I think it's just making sure that the selection that is replaced by Ctrl-J becomes the new search string for copy/replace. _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151122/fcf89df5/attachment.htm From commits at source.squeak.org Sun Nov 22 18:31:11 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Nov 22 18:31:12 2015 Subject: [squeak-dev] The Trunk: HelpSystem-Tests-kfr.17.mcz Message-ID: Karl Ramberg uploaded a new version of HelpSystem-Tests to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Tests-kfr.17.mcz ==================== Summary ==================== Name: HelpSystem-Tests-kfr.17 Author: kfr Time: 22 November 2015, 7:30:41.491 pm UUID: 682515b0-b94a-4681-9a8a-6269e7a9f09b Ancestors: HelpSystem-Tests-mt.16 Fixed a couple of broken tests =============== Diff against HelpSystem-Tests-mt.16 =============== Item was added: + ----- Method: AdvancedHelpBrowserDummy>>model (in category 'testing') ----- + model + ^self! Item was added: + ----- Method: AdvancedHelpBrowserDummy>>showFirstTopic (in category 'testing') ----- + showFirstTopic + ^rootTopic! From commits at source.squeak.org Sun Nov 22 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Nov 22 22:55:03 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151122225502.16119.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009188.html Name: Compiler-eem.317 Ancestors: Compiler-nice.316 Small improvement to compiler performance. There is no need to scan for an assignment to the limit in a to:[by:]do: when the to: argument is known to be an argument, because arguments are not written to. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009189.html Name: Morphic-mt.1053 Ancestors: Morphic-cmm.1052 Fixes undo for autoEnclose again. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009190.html Name: HelpSystem-Tests-kfr.17 Ancestors: HelpSystem-Tests-mt.16 Fixed a couple of broken tests ============================================= From commits at source.squeak.org Sun Nov 22 23:08:56 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Nov 22 23:08:57 2015 Subject: [squeak-dev] The Inbox: Sound-tpr.45.mcz Message-ID: tim Rowledge uploaded a new version of Sound to project The Inbox: http://source.squeak.org/inbox/Sound-tpr.45.mcz ==================== Summary ==================== Name: Sound-tpr.45 Author: tpr Time: 22 November 2015, 3:08:45.33 pm UUID: 47fd8f98-1a2b-4724-95cc-6f1b34b9ff19 Ancestors: Sound-tpr.44 Attempting to start the SoundRecorder on hardwarewith no sound input (ie a RaspberryPi) fails and there is no attempt to handle it. Tacky. Remove the prim failure from primStartRecording... and raise a Warning instead from startRecording. The main recorder process is perfectly happy to run and do nothing. In the Scratchg code I can catch the exception and inform the users rather more politely than by opening a debugger. =============== Diff against Sound-topa.43 =============== Item was added: + ----- Method: Envelope>>computeSustainValueAtMSecs: (in category 'applying') ----- + computeSustainValueAtMSecs: mSecs + "Return the value of this envelope at the given number of milliseconds from its onset. Return zero for times outside the time range of this envelope." + "Note: Unlike the private method incrementalComputeValueAtMSecs:, this method does is not increment. Thus it is slower, but it doesn't depend on being called sequentially at fixed time intervals. + Note: this is the same as computeValueAtMSecs: apart from removing the first section that requires loopEndMSecs t obe nil; this appears to cause a problem when a sound in playing and is stopped whilst the #computeSlopeAtMSecs: method is run inside the SoundPlayer loop" + + | t i | + mSecs < 0 ifTrue: [^ 0.0]. + + " prevent this bit running so that we don't have to fudge loopEndMSecs to nil in #sustainEnd: + ((loopEndMSecs ~~ nil) and: [mSecs >= loopEndMSecs]) ifTrue: [ ""decay phase"" + t := (points at: loopEndIndex) x + (mSecs - loopEndMSecs). + i := self indexOfPointAfterMSecs: t startingAt: loopEndIndex. + i == nil ifTrue: [^ 0.0]. ""past end"" + ^ (self interpolate: t between: (points at: i - 1) and: (points at: i)) * decayScale]. + " + mSecs < loopStartMSecs ifTrue: [ "attack phase" + i := self indexOfPointAfterMSecs: mSecs startingAt: 1. + i = 1 ifTrue: [^ (points at: 1) y * scale]. + ^ self interpolate: mSecs between: (points at: i - 1) and: (points at: i)]. + + "sustain phase" + loopMSecs = 0 ifTrue: [^ (points at: loopEndIndex) y * scale]. "looping on a single point" + t := loopStartMSecs + ((mSecs - loopStartMSecs) \\ loopMSecs). + i := self indexOfPointAfterMSecs: t startingAt: loopStartIndex. + + ^ self interpolate: t between: (points at: i - 1) and: (points at: i) + ! Item was changed: ----- Method: Envelope>>sustainEnd: (in category 'applying') ----- sustainEnd: mSecs "Set the ending time of the sustain phase of this envelope; the decay phase will start this point. Typically derived from a note's duration." "Details: to avoid a sharp transient, the decay phase is scaled so that the beginning of the decay matches the envelope's instantaneous value when the decay phase starts." | vIfSustaining firstVOfDecay | + loopEndMSecs := mSecs. "no longer set to nil in order to pretend to be sustaining" - loopEndMSecs := nil. "pretend to be sustaining" decayScale := 1.0. nextRecomputeTime := 0. + vIfSustaining := self computeSustainValueAtMSecs: mSecs. "get value at end of sustain phase" + "loopEndMSecs := mSecs. not required any more" - vIfSustaining := self computeValueAtMSecs: mSecs. "get value at end of sustain phase" - loopEndMSecs := mSecs. firstVOfDecay := (points at: loopEndIndex) y * scale. firstVOfDecay = 0.0 ifTrue: [decayScale := 1.0] ifFalse: [decayScale := vIfSustaining / firstVOfDecay]. ! Item was changed: ----- Method: SimpleMIDIPort>>midiCmd:channel:byte: (in category 'output') ----- midiCmd: cmd channel: channel byte: dataByte "Immediately output the given MIDI command with the given channel and argument byte to this MIDI port. Assume that the port is open." accessSema critical: [ + self primMIDIWriteNoErrorPort: portNumber - self primMIDIWritePort: portNumber from: (ByteArray with: (cmd bitOr: channel) with: dataByte) at: 0]. ! Item was changed: ----- Method: SimpleMIDIPort>>midiCmd:channel:byte:byte: (in category 'output') ----- midiCmd: cmd channel: channel byte: dataByte1 byte: dataByte2 "Immediately output the given MIDI command with the given channel and argument bytes to this MIDI port. Assume that the port is open." accessSema critical: [ + self primMIDIWriteNoErrorPort: portNumber - self primMIDIWritePort: portNumber from: (ByteArray with: (cmd bitOr: channel) with: dataByte1 with: dataByte2) at: 0]. ! Item was changed: ----- Method: SoundRecorder>>primStartRecordingDesiredSampleRate:stereo:semaIndex: (in category 'primitives') ----- primStartRecordingDesiredSampleRate: samplesPerSec stereo: stereoFlag semaIndex: anInteger + "Start sound recording with the given stereo setting. Use a sampling rate as close to the desired rate as the underlying platform will support. If the given semaphore index is > 0, it is taken to be the index of a Semaphore in the external objects array to be signalled every time a recording buffer is filled. + We do *not* raise a primitiveFailed error here since this prim is called insdied a critical blcok and that often makes things painful. The only really likely case where this prim fails is a linux machine with no sound input hardware (a Raspberry Pi for example). See the startRecording method for how the failure is handled" - "Start sound recording with the given stereo setting. Use a sampling rate as close to the desired rate as the underlying platform will support. If the given semaphore index is > 0, it is taken to be the index of a Semaphore in the external objects array to be signalled every time a recording buffer is filled." + "self primitiveFailed" - self primitiveFailed ! Item was changed: ----- Method: SoundRecorder>>startRecording (in category 'recording controls') ----- startRecording + "Turn on the sound input driver and start the recording process. Initially, recording is paused. + If the primStartRecordingDesiredSampleRate:... fails it almost certainly means we have no usable + sound input device. Rather than having the prim raise a failure error we let it quietly do nothing + (since I hate trying to debug errors inside a critical block) and check the actual sampling rate later. + If the sampling rate is 0 we know the startup failed and raise an application level Signal to let any + user code know about the problem. + You might think we should also use the stopRecording message to close things down cleanly but + that simply results in astorm of attempts to start recording so it is simpler to let it be deluded. An + attempts to start recording will repeat the test and thereby handle any plug-in hardware etc." - "Turn of the sound input driver and start the recording process. Initially, recording is paused." recordLevel ifNil: [recordLevel := 0.5]. "lazy initialization" CanRecordWhilePlaying ifFalse: [SoundPlayer shutDown]. recordProcess ifNotNil: [self stopRecording]. paused := true. meteringBuffer := SoundBuffer newMonoSampleCount: 1024. meterLevel := 0. self allocateBuffer. Smalltalk newExternalSemaphoreDo: [ :semaphore :index | bufferAvailableSema := semaphore. self primStartRecordingDesiredSampleRate: samplingRate asInteger stereo: stereo semaIndex: index ]. RecorderActive := true. samplingRate := self primGetActualRecordingSampleRate. + samplingRate = 0 ifTrue: [ Warning signal: 'SoundRecorder: unable to connect to sound input device']. self primSetRecordLevel: (1000.0 * recordLevel) asInteger. recordProcess := [self recordLoop] newProcess. recordProcess priority: Processor userInterruptPriority. recordProcess resume! From tim at rowledge.org Sun Nov 22 23:14:50 2015 From: tim at rowledge.org (tim Rowledge) Date: Sun Nov 22 23:14:54 2015 Subject: [squeak-dev] The Inbox: Sound-tpr.45.mcz In-Reply-To: <201511222309.tAMN8xGR022583@mail8c0.megamailservers.com> References: <201511222309.tAMN8xGR022583@mail8c0.megamailservers.com> Message-ID: <8C400723-E1DB-4310-A8B0-A69FF857C592@rowledge.org> > On 22-11-2015, at 11:08 PM, commits@source.squeak.org wrote: > > tim Rowledge uploaded a new version of Sound to project The Inbox: > http://source.squeak.org/inbox/Sound-tpr.45.mcz > > ==================== Summary ==================== > > Name: Sound-tpr.45 > Author: tpr > Time: 22 November 2015, 3:08:45.33 pm > UUID: 47fd8f98-1a2b-4724-95cc-6f1b34b9ff19 > Ancestors: Sound-tpr.44 > > Attempting to start the SoundRecorder on hardwarewith no sound input (ie a RaspberryPi) fails and there is no attempt to handle it. Tacky. > > Remove the prim failure from primStartRecording... and raise a Warning instead from startRecording. The main recorder process is perfectly happy to run and do nothing. In the Scratchg code I can catch the exception and inform the users rather more politely than by opening a debugger. A couple of points about this a) dammit, the save dialogue DID NOT SHOW computeSustainValueAtMSecs, sustainEnd, midiCmd:channel:byte: , midiCmd:channel:byte:byte: as being changed. They should not have been included. b) This is in the inbox because someone may have a better idea than using a generic Warning. I don?t mind as long as I know so I can do the right thing in the Scratch code. c) I can?t test the results of this change on Windows, nor on a linux box that *does* have sound input hardware to connect to - nor a Mac that doesn?t. d) assuming it satisfies everyone we would want to patch the generic RecordingControlsMorph in a similar manner to the Scratch recorder morph. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Oxymorons: New classic From commits at source.squeak.org Mon Nov 23 04:38:53 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 23 04:38:55 2015 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-cmm.34.mcz Message-ID: Chris Muller uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-cmm.34.mcz ==================== Summary ==================== Name: Help-Squeak-Project-cmm.34 Author: cmm Time: 22 November 2015, 10:38:43.067 pm UUID: 0187686e-7a36-466f-8c00-aae97ddb6ce3 Ancestors: Help-Squeak-Project-mt.33 - Document recently added Redo function. - Clarify and correct the toggle enclosure function. =============== Diff against Help-Squeak-Project-mt.33 =============== Item was changed: ----- Method: SqueakTutorialsCommandKey class>>commandKeyMappings (in category 'as yet unclassified') ----- commandKeyMappings "This method was automatically generated. Edit it using:" "SqueakTutorialsCommandKey edit: #commandKeyMappings" ^HelpTopic title: 'Command Key Mappings' contents: 'Lower-case command keys (use with Cmd key on Mac and Alt key on other platforms) a Select all b Browse it (selection is a class name or cursor is over a class-list or message-list) c Copy selection d Do it (selection is a valid expression) e Exchange selection with prior selection f Find text with a dialog g Find the current selection again j Repeat the last selection replacement i Inspect it k Set font l Cancel text edit m Implementors of it n Senders of it o Spawn current method p Print it (selection is a valid expression) q Query symbol (toggle all possible completion for a given prefix) s Save (i.e. accept) t Finds a Transcript (when cursor is over the desktop) u Toggle alignment v Paste w Select/Delete preceding word (over text); Close-window (over morphic desktop) x Cut selection y Swap characters z Undo Note: for Do it, Senders of it, etc., a null selection will be expanded to a word or to the current line in an attempt to do what you want. Also note that Senders/Implementors of it will find the outermost keyword selector in a large selection, as when you have selected a bracketed expression or an entire line. Finally note that the same cmd-m and cmd-n (and cmd-v for versions) work in the message pane of most browsers. Upper-case command keys (use with Shift-Cmd, or Ctrl on Mac or Shift-Alt on other platforms; sometimes Ctrl works too) A Advance argument B Browse it in this same browser (in System browsers only) C Compare the selected text to the clipboard contents D Debug-It E Method strings containing it F Insert ''ifFalse:'' G fileIn from it (a file name) H cursor TopHome: I Inspect via Object Explorer J Again many (apply the previous text command repeatedly until the end of the text) K Set style L Outdent (move selection one tab-stop left) M Select current type-in N References to it (selection is a class name, or cursor is over a class-list or message-list) O Open single-message browser (in message lists) P Make project link R Indent (move selection one tab-stap right) S Search T Insert ''ifTrue:'' U Convert linefeeds to carriage returns in selection V Paste author''s initials W Selectors containing it (in text); show-world-menu (when issued with cursor over desktop) X Force selection to lowercase Y Force selection to uppercase + Z Redo Other special keys Backspace Backward delete character Shift-Bksp Backward select or delete word Del Forward delete character Shift-Del Forward delete word Esc Pop up the context menu Shift+Esc Pop up the World Menu Cmd+Esc Close the active window Ctrl+Esc Present a list of open windows \ Send the active window to the back Cursor keys left, right, up, down Move cursor left, right, up or down Ctrl-left Move cursor left one word Ctrl-right Move cursor right one word Home Move cursor to begin of line or begin of text End Move cursor to end of line or end of text PgUp, Ctrl-up Move cursor up one page PgDown, Ctrl-Dn Move cursor down one page Note all these keys can be used together with Shift to define or enlarge the selection. You cannot however shrink that selection again, as in some other systems. Other Cmd-key combinations (not available on all platforms) Return Insert return followed by as many tabs as the previous line (with a further adjustment for additional brackets in that line) Space Select the current word as with double clicking Enclose the selection in a kind of bracket. Each is a toggle. (not available on all platforms) Ctrl-( Toggle enclosure within parentheses + Cmd-[ Toggle enclosure within brackets + Crtl-{ Toggle enclosure within curly braces - Ctrl-[ Toggle enclosure within brackets - Crtl-{ Toggle enclosre within curly braces - Ctrl-< Toggle enclosre within less-than / greater-than (HTML) Ctrl-'' Toggle enclosure within double-quotes + Cmd-'' Toggle enclosure within single-quotes - Ctrl-'' Toggle encllosure within single-quotes + Note also that you can double-click just inside any of the above delimiters, or at the beginning or end of a line, to select the text enclosed. - Note also that you can double-click just inside any of the above delimiters, - or at the beginning or end of a line, to select the text enclosed. Text Emphasis (not available on all platforms) Cmd-1 type the first method argument Cmd-2 type the second method argument Cmd-3 type the third method argument Cmd-4 type the fourth method argument Cmd-5 for future use Cmd-6 color, action-on-click, link to class comment, link to method, url Brings up a menu. To remove these properties, select more than the active part and then use command-0. Cmd-7 bold Cmd-8 italic Cmd-9 narrow (same as negative kern) Cmd-0 plain text (resets all emphasis) Cmd-- underlined (toggles it) Cmd-= struck out (toggles it) Shift-Cmd-- (aka :=) negative kern (letters 1 pixel closer) Shift-Cmd-+ positive kern (letters 1 pixel larger spread) Docking Bar Ctrl- opens the n-th (where n is between 0 and 7) menu if such exists, otherwise it moves the keyboard focus to the Search Bar. Currently this means: + Ctrl-0 Activates Search Bar or Scratch Pad - Ctrl-0 Activates Search Bar Ctrl-1 Squeak menu Ctrl-2 Projects menu Ctrl-3 Tools menu Ctrl-4 Apps menu Ctrl-5 Extras menu Ctrl-6 Windows menu Ctrl-7 Help menu !!' readStream nextChunkText! From Marcel.Taeumel at hpi.de Mon Nov 23 07:32:31 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 23 07:47:57 2015 Subject: [squeak-dev] Re: ctrl-J and type in In-Reply-To: References: Message-ID: <1448263951685-4862592.post@n4.nabble.com> Hi Eliot, this feature still works. However, separators create new commands right now. I think I will revert that again to only let selection changes end a command. Best, Marcel -- View this message in context: http://forum.world.st/ctrl-J-and-type-in-tp4862546p4862592.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Nov 23 08:13:07 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 23 08:28:30 2015 Subject: [squeak-dev] Re: ctrl-J and type in In-Reply-To: References: Message-ID: <1448266387791-4862597.post@n4.nabble.com> Hi Eliot, we wil fix that. In the meantime, you can select a piece of text, invoke the context menu (yellow button resp. right click), select "Find and replace..." and trigger the first replacement. Then, you can use CTRL+J or CTRL+SHIFT+J to continue. Best, Marcel -- View this message in context: http://forum.world.st/ctrl-J-and-type-in-tp4862546p4862597.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From sumi at seagreen.ocn.ne.jp Mon Nov 23 08:51:24 2015 From: sumi at seagreen.ocn.ne.jp (Masato Sumi) Date: Mon Nov 23 08:52:05 2015 Subject: [squeak-dev] Re: ctrl-J and type in In-Reply-To: <1448263951685-4862592.post@n4.nabble.com> References: <1448263951685-4862592.post@n4.nabble.com> Message-ID: Hi Marcel. By the way, when I type (to insert, but not to replace) some string and then alt/cmd + j, old Squeak can select the next occurrence of the string that I previously typed. (Needless to say, the inserted string is deleted automatically.) I like and always use this function to find some string very quickly. Does the new alt/cmd + j still have this feature? sumim 2015-11-23 16:48 GMT+09:00 marcel.taeumel : > Hi Eliot, > > this feature still works. However, separators create new commands right now. > I think I will revert that again to only let selection changes end a > command. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/ctrl-J-and-type-in-tp4862546p4862592.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Marcel.Taeumel at hpi.de Mon Nov 23 09:52:01 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 23 10:07:24 2015 Subject: [squeak-dev] Re: ctrl-J and type in In-Reply-To: References: <1448263951685-4862592.post@n4.nabble.com> Message-ID: <1448272321089-4862604.post@n4.nabble.com> Hi Sumim, just use CMD+G to "find again". Works with any selection. Works after something was replaced. Finds the string that was replaced. CMD+G is find-again. CMD+J is find/replace-again. To find the next occurrence of the last replacement, you have to select that replacement first. I think that the feature you described was rather accidential... :) Does this help? Best, Marcel -- View this message in context: http://forum.world.st/ctrl-J-and-type-in-tp4862546p4862604.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Nov 23 10:03:28 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 23 10:18:50 2015 Subject: [squeak-dev] #find in HelpBrowser Message-ID: <1448273008519-4862605.post@n4.nabble.com> Hi Karl, I plan to remove the following methods since we got a new search feature in the help browser: HelpBrowser >> #menu: HelpBrowser >> #find (falsely called from text pane context menu "find" - not the same as CMD+F) HelpBrowser >> #find: HelpBrowser >> #findAgain: HelpBrowser >> #findStringInHelpTopic: HelpBrowser >> #inSubtopic:find: HelpBrowser >> #inTopic:replaceCurrentTopicWith: HelpBrowser >> #inTopic:replaceSubtopic:with: Any objections? Best, Marcel -- View this message in context: http://forum.world.st/find-in-HelpBrowser-tp4862605.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Mon Nov 23 12:58:50 2015 From: karlramberg at gmail.com (karl ramberg) Date: Mon Nov 23 12:58:52 2015 Subject: [squeak-dev] #find in HelpBrowser In-Reply-To: <1448273008519-4862605.post@n4.nabble.com> References: <1448273008519-4862605.post@n4.nabble.com> Message-ID: No objections :-) Best, Karl On Mon, Nov 23, 2015 at 11:03 AM, marcel.taeumel wrote: > Hi Karl, > > I plan to remove the following methods since we got a new search feature in > the help browser: > > HelpBrowser >> #menu: > HelpBrowser >> #find (falsely called from text pane context menu "find" - > not the same as CMD+F) > HelpBrowser >> #find: > HelpBrowser >> #findAgain: > HelpBrowser >> #findStringInHelpTopic: > HelpBrowser >> #inSubtopic:find: > HelpBrowser >> #inTopic:replaceCurrentTopicWith: > HelpBrowser >> #inTopic:replaceSubtopic:with: > > Any objections? > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/find-in-HelpBrowser-tp4862605.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151123/e9b8a437/attachment.htm From frank.shearar at gmail.com Mon Nov 23 14:30:43 2015 From: frank.shearar at gmail.com (Frank Shearar) Date: Mon Nov 23 14:30:46 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On 20 November 2015 at 18:40, tim Rowledge wrote: > Should we keep Traits? It was a neat idea that I was happy to support but it got left unfinished. Where are tools to develop & manage Traits? Where is the usage? > > Unless there is a compelling reason - and subsequent effort to fill out support - I suggest we should remove them. Along with Islands. And Universes. And probably Environments too, since that has stalled without becoming a proper part of the system. There's definitely a pattern there: someone has a great idea for a fairly advanced capability, heroically tries to do all the work solo, or with minimal help from the community, burns out and the work never gets finished. Traits, or things close enough to traits that you end up splitting hairs to tell them apart, are a core feature of so many languages nowadays (Ruby, Newspeak, Scala, Perl 6, Rust, off the top of my head), while we let the idea die on the vine, for want of tooling support. And I'm sure Environments will, too. Sure, if it's not providing value, and no one's willing to do the work, just kill the thing and be done. I'd rather see people pitch in and help _make_ the dang thing a proper part of the system. ("Thing" here applies mostly to Environments, but Islands and Traits too.) But I'm also not going to run around pointing fingers: I'm too burned out to do anything to help, so I'll just shut up now. frank > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: IG: Insert Garbage > > > From Marcel.Taeumel at hpi.de Mon Nov 23 14:41:39 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Nov 23 14:57:05 2015 Subject: [squeak-dev] Key Decode Table Message-ID: <1448289699981-4862698.post@n4.nabble.com> Hi, there is a filter for keyDown events for CTRL combinations in InputSensor class >> #installDuplicateKeyEntryFor: c | key | key := c asInteger. "first do control->alt key" KeyDecodeTable at: { key bitAnd: 16r9F . 2 } put: { key . 8 }. "then alt->alt key" KeyDecodeTable at: { key . 8 } put: { key . 8 } That "bitAnd: 16r9F" is the reason why there are still keyDowns for, e.g., CTRL+1. Should we get rid of that #bitAnd: and remove all #controlKeyPressed calls from the base system? That mixture is really confusing at the moment... Opinions? Ideas? For the sake of cross-platform compatibility, there are onyl the following keyboard shortcuts: CMD+ CMD+SHIFT+ SHIFT+ I know that there are modern Mac keyboard that have 8 modifiers (left/right ctrl, left/right shift, left/right alt, left/right command). However, many shortcuts get eaten by the operating system. That's why key duplication makes sense: Hit Ctrl+Q to complete the symbol in a text field because CMD+Q will close the VM. In Squeak, CMD+Q is assigned to this feature. Best, Marcel -- View this message in context: http://forum.world.st/Key-Decode-Table-tp4862698.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Mon Nov 23 15:45:39 2015 From: karlramberg at gmail.com (karl ramberg) Date: Mon Nov 23 15:45:42 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: Software is hard to make. Even harder to make right. Picking up other peoples projects can be daunting. Most of these projects are quite difficult and involve almost as much political as technical skills to do. (Political in the sense as to get the community to agree to changes and adapt) I'm not sure how to proceed. Best, Karl On Mon, Nov 23, 2015 at 3:30 PM, Frank Shearar wrote: > On 20 November 2015 at 18:40, tim Rowledge wrote: > > Should we keep Traits? It was a neat idea that I was happy to support > but it got left unfinished. Where are tools to develop & manage Traits? > Where is the usage? > > > > Unless there is a compelling reason - and subsequent effort to fill out > support - I suggest we should remove them. Along with Islands. And > Universes. And probably Environments too, since that has stalled without > becoming a proper part of the system. > > There's definitely a pattern there: someone has a great idea for a > fairly advanced capability, heroically tries to do all the work solo, > or with minimal help from the community, burns out and the work never > gets finished. > > Traits, or things close enough to traits that you end up splitting > hairs to tell them apart, are a core feature of so many languages > nowadays (Ruby, Newspeak, Scala, Perl 6, Rust, off the top of my > head), while we let the idea die on the vine, for want of tooling > support. And I'm sure Environments will, too. > > Sure, if it's not providing value, and no one's willing to do the > work, just kill the thing and be done. I'd rather see people pitch in > and help _make_ the dang thing a proper part of the system. ("Thing" > here applies mostly to Environments, but Islands and Traits too.) But > I'm also not going to run around pointing fingers: I'm too burned out > to do anything to help, so I'll just shut up now. > > frank > > > tim > > -- > > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > > Strange OpCodes: IG: Insert Garbage > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151123/e35455ae/attachment.htm From Das.Linux at gmx.de Mon Nov 23 15:57:05 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon Nov 23 15:57:08 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: Hi Karl, On 23.11.2015, at 16:45, karl ramberg wrote: > Software is hard to make. Even harder to make right. > Picking up other peoples projects can be daunting. > > Most of these projects are quite difficult and involve almost as much political as technical skills to do. (Political in the sense as to get the community to agree to changes and adapt) > > I'm not sure how to proceed. > I have to concur, for every very line. We should have at least a list of things that people/community think are orphaned? so that we can bail if they are actually not. Best regards -Tobias > Best, > Karl > > > > On Mon, Nov 23, 2015 at 3:30 PM, Frank Shearar wrote: > On 20 November 2015 at 18:40, tim Rowledge wrote: > > Should we keep Traits? It was a neat idea that I was happy to support but it got left unfinished. Where are tools to develop & manage Traits? Where is the usage? > > > > Unless there is a compelling reason - and subsequent effort to fill out support - I suggest we should remove them. Along with Islands. And Universes. And probably Environments too, since that has stalled without becoming a proper part of the system. > > There's definitely a pattern there: someone has a great idea for a > fairly advanced capability, heroically tries to do all the work solo, > or with minimal help from the community, burns out and the work never > gets finished. > > Traits, or things close enough to traits that you end up splitting > hairs to tell them apart, are a core feature of so many languages > nowadays (Ruby, Newspeak, Scala, Perl 6, Rust, off the top of my > head), while we let the idea die on the vine, for want of tooling > support. And I'm sure Environments will, too. > > Sure, if it's not providing value, and no one's willing to do the > work, just kill the thing and be done. I'd rather see people pitch in > and help _make_ the dang thing a proper part of the system. ("Thing" > here applies mostly to Environments, but Islands and Traits too.) But > I'm also not going to run around pointing fingers: I'm too burned out > to do anything to help, so I'll just shut up now. > > frank > > > tim > > -- > > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > > Strange OpCodes: IG: Insert Garbage > > > > > > > > > From leves at elte.hu Mon Nov 23 16:38:57 2015 From: leves at elte.hu (Levente Uzonyi) Date: Mon Nov 23 16:39:02 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On Mon, 23 Nov 2015, Frank Shearar wrote: > On 20 November 2015 at 18:40, tim Rowledge wrote: >> Should we keep Traits? It was a neat idea that I was happy to support but it got left unfinished. Where are tools to develop & manage Traits? Where is the usage? >> >> Unless there is a compelling reason - and subsequent effort to fill out support - I suggest we should remove them. Along with Islands. And Universes. And probably Environments too, since that has stalled without becoming a proper part of the system. > > There's definitely a pattern there: someone has a great idea for a > fairly advanced capability, heroically tries to do all the work solo, > or with minimal help from the community, burns out and the work never > gets finished. > > Traits, or things close enough to traits that you end up splitting > hairs to tell them apart, are a core feature of so many languages > nowadays (Ruby, Newspeak, Scala, Perl 6, Rust, off the top of my > head), while we let the idea die on the vine, for want of tooling Traits are complex: they introduce a new kind of Behavior, one which doesn't do anything on its own. If Traits were all Classes and all Classes were Traits, the whole implementation would probably be a lot simpler. Traits are weak: they only provide a way to share stateless methods between classes (methods which can't reference variables). If you Traits were Classes, you could share stateful methods by providing a mapping for variables, the same way you can do it for methods. > support. And I'm sure Environments will, too. Environments is at a point where it needs complex things to be found out to move forward. The current implementation is incomplete and broken. The reason why we don't face the problems (so often) is that we only use one environment. Levente > > Sure, if it's not providing value, and no one's willing to do the > work, just kill the thing and be done. I'd rather see people pitch in > and help _make_ the dang thing a proper part of the system. ("Thing" > here applies mostly to Environments, but Islands and Traits too.) But > I'm also not going to run around pointing fingers: I'm too burned out > to do anything to help, so I'll just shut up now. > > frank > >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> Strange OpCodes: IG: Insert Garbage >> >> >> > > From colin at wiresong.com Mon Nov 23 18:50:26 2015 From: colin at wiresong.com (Colin Putney) Date: Mon Nov 23 18:50:27 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On Mon, Nov 23, 2015 at 6:30 AM, Frank Shearar wrote: There's definitely a pattern there: someone has a great idea for a > fairly advanced capability, heroically tries to do all the work solo, > or with minimal help from the community, burns out and the work never > gets finished. > Traits, or things close enough to traits that you end up splitting > hairs to tell them apart, are a core feature of so many languages > nowadays (Ruby, Newspeak, Scala, Perl 6, Rust, off the top of my > head), while we let the idea die on the vine, for want of tooling > support. And I'm sure Environments will, too. > > Sure, if it's not providing value, and no one's willing to do the > work, just kill the thing and be done. I'd rather see people pitch in > and help _make_ the dang thing a proper part of the system. ("Thing" > here applies mostly to Environments, but Islands and Traits too.) But > I'm also not going to run around pointing fingers: I'm too burned out > to do anything to help, so I'll just shut up now. > Yup, that about sums it up. Over the last year or so, I've attempted to resume work on Environments several times only to get discouraged and give up. The "easy" part is done, and what remains is tracing through gnarly legacy code and figuring out where the SystemDictionary assumptions are. It's hard. The reason I started working on OmniBrowser 10 years ago was because Nathanael Sch?rli commented that the hardest part of getting the Traits prototype working was adding tool support. The idea was to make a modular tool set that could easily be modified and *make language improvements easier*. That failed. OB ended up being a great IDE once Lukas did the refactoring support, but nobody uses it. I spent years trying to hunt down the underlying reasons for that and remove the obstacles, but in the end, "not exactly like the tools I already know" and "requires installation" proved insurmountable. This is why I wanted to develop Environments in the trunk and not have it be an optional thing. That worked fairly well, but then I ran into the exact same problem that Nathanael did with Traits. I really want Environments to succeed. I do. I wrote the cleanest code I could, with tests and comments. I engaged with the community from the beginning and throughout the process trying to build support for the idea and knowledge about the implementation. Eventually, I had to take a break and deal with meatspace things like moving and a new job, but I was determined to get back into it as soon as I could. After time away from it, though, thinking about Environments fills me with despair. Nobody cares. Nobody wants to make Squeak better. The only thing the Squeak community values is compatibility with Alan's demos, and a version of Etoys that nobody uses. Ok, that's over the top. But to a first approximation it's true. It's why we lost the Pharo folks. So here's my proposal: let's decide as a community whether we want Environments or not. I pledge to help implement the decision either way. If people want to go back to the classical ST-80 global namespace, I'll help with that. Or we can figure out what would be required for Environments to actually be worth keeping and I'll help work on that too. Thoughts? Colin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151123/d48fc074/attachment.htm From commits at source.squeak.org Mon Nov 23 19:28:46 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 23 19:28:48 2015 Subject: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz Message-ID: tim Rowledge uploaded a new version of Nebraska to project The Inbox: http://source.squeak.org/inbox/Nebraska-tpr.42.mcz ==================== Summary ==================== Name: Nebraska-tpr.42 Author: tpr Time: 23 November 2015, 11:28:38.815 am UUID: fa28a253-e88a-4641-a22d-3569a99e0262 Ancestors: Nebraska-kfr.41 An accompanying change to the Sound-tpr.45 changes; catch the Warning exception in ChatNotes to inform the user =============== Diff against Nebraska-kfr.41 =============== Item was changed: ----- Method: ChatNotes>>record (in category 'button commands') ----- record self isRecording: true. notesIndex = 0 ifFalse: [self notesListIndex: 0]. sound := nil. recorder clearRecordedSound. + [recorder resumeRecording] on: Warning do:[:ex| + self inform: ex tag]! - recorder resumeRecording.! From commits at source.squeak.org Mon Nov 23 19:35:08 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 23 19:35:10 2015 Subject: [squeak-dev] The Inbox: MorphicExtras-tpr.166.mcz Message-ID: tim Rowledge uploaded a new version of MorphicExtras to project The Inbox: http://source.squeak.org/inbox/MorphicExtras-tpr.166.mcz ==================== Summary ==================== Name: MorphicExtras-tpr.166 Author: tpr Time: 23 November 2015, 11:34:44.792 am UUID: ec623673-dea1-40f9-a046-7bb0791cdb06 Ancestors: MorphicExtras-cmm.164, MorphicExtras-kfr.165 Handle the SoundRecorder Warning exception in EventRecordingmorph and RecordingControlsMorph to notify the user. Note that BaseSoundSystem>>#randomBitsFromSoundInput: is not altered - the best I can think of is to let the debugger warning get raised here since it isn't a UI item. It may be better to handel the exceptio to either do nothing (so there will be bad random numbers) or delgate to some other randomiser. =============== Diff against MorphicExtras-cmm.164 =============== Item was changed: ----- Method: EventRecorderMorph>>resumeRecordIn: (in category 'pause/resume') ----- resumeRecordIn: aWorld recHand := aWorld activeHand ifNil: [aWorld primaryHand]. recHand newKeyboardFocus: aWorld. recHand addEventListener: self. lastEvent := nil. state := #record. voiceRecorder ifNotNil: [voiceRecorder clearRecordedSound. + [voiceRecorder resumeRecording] on: Warning do:[:ex| + self inform: ex tag "NB - it may be better to simply ignore this; all that would happen is nothing gets recorded"]. - voiceRecorder resumeRecording. startSoundEvent := MorphicUnknownEvent new setType: #startSound argument: nil hand: nil stamp: Time millisecondClockValue. tapeStream nextPut: startSoundEvent]. self synchronize. ! Item was changed: ----- Method: RecordingControlsMorph>>record (in category 'button commands') ----- record recorder clearRecordedSound. + [recorder resumeRecording] on: Warning do:[:ex| + self inform: ex tag] - recorder resumeRecording. ! Item was removed: - ----- Method: ReferenceMorph>>handlesMouseMove: (in category 'event handling') ----- - handlesMouseMove: anEvent - ^true! Item was changed: BookMorph subclass: #StoryboardBookMorph instanceVariableNames: 'alansSliders panAndTiltFactor zoomFactor zoomController' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Books'! + !StoryboardBookMorph commentStamp: 'kfr 5/17/2015 23:37' prior: 0! + A BookMorph variant whose pages are instances of ZoomAndScrollMorph. + I have a control area where the user may pan, tilt and zoom over the image shown in the page. - !StoryboardBookMorph commentStamp: '' prior: 0! - A BookMorph variant whose pages are instances of ZoomAndScrollMorph. I have a control area where the user may pan, tilt and zoom over the image shown in the page. + StoryboardBookMorph new openInWorld + + Drop an picture at the book. + + Mouse + - drag up and down to tilt - - drag up and down to zoom in and out - drag left and right to pan + - shift-drag up and down to zoom in and out + + Keyboard + Arrow keys pan and tilts the image + X and Z zoom in and out + + From top left in control panel you pull out stills from diffrent zoom, tilt and pan posititons. + Drop these after eachother to make an animation script. + The numbers between the stills are playback speed, that can be edited. + Save script from the scripts halo menu. + + Playback script from controll panels halo menu. + + ! - - shift-drag up and down to tilt.! Item was changed: ----- Method: StoryboardBookMorph>>initialize (in category 'initialization') ----- initialize + newPagePrototype := ZoomAndScrollMorph new extent: 300@300. - newPagePrototype := ZoomAndScrollMorph new extent: Display extent // 3. zoomController := ZoomAndScrollControllerMorph new + setBalloonText: 'Drag in here to zoom, tilt and pan the page above'; + extent: 246@147. - setBalloonText: 'Drag in here to zoom, tilt and pan the page above'. super initialize. + zoomController openInWorld. + + "tool := RectangleMorph new extent: 250@170; layoutPolicy: TableLayout new. + tool addMorph: zoomController. - self addMorphBack: zoomController. - alansSliders := { {#changeTiltFactor: . #getTiltFactor . 'Pan and tilt sensitivity'}. {#changeZoomFactor: . #getZoomFactor . 'Zoom sensitivity'}. } collect: [ :sData | { SimpleSliderMorph new extent: 150@10; color: Color orange; sliderColor: Color gray; target: self; actionSelector: sData first; setBalloonText: sData third; adjustToValue: (self perform: sData second). sData second } ]. + alansSliders do: [ :each | tool addMorphBack: each first]. + tool openInWorld" - alansSliders do: [ :each | self addMorphBack: each first] ! Item was changed: ----- Method: ZoomAndScrollControllerMorph>>changeKeys (in category 'as yet unclassified') ----- changeKeys upDownCodes := Dictionary new. + changeKeysState := #(up down left right in out). - changeKeysState := #(up down in out). self changed.! Item was changed: ----- Method: ZoomAndScrollControllerMorph>>initialize (in category 'initialization') ----- initialize "initialize the state of the receiver" | displayer dataMorph | super initialize. "" hasFocus := true. currentKeyDown := Set new. upDownCodes := Dictionary new. + upDownCodes at: 31 put: #up; "arrow keys" + at: 30 put: #down; + at: 29 put: #left; + at: 28 put: #right; + at: 88 put:#in; "x" + at: 90 put:#out. "y" + - upDownCodes at: 126 put: #up; - at: 125 put: #down; - at: 123 put: #out; - at: 124 put: #in. - "arrow keys on the mac" self extent: 40 @ 40; vResizing: #rigid; hResizing: #spaceFill; setBalloonText: 'Drag in here to zoom, tilt and pan the page above'. dataMorph := AlignmentMorph newColumn. dataMorph color: Color yellow; hResizing: #shrinkWrap; vResizing: #shrinkWrap. dataMorph on: #mouseDown send: #grabCameraPositionEvent:morph: to: self. displayer := UpdatingStringMorph new getSelector: #cameraPointRounded; target: self; growable: true; putSelector: nil. dataMorph addMorph: displayer lock. displayer := UpdatingStringMorph new getSelector: #cameraScale; target: self; growable: true; floatPrecision: 0.001; putSelector: nil. dataMorph addMorph: displayer lock. self addMorph: dataMorph! Item was changed: ----- Method: ZoomAndScrollControllerMorph>>step (in category 'stepping and presenter') ----- step + | delta halfDW shift | + shift := false. - | delta halfDW | - (self valueOfProperty: #currentCameraVersion ifAbsent: [0]) = self currentCameraVersion ifFalse: [ self patchOldVersion1. self setProperty: #currentCameraVersion toValue: self currentCameraVersion. ]. super step. self doProgrammedMoves. + (currentKeyDown ifNil: [#()]) do: [ :each | | action | + action := upDownCodes at: each ifAbsent: [shift := true]. - (currentKeyDown ifNil: [#()]) do: [ :each | | action | - action := upDownCodes at: each ifAbsent: [#fugeddaboutit]. action == #in ifTrue: [ target scaleImageBy: -10. ]. action == #out ifTrue: [ target scaleImageBy: 10. ]. action == #up ifTrue: [ + target panImageBy: 0@ -20. - target tiltImageBy: -20. ]. action == #down ifTrue: [ + target panImageBy: 0@20. - target tiltImageBy: 20. ]. + action == #left ifTrue: [ + target panImageBy: -20@0. + ]. + action == #right ifTrue: [ + target panImageBy: 20@0. + ]. ]. mouseMovePoint ifNil: [^self]. mouseDownPoint ifNil: [^self]. target ifNil: [^self]. halfDW := self deadZoneWidth // 2. + halfDW := self deadZoneWidth // 2. delta := mouseMovePoint - mouseDownPoint. delta x abs <= halfDW ifTrue: [delta := 0@delta y]. delta y abs <= halfDW ifTrue: [delta := delta x@0]. + shift ifTrue:[^target scaleImageBy: delta x]. + target panImageBy: delta x @ delta y - - target panImageBy: delta x. ! Item was changed: ----- Method: ZoomAndScrollMorph>>panImageBy: (in category 'as yet unclassified') ----- panImageBy: pixels + self changeOffsetBy: (pixels x* self getTiltFactor * 0.1) @ (pixels y* self getTiltFactor * 0.1) - self changeOffsetBy: (pixels * self getTiltFactor * 0.1) @ 0. "steps := (pixels abs / 6) exp rounded * pixels sign." "==Alan's preferred factors pan = 0.0425531914893617 zoom = 0.099290780141844 ===" ! Item was removed: - ----- Method: ZoomAndScrollMorph>>tiltImageBy: (in category 'as yet unclassified') ----- - tiltImageBy: pixels - - self changeOffsetBy: 0 @ (pixels * self getTiltFactor * 0.1) - - " steps := (pixels abs / 6) exp rounded * pixels sign. - " - "==Alan's preferred factors - pan = 0.0425531914893617 - zoom = 0.099290780141844 - ===" - ! From karlramberg at gmail.com Mon Nov 23 20:51:04 2015 From: karlramberg at gmail.com (karl ramberg) Date: Mon Nov 23 20:51:07 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On Mon, Nov 23, 2015 at 7:50 PM, Colin Putney wrote: > > > On Mon, Nov 23, 2015 at 6:30 AM, Frank Shearar > wrote: > > There's definitely a pattern there: someone has a great idea for a >> fairly advanced capability, heroically tries to do all the work solo, >> or with minimal help from the community, burns out and the work never >> gets finished. > > >> > Traits, or things close enough to traits that you end up splitting >> hairs to tell them apart, are a core feature of so many languages >> nowadays (Ruby, Newspeak, Scala, Perl 6, Rust, off the top of my >> head), while we let the idea die on the vine, for want of tooling >> support. And I'm sure Environments will, too. >> >> Sure, if it's not providing value, and no one's willing to do the >> work, just kill the thing and be done. I'd rather see people pitch in >> and help _make_ the dang thing a proper part of the system. ("Thing" >> here applies mostly to Environments, but Islands and Traits too.) But >> I'm also not going to run around pointing fingers: I'm too burned out >> to do anything to help, so I'll just shut up now. >> > > Yup, that about sums it up. > > Over the last year or so, I've attempted to resume work on Environments > several times only to get discouraged and give up. The "easy" part is done, > and what remains is tracing through gnarly legacy code and figuring out > where the SystemDictionary assumptions are. It's hard. > > The reason I started working on OmniBrowser 10 years ago was because > Nathanael Sch?rli commented that the hardest part of getting the Traits > prototype working was adding tool support. The idea was to make a modular > tool set that could easily be modified and *make language improvements > easier*. That failed. OB ended up being a great IDE once Lukas did the > refactoring support, but nobody uses it. I spent years trying to hunt down > the underlying reasons for that and remove the obstacles, but in the end, > "not exactly like the tools I already know" and "requires installation" > proved insurmountable. > > This is why I wanted to develop Environments in the trunk and not have it > be an optional thing. That worked fairly well, but then I ran into the > exact same problem that Nathanael did with Traits. > > I really want Environments to succeed. I do. I wrote the cleanest code I > could, with tests and comments. I engaged with the community from the > beginning and throughout the process trying to build support for the idea > and knowledge about the implementation. Eventually, I had to take a break > and deal with meatspace things like moving and a new job, but I was > determined to get back into it as soon as I could. > > After time away from it, though, thinking about Environments fills me with > despair. Nobody cares. Nobody wants to make Squeak better. The only thing > the Squeak community values is compatibility with Alan's demos, and a > version of Etoys that nobody uses. Ok, that's over the top. But to a first > approximation it's true. It's why we lost the Pharo folks. > > So here's my proposal: let's decide as a community whether we want > Environments or not. I pledge to help implement the decision either way. If > people want to go back to the classical ST-80 global namespace, I'll help > with that. Or we can figure out what would be required for Environments to > actually be worth keeping and I'll help work on that too. > > Thoughts? > > Colin > > > Well, if you are interested in working on it I salute you. I understand your frustration. Squeak is a ship with many captains. It takes patience and skill to change course. Many have left this community in frustration. I will help you where I can with this project. But most of the stuff involved are much above my knowledge. Anyway, I committed workaround you had suggested to a issue with environments the other day :-) Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151123/9dcc03be/attachment.htm From tim at rowledge.org Mon Nov 23 21:07:45 2015 From: tim at rowledge.org (tim Rowledge) Date: Mon Nov 23 21:07:51 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: Doing anything big is a pain, even if you?re being paid to do it, have assigned colleagues that you can direct, and know what you?re doing. Most companies fail miserably at it. In an open source project you add an entire galaxy of extra pain. Herding cats doesn?t even begin to cover it; if you have a decent group of fans of your idea(s) you still face the problems of lack of time, other interests, arguments and on and on. It is a perfect example why the fantasy of ?the free market will solve everything!? is so fatuous. Traits; I liked the idea, as I said. But I?ve never felt the lack of them, nor worked on anything where I thought ?hhmm, a trait would be useful here? and with no support in any tools nor easily accessible documentation that might lead me to a fuller appreciation etc... forget it. The only response we?ve had to offer any idea why we ought to care was Marcel saying he found them a bit useful for documenting something. That isn?t exactly a ringing endorsement. There is a modestly informative page on the swiki at http://wiki.squeak.org/squeak/538 but it dates back to 2006! The commentary in-image is dismal (as is pretty standard, to our disgrace) and offers nothing I can spot that could encourage me to use them, let alone any pointers on how. There?s nothing I can see to indicate Traits actually being used in-image so there?s nothing that makes me think it worth digging further. The only Trait stuff I can find is in fact in the 311Deprecated-Traits category. 3.11 was quite a while ago. Oh, wait, there is a set of tests that might explain something *if they were damn well documented* Islands; I can?t find anything about them. The swiki has a few pages of approximately 0 information content. In fact it doesn?t seem like they?re even in the image, so I have no idea. Environments: I like the idea of namespaces that help avoid class/ivar/message name clashes. I don?t see any info to help me make use of them, or when it might be useful, or how to find them. I see very few comments in code, virtually none for classes, nothing in the tests. Haven?t been able to spot any swiki info either. Universes; I can?t even see enough info to gain an idea of what they?re for! The only bit I spotted points to stuff on a server that no longer exists and probably hasn?t since ?06. The software world in general seems to be useless at this; we?re nothing special. There are people out there that think running some parser over a tree of text files and extracting function comments is an adequate way to create a manual! There are others that will claim that the ?code is self documenting? which really ought to be a capital crime. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Nullo metro compositum est = It doesn't rhyme. From asqueaker at gmail.com Mon Nov 23 21:16:19 2015 From: asqueaker at gmail.com (Chris Muller) Date: Mon Nov 23 21:17:00 2015 Subject: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz In-Reply-To: <565368f2.90628c0a.73a40.7970SMTPIN_ADDED_MISSING@mx.google.com> References: <565368f2.90628c0a.73a40.7970SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Is this so that Scratch users won't have to see the pre-debugger? If a Scratch kid gets a debugger and clicks "Debug" isntead of "Abanadon". They might get confused or they might learn something..? It seems the debugger could never be less friendly than #inform:... If I'm wrong about that, maybe the handling via #inform: could be based on #noviceMode also being set? On Mon, Nov 23, 2015 at 1:28 PM, wrote: > tim Rowledge uploaded a new version of Nebraska to project The Inbox: > http://source.squeak.org/inbox/Nebraska-tpr.42.mcz > > ==================== Summary ==================== > > Name: Nebraska-tpr.42 > Author: tpr > Time: 23 November 2015, 11:28:38.815 am > UUID: fa28a253-e88a-4641-a22d-3569a99e0262 > Ancestors: Nebraska-kfr.41 > > An accompanying change to the Sound-tpr.45 changes; catch the Warning exception in ChatNotes to inform the user > > =============== Diff against Nebraska-kfr.41 =============== > > Item was changed: > ----- Method: ChatNotes>>record (in category 'button commands') ----- > record > > self isRecording: true. > notesIndex = 0 ifFalse: [self notesListIndex: 0]. > sound := nil. > recorder clearRecordedSound. > + [recorder resumeRecording] on: Warning do:[:ex| > + self inform: ex tag]! > - recorder resumeRecording.! > > From karlramberg at gmail.com Mon Nov 23 21:52:46 2015 From: karlramberg at gmail.com (karl ramberg) Date: Mon Nov 23 21:52:49 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz Message-ID: On Mon, Nov 23, 2015 at 10:07 PM, tim Rowledge wrote: > Doing anything big is a pain, even if you?re being paid to do it, have > assigned colleagues that you can direct, and know what you?re doing. Most > companies fail miserably at it. > > In an open source project you add an entire galaxy of extra pain. Herding > cats doesn?t even begin to cover it; if you have a decent group of fans of > your idea(s) you still face the problems of lack of time, other interests, > arguments and on and on. It is a perfect example why the fantasy of ?the > free market will solve everything!? is so fatuous. > > Traits; I liked the idea, as I said. But I?ve never felt the lack of them, > nor worked on anything where I thought ?hhmm, a trait would be useful here? > and with no support in any tools nor easily accessible documentation that > might lead me to a fuller appreciation etc... forget it. The only response > we?ve had to offer any idea why we ought to care was Marcel saying he > found them a bit useful for documenting something. That isn?t exactly a > ringing endorsement. > > There is a modestly informative page on the swiki at > http://wiki.squeak.org/squeak/538 but it dates back to 2006! The > commentary in-image is dismal (as is pretty standard, to our disgrace) and > offers nothing I can spot that could encourage me to use them, let alone > any pointers on how. There?s nothing I can see to indicate Traits actually > being used in-image so there?s nothing that makes me think it worth digging > further. The only Trait stuff I can find is in fact in the > 311Deprecated-Traits category. 3.11 was quite a while ago. Oh, wait, there > is a set of tests that might explain something *if they were damn well > documented* > Never used traits either. > > Islands; I can?t find anything about them. The swiki has a few pages of > approximately 0 information content. In fact it doesn?t seem like they?re > even in the image, so I have no idea. > Not used this. > > Environments: I like the idea of namespaces that help avoid > class/ivar/message name clashes. I don?t see any info to help me make use > of them, or when it might be useful, or how to find them. I see very few > comments in code, virtually none for classes, nothing in the tests. Haven?t > been able to spot any swiki info either. > I have looked at the code, but not really understood it. > > Universes; I can?t even see enough info to gain an idea of what they?re > for! The only bit I spotted points to stuff on a server that no longer > exists and probably hasn?t since ?06. > Universes was a SquakMap kind of tool, but since there is no server running, it's pretty useless. > > The software world in general seems to be useless at this; we?re nothing > special. There are people out there that think running some parser over a > tree of text files and extracting function comments is an adequate way to > create a manual! There are others that will claim that the ?code is self > documenting? which really ought to be a capital crime. > You can always doIt HelpBrowser openOn: aClass which will bring up all class and method comments for that class. By the way, that should be added to the browser class pane menu... Best, Karl > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Useful Latin Phrases:- Nullo metro compositum est = It doesn't rhyme. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151123/ab6f8258/attachment.htm From tim at rowledge.org Mon Nov 23 22:17:56 2015 From: tim at rowledge.org (tim Rowledge) Date: Mon Nov 23 22:18:03 2015 Subject: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz In-Reply-To: References: <565368f2.90628c0a.73a40.7970SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: > On 23-11-2015, at 1:16 PM, Chris Muller wrote: > > Is this so that Scratch users won't have to see the pre-debugger? Nah, the Scratch code handles it in ScratchSoundRecroderDialog or some-such. These couple of changes are simply suggestions for more politely handling a possible problem in a way that is a touch less painful than a primitiveFailed within a critical block. If people prefer the plain notifier for an unhandled Warning, fine. ChatNotes etc are not used by Scratch - though enabling group chat could be fun... > If > a Scratch kid gets a debugger and clicks "Debug" isntead of > "Abanadon". They might get confused or they might learn something..? I suspect a teacher of a class of 30-40 8 year olds trying to keep their minds on the required lesson might not see it as at all amusing. Remember, Scratch usage is now part of the national curriculum in the UK. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- He hasn't a single redeeming vice. From commits at source.squeak.org Mon Nov 23 22:28:45 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 23 22:28:47 2015 Subject: [squeak-dev] The Trunk: Tools-kfr.655.mcz Message-ID: Karl Ramberg uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-kfr.655.mcz ==================== Summary ==================== Name: Tools-kfr.655 Author: kfr Time: 23 November 2015, 11:28:19.779 pm UUID: 80343420-2d7b-43dc-aea0-11e528a51ed0 Ancestors: Tools-mt.654 Adds menu item for class pane to open a HeloBrowser for selected class. =============== Diff against Tools-mt.654 =============== Item was added: + ----- Method: Browser>>browseAllCommentsForClass (in category 'message functions') ----- + browseAllCommentsForClass + "Inspect all instances of the selected class. 1/26/96 sw" + + | myClass | + ((myClass := self selectedClassOrMetaClass) isNil or: [myClass isTrait]) + ifFalse: [HelpBrowser openOn: myClass theNonMetaClass] + ! Item was changed: ----- Method: Browser>>classListMenu: (in category 'class functions') ----- classListMenu: aMenu "Conveniently fit for backward compatibility with old browers stored in image segments" aMenu addList: #( - ('browse full (b)' browseMethodFull) ('browse hierarchy (h)' spawnHierarchy) ('browse protocol (p)' browseFullProtocol) - ('printOut' printOutClass) ('fileOut' fileOutClass) - ('show hierarchy' hierarchy) ('show definition' editClass) ('show comment' editComment) + ('show all comments' browseAllCommentsForClass) - ('references... (r)' browseVariableReferences) ('assignments... (a)' browseVariableAssignments) ('class refs (N)' browseClassRefs) - ('rename class ...' renameClass) ('copy class' copyClass) ('remove class (x)' removeClass) - ('find method...' findMethod)). ^ aMenu ! From karlramberg at gmail.com Mon Nov 23 22:30:44 2015 From: karlramberg at gmail.com (karl ramberg) Date: Mon Nov 23 22:30:46 2015 Subject: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz In-Reply-To: References: <565368f2.90628c0a.73a40.7970SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: On Mon, Nov 23, 2015 at 11:17 PM, tim Rowledge wrote: > > > On 23-11-2015, at 1:16 PM, Chris Muller wrote: > > > > Is this so that Scratch users won't have to see the pre-debugger? > > Nah, the Scratch code handles it in ScratchSoundRecroderDialog or > some-such. These couple of changes are simply suggestions for more politely > handling a possible problem in a way that is a touch less painful than a > primitiveFailed within a critical block. If people prefer the plain > notifier for an unhandled Warning, fine. > > ChatNotes etc are not used by Scratch - though enabling group chat could > be fun... > > > If > > a Scratch kid gets a debugger and clicks "Debug" isntead of > > "Abanadon". They might get confused or they might learn something..? > > I suspect a teacher of a class of 30-40 8 year olds trying to keep their > minds on the required lesson might not see it as at all amusing. Remember, > Scratch usage is now part of the national curriculum in the UK. > Oh, that's really big. Hope they enjoy it :-) Best, Karl > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Useful random insult:- He hasn't a single redeeming vice. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151123/24ac677f/attachment.htm From commits at source.squeak.org Mon Nov 23 22:34:50 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 23 22:34:53 2015 Subject: [squeak-dev] The Trunk: Tools-kfr.656.mcz Message-ID: Karl Ramberg uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-kfr.656.mcz ==================== Summary ==================== Name: Tools-kfr.656 Author: kfr Time: 23 November 2015, 11:34:24.394 pm UUID: 0ece22f7-03af-4926-b071-bbb3dec38d64 Ancestors: Tools-kfr.655 Might as well get the comment right on this one.... =============== Diff against Tools-kfr.655 =============== Item was changed: ----- Method: Browser>>browseAllCommentsForClass (in category 'message functions') ----- browseAllCommentsForClass + "Opens a HelpBrowser on the class" - "Inspect all instances of the selected class. 1/26/96 sw" | myClass | ((myClass := self selectedClassOrMetaClass) isNil or: [myClass isTrait]) ifFalse: [HelpBrowser openOn: myClass theNonMetaClass] ! From commits at source.squeak.org Mon Nov 23 22:55:03 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Nov 23 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151123225503.5268.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009191.html Name: Help-Squeak-Project-cmm.34 Ancestors: Help-Squeak-Project-mt.33 - Document recently added Redo function. - Clarify and correct the toggle enclosure function. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009192.html Name: Tools-kfr.655 Ancestors: Tools-mt.654 Adds menu item for class pane to open a HeloBrowser for selected class. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009193.html Name: Tools-kfr.656 Ancestors: Tools-kfr.655 Might as well get the comment right on this one.... ============================================= From lewis at mail.msen.com Mon Nov 23 23:07:22 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Mon Nov 23 23:07:23 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: <20151123230722.GA79369@shell.msen.com> On Mon, Nov 23, 2015 at 10:50:26AM -0800, Colin Putney wrote: > > So here's my proposal: let's decide as a community whether we want > Environments or not. I pledge to help implement the decision either way. If > people want to go back to the classical ST-80 global namespace, I'll help > with that. Or we can figure out what would be required for Environments to > actually be worth keeping and I'll help work on that too. > > Thoughts? > > Colin I strongly favor keeping Environments in the image and doing whatever is needed to address issues that are currently blocking use of image segments (or whatever other real or perceived problems we may have). My opinion is based in no small part on Andreas Raab's assessment that Environments is a difficult job done right. I am no expert in this area, but I trust Andreas' judgement a lot in matters like this. A good, elegant solution to a difficult problem is worth the effort to bring to completion, even if it takes us a few years to get it done. Let's stick with it and make it right. Dave From eliot.miranda at gmail.com Tue Nov 24 00:57:08 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Nov 24 00:57:13 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> I want Environments and I want Traits too. You say "Nobody cares. Nobody wants to make Squeak better. The only thing the Squeak community values is compatibility with Alan's demos, and a version of Etoys that nobody uses.". None of those statements are true of my efforts or, as far as I can see, of the significant efforts of the HPI team, or of Tim Rowledge, if Chris Muller or Levente Uzoni, and probably a lot of other folks too. Squeak is my day to day workhorse. The HOI folks are improving the environment at great velocity. Squeak 5 is ~40% faster than Squeak 4.6. Neither of these things are true because no one cares. Colin, mon brave! Mon p?te. Despair not! _,,,^..^,,,_ (phone) > On Nov 23, 2015, at 10:50 AM, Colin Putney wrote: > > > >> On Mon, Nov 23, 2015 at 6:30 AM, Frank Shearar wrote: >> >> There's definitely a pattern there: someone has a great idea for a >> fairly advanced capability, heroically tries to do all the work solo, >> or with minimal help from the community, burns out and the work never >> gets finished. >> >> Traits, or things close enough to traits that you end up splitting >> hairs to tell them apart, are a core feature of so many languages >> nowadays (Ruby, Newspeak, Scala, Perl 6, Rust, off the top of my >> head), while we let the idea die on the vine, for want of tooling >> support. And I'm sure Environments will, too. >> >> Sure, if it's not providing value, and no one's willing to do the >> work, just kill the thing and be done. I'd rather see people pitch in >> and help _make_ the dang thing a proper part of the system. ("Thing" >> here applies mostly to Environments, but Islands and Traits too.) But >> I'm also not going to run around pointing fingers: I'm too burned out >> to do anything to help, so I'll just shut up now. > > Yup, that about sums it up. > > Over the last year or so, I've attempted to resume work on Environments several times only to get discouraged and give up. The "easy" part is done, and what remains is tracing through gnarly legacy code and figuring out where the SystemDictionary assumptions are. It's hard. > > The reason I started working on OmniBrowser 10 years ago was because Nathanael Sch?rli commented that the hardest part of getting the Traits prototype working was adding tool support. The idea was to make a modular tool set that could easily be modified and *make language improvements easier*. That failed. OB ended up being a great IDE once Lukas did the refactoring support, but nobody uses it. I spent years trying to hunt down the underlying reasons for that and remove the obstacles, but in the end, "not exactly like the tools I already know" and "requires installation" proved insurmountable. > > This is why I wanted to develop Environments in the trunk and not have it be an optional thing. That worked fairly well, but then I ran into the exact same problem that Nathanael did with Traits. > > I really want Environments to succeed. I do. I wrote the cleanest code I could, with tests and comments. I engaged with the community from the beginning and throughout the process trying to build support for the idea and knowledge about the implementation. Eventually, I had to take a break and deal with meatspace things like moving and a new job, but I was determined to get back into it as soon as I could. > > After time away from it, though, thinking about Environments fills me with despair. Nobody cares. Nobody wants to make Squeak better. The only thing the Squeak community values is compatibility with Alan's demos, and a version of Etoys that nobody uses. Ok, that's over the top. But to a first approximation it's true. It's why we lost the Pharo folks. > > So here's my proposal: let's decide as a community whether we want Environments or not. I pledge to help implement the decision either way. If people want to go back to the classical ST-80 global namespace, I'll help with that. Or we can figure out what would be required for Environments to actually be worth keeping and I'll help work on that too. > > Thoughts? > > Colin > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151123/d61e6cdf/attachment.htm From lewis at mail.msen.com Tue Nov 24 03:00:22 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Nov 24 03:00:25 2015 Subject: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz In-Reply-To: References: <565368f2.90628c0a.73a40.7970SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <20151124030022.GA13124@shell.msen.com> On Mon, Nov 23, 2015 at 11:30:44PM +0100, karl ramberg wrote: > On Mon, Nov 23, 2015 at 11:17 PM, tim Rowledge wrote: > > > > > > On 23-11-2015, at 1:16 PM, Chris Muller wrote: > > > > > > Is this so that Scratch users won't have to see the pre-debugger? > > > > Nah, the Scratch code handles it in ScratchSoundRecroderDialog or > > some-such. These couple of changes are simply suggestions for more politely > > handling a possible problem in a way that is a touch less painful than a > > primitiveFailed within a critical block. If people prefer the plain > > notifier for an unhandled Warning, fine. > > > > ChatNotes etc are not used by Scratch - though enabling group chat could > > be fun... > > > > > If > > > a Scratch kid gets a debugger and clicks "Debug" isntead of > > > "Abanadon". They might get confused or they might learn something..? > > > > I suspect a teacher of a class of 30-40 8 year olds trying to keep their > > minds on the required lesson might not see it as at all amusing. Remember, > > Scratch usage is now part of the national curriculum in the UK. > > > > Oh, that's really big. > Hope they enjoy it :-) > Indeed, it sounds like a pretty big deal, but not something that I would have remembered since I did not know about it in the first place. Tim, can you provide a link to "Scratch usage is now part of the national curriculum in the UK"? And when they say "Scratch" does it mean the real one, or the "improved" version that was reimplemented in a soon-to-be-dead language by wannabe IT managers? Dave From colin at wiresong.com Tue Nov 24 05:49:17 2015 From: colin at wiresong.com (Colin Putney) Date: Tue Nov 24 05:49:20 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> Message-ID: On Mon, Nov 23, 2015 at 4:57 PM, Eliot Miranda wrote: > I want Environments and I want Traits too. You say "Nobody cares. Nobody > wants to make Squeak better. The only thing the Squeak community values is > compatibility with Alan's demos, and a version of Etoys that nobody > uses.". None of those statements are true of my efforts or, as far as I > can see, of the significant efforts of the HPI team, or of Tim Rowledge, if > Chris Muller or Levente Uzoni, and probably a lot of other folks too. > > Squeak is my day to day workhorse. The HOI folks are improving the > environment at great velocity. Squeak 5 is ~40% faster than Squeak 4.6. > Neither of these things are true because no one cares. Colin, mon brave! > Mon p?te. Despair not! > Well, I did admit that it was over the top. :-) I do think Frank had a point, though. Squeak has had many ambitious projects over the years, but they all die because one person can't sustain the necessary effort for the time it takes to get it done, and the community can't pick up the slack. We've got to get better at this. I'll poke around over the holidays and make a list of Environments issues. Then we can figure out how to tackle them. Colin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151123/5e27e164/attachment-0001.htm From commits at source.squeak.org Tue Nov 24 08:34:28 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 24 08:34:30 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1054.mcz Message-ID: 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: '' 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! From commits at source.squeak.org Tue Nov 24 08:48:10 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 24 08:48:13 2015 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.84.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.84.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.84 Author: mt Time: 24 November 2015, 9:48:03.135 am UUID: ce8e1b34-772e-4968-a6f7-ad1afed12b10 Ancestors: HelpSystem-Core-mt.83 Removes dead code. Avoid losing unaccepted changes without confirmation. Like on code editors. =============== Diff against HelpSystem-Core-mt.83 =============== Item was changed: ----- Method: HelpBrowser>>accept: (in category 'actions') ----- accept: text "Accept edited text. Compile it into a HelpTopic" | code parent topicClass topicMethod | (self currentParentTopic isNil or: [self currentParentTopic isEditable not]) ifTrue: [^ self inform: 'This help topic cannot be edited.']. + self changed: #clearUserEdits. + parent := self currentParentTopic. topicClass := parent helpClass. topicMethod := self currentTopic key. code := String streamContents:[:s| s nextPutAll: topicMethod. s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'. s crtab; nextPutAll: '"', self name,' edit: ', topicMethod storeString,'"'. s crtab; nextPutAll: '^HelpTopic'. s crtab: 2; nextPutAll: 'title: ', currentTopic title storeString. s crtab: 2; nextPutAll: 'contents: '. s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: text]) storeString. s nextPutAll:' readStream nextChunkText'. ]. topicClass class compile: code classified: ((topicClass class organization categoryOfElement: topicMethod) ifNil:['pages']). parent refresh. parent == self rootTopic ifTrue: [self rootTopic: parent]. self currentTopic: (parent subtopics detect: [:t | t key = topicMethod]).! Item was changed: ----- Method: HelpBrowser>>currentTopic: (in category 'accessing') ----- currentTopic: aHelpTopic + self okToChange ifFalse: [^ self]. self currentTopic == aHelpTopic ifTrue: [^ self]. currentTopic := aHelpTopic. topicPath := nil. self changed: #currentTopic. self changed: #topicContents.! Item was removed: - ----- Method: HelpBrowser>>find (in category 'actions') ----- - find - "Prompt the user for a string to search for, and search the receiver from the current selection onward for it." - - | reply | - reply := UIManager default request: 'Find what? ' initialAnswer: ''. - reply size = 0 ifTrue: [ - ^ self]. - self findStringInHelpTopic: reply - ! Item was removed: - ----- Method: HelpBrowser>>find: (in category 'actions') ----- - find: aString - ^SystemNavigation allMethodsSelect: [:method | - method hasLiteralSuchThat: [:lit | - (lit isString and: [lit isSymbol not]) and: - [lit includesSubstring: aString caseSensitive: false]]] - localTo: CustomHelp - ! Item was removed: - ----- Method: HelpBrowser>>findAgain (in category 'actions') ----- - findAgain - | i | - (i := result indexOf: currentTopic) ~= 0 - ifTrue: [i = result size - ifTrue: [(self confirm: 'Start over?') - ifTrue: [i := 1] - ifFalse: [^ self]]. - self - onItemClicked: (result at: i + 1)]! Item was removed: - ----- Method: HelpBrowser>>findStringInHelpTopic: (in category 'actions') ----- - findStringInHelpTopic: aString - - result := OrderedCollection new. - self inSubtopic: self rootTopic find: aString. - result ifNotEmpty: [self topic: result first]. - ! Item was removed: - ----- Method: HelpBrowser>>inSubtopic:find: (in category 'actions') ----- - inSubtopic: aTopic find: aString - ((aTopic title asString includesSubstring: aString caseSensitive: false) - or: [aTopic contents asString includesSubstring: aString caseSensitive: false]) - ifTrue: [result addIfNotPresent: aTopic]. - aTopic subtopics - do: [:sub | self inSubtopic: sub find: aString]! Item was removed: - ----- Method: HelpBrowser>>inTopic:replaceCurrentTopicWith: (in category 'actions') ----- - inTopic: parentTopic replaceCurrentTopicWith: aNewTopic - - parentTopic subtopics - do: [ :sub | self inTopic: parentTopic replaceSubtopic: sub with: aNewTopic]! Item was removed: - ----- Method: HelpBrowser>>inTopic:replaceSubtopic:with: (in category 'actions') ----- - inTopic: parentTopic replaceSubtopic: aTopic with: aNewTopic - | i | - - (aTopic = oldTopic) - ifTrue: [ i := parentTopic subtopics indexOf: aTopic. - parentTopic subtopics at: i put: aNewTopic. ^self ]. - - aTopic subtopics - do: [ :sub | self inTopic: aTopic replaceSubtopic: sub with: aNewTopic]! Item was added: + ----- Method: HelpBrowser>>okToChange (in category 'updating') ----- + okToChange + + self canDiscardEdits ifTrue: [^ true]. + self changed: #wantToChange. "Solicit cancel from view" + ^ self canDiscardEdits! Item was changed: ----- Method: HelpBrowser>>searchTerm: (in category 'searching') ----- searchTerm: aString "Spawn a new search topic." | topic | + self okToChange ifFalse: [^ self]. + topic := self searchTopic subtopics detect: [:t | t term = aString] ifNone: [ | newTopic | newTopic := SearchTopic new term: aString; yourself. self searchTopic addSubtopic: newTopic. newTopic addDependent: self. "Tell me about your updates." newTopic]. "self changed: #searchTerm." "Select results and expand searches node if necessary." self currentTopicPath: {self searchTopic. topic}. self assert: self currentTopic == topic. topic topicsToSearch: self toplevelTopics allButLast; startSearch.! From Marcel.Taeumel at hpi.de Tue Nov 24 08:35:52 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 24 08:51:22 2015 Subject: [squeak-dev] Re: #find in HelpBrowser In-Reply-To: References: <1448273008519-4862605.post@n4.nabble.com> Message-ID: <1448354152153-4862938.post@n4.nabble.com> Okay: http://forum.world.st/The-Trunk-HelpSystem-Core-mt-84-mcz-td4862937.html Best, Marcel -- View this message in context: http://forum.world.st/find-in-HelpBrowser-tp4862605p4862938.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Nov 24 09:12:01 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Nov 24 09:27:31 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> Message-ID: <1448356321769-4862942.post@n4.nabble.com> For the sake of maintainability, we should keep them in Trunk, make them unloadable and configure our CI environment to execute all tests *after* unloading them. We could/should do so for other packages as well. It is not only about having a minimal base system were things can be loaded but about a base system that represents a fair trade-off for maintenance while supporting things to be unloadable. :) Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Traits-pre-307-mcz-tp4862218p4862942.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lecteur at zogotounga.net Tue Nov 24 10:24:19 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Tue Nov 24 10:24:15 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> Message-ID: <56543AD3.1020503@zogotounga.net> > You say "Nobody cares. > Nobody wants to make Squeak better. The only thing the Squeak community > values is compatibility with Alan's demos, and a version of Etoys that > nobody uses.". None of those statements are true of my efforts or, as > far as I can see, of the significant efforts of the HPI team, or of Tim > Rowledge, if Chris Muller or Levente Uzoni, and probably a lot of other > folks too. > > Squeak is my day to day workhorse. The HOI folks are improving the > environment at great velocity. Squeak 5 is ~40% faster than Squeak 4.6. > Neither of these things are true because no one cares. +1 And if I may add: the feeling that "nobody cares" is a permeating one. Not many people give feedback about what they care about (me included). In my case, I definitely have the feeling that nobody cares about anything I ever did in Squeak during about 15 years now, which to day includes: a modular Lisp/Scheme implementation, an extension for functional programming, the upgrading of the Prolog implementation, a vast system for musical composition, and a Space Invader reboot. It's fortunate I did not do this for glory and fame :) Even more, I still mostly feel like a complete outsider (probably because I build things on top of Squeak instead of working on the core, and possibly also because I work alone and have no position in industry or academia). I'm so convinced nobody cares about what I do that stopped long ago sending fixes to bug I encounters: I just fix them in my code. For example, the Saucers game I did has a much faster way of handling morphs, down to modified #addMorph: logic. This could be leveraged, if someone looked at the code. But you cannot command interest. Well, that's how it is. I have the same experience with Csound people, so I'm pretty sure there is nothing specific to Squeak in these matters. The web is a cold place. Cheers, Stef From frank.shearar at gmail.com Tue Nov 24 10:29:20 2015 From: frank.shearar at gmail.com (Frank Shearar) Date: Tue Nov 24 10:29:22 2015 Subject: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz In-Reply-To: <20151124030022.GA13124@shell.msen.com> References: <565368f2.90628c0a.73a40.7970SMTPIN_ADDED_MISSING@mx.google.com> <20151124030022.GA13124@shell.msen.com> Message-ID: On 24 November 2015 at 03:00, David T. Lewis wrote: > On Mon, Nov 23, 2015 at 11:30:44PM +0100, karl ramberg wrote: >> On Mon, Nov 23, 2015 at 11:17 PM, tim Rowledge wrote: >> >> > >> > > On 23-11-2015, at 1:16 PM, Chris Muller wrote: >> > > >> > > Is this so that Scratch users won't have to see the pre-debugger? >> > >> > Nah, the Scratch code handles it in ScratchSoundRecroderDialog or >> > some-such. These couple of changes are simply suggestions for more politely >> > handling a possible problem in a way that is a touch less painful than a >> > primitiveFailed within a critical block. If people prefer the plain >> > notifier for an unhandled Warning, fine. >> > >> > ChatNotes etc are not used by Scratch - though enabling group chat could >> > be fun... >> > >> > > If >> > > a Scratch kid gets a debugger and clicks "Debug" isntead of >> > > "Abanadon". They might get confused or they might learn something..? >> > >> > I suspect a teacher of a class of 30-40 8 year olds trying to keep their >> > minds on the required lesson might not see it as at all amusing. Remember, >> > Scratch usage is now part of the national curriculum in the UK. >> > >> >> Oh, that's really big. >> Hope they enjoy it :-) >> > > Indeed, it sounds like a pretty big deal, but not something that I would > have remembered since I did not know about it in the first place. Tim, > can you provide a link to "Scratch usage is now part of the national > curriculum in the UK"? > > And when they say "Scratch" does it mean the real one, or the "improved" > version that was reimplemented in a soon-to-be-dead language by wannabe > IT managers? I help run a Code Club (https://www.codeclub.org.uk/) at my boys' school. It's an _old_ real Scratch, because we see a bug that Tim, on the latest shiny real one, doesn't see, but it's definitely the Real Scratch. I don't know about official announcements etc., though. You'll see in the Code Club sample projects target the Pretender Scratch. (Also, see the Code Club curriculum: https://www.codeclubprojects.org/en-GB/resources/scratch-intro/) So maybe it's a school-by-school thing. frank > Dave From karlramberg at gmail.com Tue Nov 24 15:12:09 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 24 15:12:12 2015 Subject: [squeak-dev] Re: #find in HelpBrowser In-Reply-To: <1448354152153-4862938.post@n4.nabble.com> References: <1448273008519-4862605.post@n4.nabble.com> <1448354152153-4862938.post@n4.nabble.com> Message-ID: Nice. BTW do you know how to hook up HelpBrowser on a package like we do on classes ? Best, Karl On Tue, Nov 24, 2015 at 9:35 AM, marcel.taeumel wrote: > Okay: > http://forum.world.st/The-Trunk-HelpSystem-Core-mt-84-mcz-td4862937.html > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/find-in-HelpBrowser-tp4862605p4862938.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151124/dcb83942/attachment.htm From asqueaker at gmail.com Tue Nov 24 16:16:05 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 24 16:16:48 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1054.mcz In-Reply-To: <56542119.f7608c0a.b28bf.03a4SMTPIN_ADDED_MISSING@mx.google.com> References: <56542119.f7608c0a.b28bf.03a4SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: > 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. From asqueaker at gmail.com Tue Nov 24 16:28:58 2015 From: asqueaker at gmail.com (Chris Muller) Date: Tue Nov 24 16:29:41 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <56543AD3.1020503@zogotounga.net> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> Message-ID: > And if I may add: the feeling that "nobody cares" is a permeating one. Not > many people give feedback about what they care about (me included). > > In my case, I definitely have the feeling that nobody cares about anything I > ever did in Squeak during about 15 years now, I do! :) > which to day includes: a > modular Lisp/Scheme implementation, an extension for functional programming, > the upgrading of the Prolog implementation, a vast system for musical > composition, and a Space Invader reboot. No, your stuff helped us tremendously when we reported our progress to the SFC back around that time of the dismal 4.5 Release. But I do not always say so. Nor do you (as you admitted, "me included"). So maybe the shortage is of compliements than caring..? Or a shortage of positive thinking? > It's fortunate I did not do this for glory and fame :) That's when people make their best stuff.. > Even more, I still mostly feel like a complete outsider (probably because I > build things on top of Squeak instead of working on the core, and possibly > also because I work alone and have no position in industry or academia). > > I'm so convinced nobody cares about what I do that stopped long ago sending > fixes to bug I encounters: I just fix them in my code. For example, the > Saucers game I did has a much faster way of handling morphs, down to > modified #addMorph: logic. This could be leveraged, if someone looked at the > code. But you cannot command interest. > > Well, that's how it is. I have the same experience with Csound people, so > I'm pretty sure there is nothing specific to Squeak in these matters. The > web is a cold place. From hannes.hirzel at gmail.com Tue Nov 24 17:00:01 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Nov 24 17:00:05 2015 Subject: Use of the Scratch program in the UK? (Re: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz) Message-ID: On 11/24/15, David T. Lewis wrote: > On Mon, Nov 23, 2015 at 11:30:44PM +0100, karl ramberg wrote: >> On Mon, Nov 23, 2015 at 11:17 PM, tim Rowledge wrote: >> >> > >> > > On 23-11-2015, at 1:16 PM, Chris Muller wrote: >> > > >> > > Is this so that Scratch users won't have to see the pre-debugger? >> > >> > Nah, the Scratch code handles it in ScratchSoundRecroderDialog or >> > some-such. These couple of changes are simply suggestions for more >> > politely >> > handling a possible problem in a way that is a touch less painful than >> > a >> > primitiveFailed within a critical block. If people prefer the plain >> > notifier for an unhandled Warning, fine. >> > >> > ChatNotes etc are not used by Scratch - though enabling group chat >> > could >> > be fun... >> > >> > > If >> > > a Scratch kid gets a debugger and clicks "Debug" isntead of >> > > "Abanadon". They might get confused or they might learn something..? >> > >> > I suspect a teacher of a class of 30-40 8 year olds trying to keep >> > their >> > minds on the required lesson might not see it as at all amusing. >> > Remember, >> > Scratch usage is now part of the national curriculum in the UK. >> > >> >> Oh, that's really big. >> Hope they enjoy it :-) >> > > Indeed, it sounds like a pretty big deal, but not something that I would > have remembered since I did not know about it in the first place. Tim, > can you provide a link to "Scratch usage is now part of the national > curriculum in the UK"? So far I found http://www.naace.co.uk/curriculum/primaryguide Page 14 shows a screen with scratch. This is from an association of UK ICT teachers. There are web pages from the UK government but I did not find the reference yet. --Hannes > And when they say "Scratch" does it mean the real one, or the "improved" > version that was reimplemented in a soon-to-be-dead language by wannabe > IT managers? > > Dave > > > From hannes.hirzel at gmail.com Tue Nov 24 17:21:17 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Nov 24 17:21:19 2015 Subject: Use of the Scratch program in the UK? (Re: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz) In-Reply-To: References: Message-ID: On 11/24/15, H. Hirzel wrote: > On 11/24/15, David T. Lewis wrote: >> On Mon, Nov 23, 2015 at 11:30:44PM +0100, karl ramberg wrote: >>> On Mon, Nov 23, 2015 at 11:17 PM, tim Rowledge wrote: >>> >>> > >>> > > On 23-11-2015, at 1:16 PM, Chris Muller wrote: >>> > > >>> > > Is this so that Scratch users won't have to see the pre-debugger? >>> > >>> > Nah, the Scratch code handles it in ScratchSoundRecroderDialog or >>> > some-such. These couple of changes are simply suggestions for more >>> > politely >>> > handling a possible problem in a way that is a touch less painful than >>> > a >>> > primitiveFailed within a critical block. If people prefer the plain >>> > notifier for an unhandled Warning, fine. >>> > >>> > ChatNotes etc are not used by Scratch - though enabling group chat >>> > could >>> > be fun... >>> > >>> > > If >>> > > a Scratch kid gets a debugger and clicks "Debug" isntead of >>> > > "Abanadon". They might get confused or they might learn >>> > > something..? >>> > >>> > I suspect a teacher of a class of 30-40 8 year olds trying to keep >>> > their >>> > minds on the required lesson might not see it as at all amusing. >>> > Remember, >>> > Scratch usage is now part of the national curriculum in the UK. >>> > >>> >>> Oh, that's really big. >>> Hope they enjoy it :-) >>> >> >> Indeed, it sounds like a pretty big deal, but not something that I would >> have remembered since I did not know about it in the first place. Tim, >> can you provide a link to "Scratch usage is now part of the national >> curriculum in the UK"? > > So far I found > > http://www.naace.co.uk/curriculum/primaryguide > > Page 14 shows a screen with scratch. This is from an association of > UK ICT teachers. > > There are web pages from the UK government but I did not find the reference > yet. And here an announcement for teachers to learn about Scratch in Jan 2016 https://www.sciencelearningcentres.org.uk/cpd/ondemand/fc0b576e-61a4-46b8-a4de-943f1fa02124/delivering-the-coding-elements-of-the-national-curriculum-at-ks2/ "Experience a number of different methods to develop both your skills in Scratch and the teaching techniques that you can use to make it work for you and your students." "This course takes you through the principles of the computing curriculum coding programming, giving you ?hand on? opportunities to experience a number of different methods hands on time to develop both your skills in Scratch and the teaching techniques that you can use to make it work for you and your students. In 2 days, we will take you from creating simple programs to the exciting coded world of creating your own computer games." > --Hannes > > >> And when they say "Scratch" does it mean the real one, or the "improved" >> version that was reimplemented in a soon-to-be-dead language by wannabe >> IT managers? >> >> Dave >> >> >> > From karlramberg at gmail.com Tue Nov 24 18:45:59 2015 From: karlramberg at gmail.com (karl ramberg) Date: Tue Nov 24 18:46:01 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <56543AD3.1020503@zogotounga.net> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> Message-ID: On Tue, Nov 24, 2015 at 11:24 AM, St?phane Rollandin wrote: > You say "Nobody cares. >> Nobody wants to make Squeak better. The only thing the Squeak community >> values is compatibility with Alan's demos, and a version of Etoys that >> nobody uses.". None of those statements are true of my efforts or, as >> far as I can see, of the significant efforts of the HPI team, or of Tim >> Rowledge, if Chris Muller or Levente Uzoni, and probably a lot of other >> folks too. >> >> Squeak is my day to day workhorse. The HOI folks are improving the >> environment at great velocity. Squeak 5 is ~40% faster than Squeak 4.6. >> Neither of these things are true because no one cares. >> > > +1 > > And if I may add: the feeling that "nobody cares" is a permeating one. Not > many people give feedback about what they care about (me included). > > In my case, I definitely have the feeling that nobody cares about anything > I ever did in Squeak during about 15 years now, which to day includes: a > modular Lisp/Scheme implementation, an extension for functional > programming, the upgrading of the Prolog implementation, a vast system for > musical composition, and a Space Invader reboot. > > It's fortunate I did not do this for glory and fame :) > > Even more, I still mostly feel like a complete outsider (probably because > I build things on top of Squeak instead of working on the core, and > possibly also because I work alone and have no position in industry or > academia). > > I'm so convinced nobody cares about what I do that stopped long ago > sending fixes to bug I encounters: I just fix them in my code. For example, > the Saucers game I did has a much faster way of handling morphs, down to > modified #addMorph: logic. This could be leveraged, if someone looked at > the code. But you cannot command interest. > I want to look at the code for the Saucers game. The one I downloaded from you page seemed to be in a locked image and I never got around to ask how to get to the code... So if you have it accessible I'm interested. Best, Kar > > Well, that's how it is. I have the same experience with Csound people, so > I'm pretty sure there is nothing specific to Squeak in these matters. The > web is a cold place. > > > Cheers, > > Stef > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151124/77521cc8/attachment.htm From hannes.hirzel at gmail.com Tue Nov 24 20:41:07 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Nov 24 20:41:09 2015 Subject: Environments -- how to proceed (Re: [squeak-dev] The Inbox: Traits-pre.307.mcz) Message-ID: On 11/23/15, Colin Putney wrote: > On Mon, Nov 23, 2015 at 6:30 AM, Frank Shearar > wrote: > > There's definitely a pattern there: someone has a great idea for a >> fairly advanced capability, heroically tries to do all the work solo, >> or with minimal help from the community, burns out and the work never >> gets finished. > > >> > Traits, or things close enough to traits that you end up splitting >> hairs to tell them apart, are a core feature of so many languages >> nowadays (Ruby, Newspeak, Scala, Perl 6, Rust, off the top of my >> head), while we let the idea die on the vine, for want of tooling >> support. And I'm sure Environments will, too. >> >> Sure, if it's not providing value, and no one's willing to do the >> work, just kill the thing and be done. I'd rather see people pitch in >> and help _make_ the dang thing a proper part of the system. ("Thing" >> here applies mostly to Environments, but Islands and Traits too.) But >> I'm also not going to run around pointing fingers: I'm too burned out >> to do anything to help, so I'll just shut up now. >> > > Yup, that about sums it up. > > Over the last year or so, I've attempted to resume work on Environments > several times only to get discouraged and give up. The "easy" part is done, > and what remains is tracing through gnarly legacy code and figuring out > where the SystemDictionary assumptions are. It's hard. > > The reason I started working on OmniBrowser 10 years ago was because > Nathanael Sch?rli commented that the hardest part of getting the Traits > prototype working was adding tool support. The idea was to make a modular > tool set that could easily be modified and *make language improvements > easier*. That failed. OB ended up being a great IDE once Lukas did the > refactoring support, but nobody uses it. I spent years trying to hunt down > the underlying reasons for that and remove the obstacles, but in the end, > "not exactly like the tools I already know" and "requires installation" > proved insurmountable. > > This is why I wanted to develop Environments in the trunk and not have it > be an optional thing. That worked fairly well, but then I ran into the > exact same problem that Nathanael did with Traits. > > I really want Environments to succeed. I do. I wrote the cleanest code I > could, with tests and comments. I engaged with the community from the > beginning and throughout the process trying to build support for the idea > and knowledge about the implementation. Eventually, I had to take a break > and deal with meatspace things like moving and a new job, but I was > determined to get back into it as soon as I could. > > After time away from it, though, thinking about Environments fills me with > despair. Nobody cares. Nobody wants to make Squeak better. The only thing > the Squeak community values is compatibility with Alan's demos, and a > version of Etoys that nobody uses. Ok, that's over the top. But to a first > approximation it's true. It's why we lost the Pharo folks. > > So here's my proposal: let's decide as a community whether we want > Environments or not. I pledge to help implement the decision either way. If > people want to go back to the classical ST-80 global namespace, I'll help > with that. Or we can figure out what would be required for Environments to > actually be worth keeping and I'll help work on that too. > > Thoughts? > > Colin Environments as such work in the sense that having added them does not do any harm besides that it broke saving and loading projects. So in this sense a first result has been achieved. I understand that there is progress as well on the issue of fixing loading and saving projects. I wonder what is still needed to make work fully. Are there any other shortcomings cause by the introduction of environments? And then there is surely lack of documentation. I do not know how to use environments. I assume there are examples but they are hidden in emails many months or even years ago and are difficult to trace. At the moment I think I could live with limited tool support for environments. --Hannes From hannes.hirzel at gmail.com Tue Nov 24 20:47:50 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Nov 24 20:47:54 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> Message-ID: On 11/24/15, karl ramberg wrote: > On Tue, Nov 24, 2015 at 11:24 AM, St?phane Rollandin > > wrote: > >> You say "Nobody cares. >>> Nobody wants to make Squeak better. The only thing the Squeak community >>> values is compatibility with Alan's demos, and a version of Etoys that >>> nobody uses.". None of those statements are true of my efforts or, as >>> far as I can see, of the significant efforts of the HPI team, or of Tim >>> Rowledge, if Chris Muller or Levente Uzoni, and probably a lot of other >>> folks too. >>> >>> Squeak is my day to day workhorse. The HOI folks are improving the >>> environment at great velocity. Squeak 5 is ~40% faster than Squeak 4.6. >>> Neither of these things are true because no one cares. >>> >> >> +1 >> >> And if I may add: the feeling that "nobody cares" is a permeating one. >> Not >> many people give feedback about what they care about (me included). >> >> In my case, I definitely have the feeling that nobody cares about >> anything >> I ever did in Squeak during about 15 years now, which to day includes: a >> modular Lisp/Scheme implementation, an extension for functional >> programming, the upgrading of the Prolog implementation, a vast system >> for >> musical composition, and a Space Invader reboot. >> >> It's fortunate I did not do this for glory and fame :) >> >> Even more, I still mostly feel like a complete outsider (probably because >> I build things on top of Squeak instead of working on the core, and >> possibly also because I work alone and have no position in industry or >> academia). >> >> I'm so convinced nobody cares about what I do that stopped long ago >> sending fixes to bug I encounters: I just fix them in my code. For >> example, >> the Saucers game I did has a much faster way of handling morphs, down to >> modified #addMorph: logic. This could be leveraged, if someone looked at >> the code. But you cannot command interest. >> > > I want to look at the code for the Saucers game. The one I downloaded from > you page seemed to be in a locked image and I never got around to ask how > to get to the code... > So if you have it accessible I'm interested. > > Best, > Kar Hello Stephane Is it possible to make it available on SqueakMap? --Hannes >> >> Well, that's how it is. I have the same experience with Csound people, so >> I'm pretty sure there is nothing specific to Squeak in these matters. The >> web is a cold place. >> >> >> Cheers, >> >> Stef >> >> >> > From hannes.hirzel at gmail.com Tue Nov 24 20:53:48 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Nov 24 20:53:51 2015 Subject: [squeak-dev] re: Environments update In-Reply-To: References: Message-ID: This was a thread on environments which started in March 2013. Were there other updates? --Hannes On 3/11/13, Craig Latta wrote: > > Hi Colin-- > >> I'd appreciate a code review from anybody who's interested in this >> stuff. > > No class comments? I'd like to see a usage summary. > > > thanks, > > -C > > -- > Craig Latta > www.netjam.org/resume > +31 6 2757 7177 (SMS ok) > + 1 415 287 3547 (no SMS) > > > From hannes.hirzel at gmail.com Tue Nov 24 21:01:09 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Nov 24 21:01:11 2015 Subject: [squeak-dev] It's not yet clear how serialization should work in the presence of environments In-Reply-To: <5427C41F.5060805@gmx.net> References: <20140928022023.GA61861@shell.msen.com> <5427C41F.5060805@gmx.net> Message-ID: On 9/28/14, Herbert K?nig wrote: > Am 28.09.2014 um 05:01 schrieb Colin Putney: >> >> >> In the meantime, though, let's fix the simple case. :-) >> >> Colin >> > Thanks a lot, Colin > This simple case where there is only one environment is described in http://bugs.squeak.org/view.php?id=7814 And currently probably nearly 100% of the users still have only one environment. What would it mean to fix this case? --Hannes From hannes.hirzel at gmail.com Tue Nov 24 21:09:08 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Nov 24 21:09:09 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On 11/21/15, Chris Muller wrote: > On Fri, Nov 20, 2015 at 12:40 PM, tim Rowledge wrote: >> Should we keep Traits? It was a neat idea that I was happy to support but >> it got left unfinished. Where are tools to develop & manage Traits? Where >> is the usage? >> >> Unless there is a compelling reason - and subsequent effort to fill out >> support - I suggest we should remove them. Along with Islands. And >> Universes. And probably Environments too, since that has stalled without >> becoming a proper part of the system. > > +1. +1. +1 and, +1. Doing the most with the least is the most > beautiful and admirable aspect of Squeak. Six reserved words, > assignment, and sending messages to objects. That's pretty much it. > Those concepts alone form the building blocks of the entire IDE, and > still able to push the language with clever hacks like Mixins, > Generators, Promises, Futures, WriteBarriers, and Continuations. > > Traits, Slots, Islands, Environments and Pragmas never convinced me > that they deserve to be part of a language this wonderfully sparse. +1 for removing Universes at the moment. There is no server for them and updating SqueakMap which is done at a modest pace replaces the need for them. I think this has been discussed before the release of 4.6 and people agreed but at that time it was to late to do it. --Hannes From commits at source.squeak.org Tue Nov 24 22:55:02 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Nov 24 22:55:04 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151124225502.32012.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009194.html Name: Morphic-mt.1054 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. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009195.html Name: HelpSystem-Core-mt.84 Ancestors: HelpSystem-Core-mt.83 Removes dead code. Avoid losing unaccepted changes without confirmation. Like on code editors. ============================================= From lecteur at zogotounga.net Wed Nov 25 08:13:55 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Wed Nov 25 08:13:58 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> Message-ID: <56556DC3.40300@zogotounga.net> > So maybe the shortage is of compliements than caring..? Or a shortage > of positive thinking? Shortage of people actually using the stuff :) Stef From lecteur at zogotounga.net Wed Nov 25 08:17:10 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Wed Nov 25 08:17:07 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> Message-ID: <56556E86.8010400@zogotounga.net> > I want to look at the code for the Saucers game. The one I downloaded > from you page seemed to be in a locked image and I never got around to > ask how to get to the code... > So if you have it accessible I'm interested. Your can get the code from a link at the bottom of the page. Here's the link anyway: http://www.zogotounga.net/comp/squeak/Saucers1.6.sar Note that this is for 4.5 Best, Stef From lecteur at zogotounga.net Wed Nov 25 08:18:56 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Wed Nov 25 08:18:49 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> Message-ID: <56556EF0.9030405@zogotounga.net> > Hello Stephane > Is it possible to make it available on SqueakMap? Ok, I'll do so. Stef From Marcel.Taeumel at hpi.de Wed Nov 25 09:07:34 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Nov 25 09:23:11 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1054.mcz In-Reply-To: References: Message-ID: <1448442454668-4863250.post@n4.nabble.com> 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 -- 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. From hannes.hirzel at gmail.com Wed Nov 25 09:24:03 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Nov 25 09:24:05 2015 Subject: [squeak-dev] re: Environments update In-Reply-To: References: Message-ID: Original proposal for Environments by Colin Putney was in June 2012 I put it here http://wiki.squeak.org/squeak/6218 --Hannes On 11/24/15, H. Hirzel wrote: > This was a thread on environments which started in March 2013. > > Were there other updates? > > --Hannes > > On 3/11/13, Craig Latta wrote: >> >> Hi Colin-- >> >>> I'd appreciate a code review from anybody who's interested in this >>> stuff. >> >> No class comments? I'd like to see a usage summary. >> >> >> thanks, >> >> -C >> >> -- >> Craig Latta >> www.netjam.org/resume >> +31 6 2757 7177 (SMS ok) >> + 1 415 287 3547 (no SMS) >> >> >> > From Das.Linux at gmx.de Wed Nov 25 10:30:02 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Nov 25 10:30:09 2015 Subject: [squeak-dev] The Trunk: Morphic-mt.1054.mcz In-Reply-To: <1448442454668-4863250.post@n4.nabble.com> References: <1448442454668-4863250.post@n4.nabble.com> Message-ID: <5C9A0301-238E-4457-855A-83B0953D2585@gmx.de> On 25.11.2015, at 10:07, marcel.taeumel 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. > From hannes.hirzel at gmail.com Wed Nov 25 11:00:50 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Nov 25 11:00:52 2015 Subject: [squeak-dev] re: Environments update In-Reply-To: References: Message-ID: And the March 2013 update is now here http://wiki.squeak.org/squeak/6220 --HH On 11/25/15, H. Hirzel wrote: > Original proposal for Environments by Colin Putney was in June 2012 > > I put it here > http://wiki.squeak.org/squeak/6218 > > --Hannes > > On 11/24/15, H. Hirzel wrote: >> This was a thread on environments which started in March 2013. >> >> Were there other updates? >> >> --Hannes >> >> On 3/11/13, Craig Latta wrote: >>> >>> Hi Colin-- >>> >>>> I'd appreciate a code review from anybody who's interested in this >>>> stuff. >>> >>> No class comments? I'd like to see a usage summary. >>> >>> >>> thanks, >>> >>> -C >>> >>> -- >>> Craig Latta >>> www.netjam.org/resume >>> +31 6 2757 7177 (SMS ok) >>> + 1 415 287 3547 (no SMS) >>> >>> >>> >> > From karlramberg at gmail.com Wed Nov 25 11:01:43 2015 From: karlramberg at gmail.com (karl ramberg) Date: Wed Nov 25 11:01:47 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <56556E86.8010400@zogotounga.net> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> <56556E86.8010400@zogotounga.net> Message-ID: Ah, thanks :-) Best, Karl On Wed, Nov 25, 2015 at 9:17 AM, St?phane Rollandin wrote: > I want to look at the code for the Saucers game. The one I downloaded >> from you page seemed to be in a locked image and I never got around to >> ask how to get to the code... >> So if you have it accessible I'm interested. >> > > Your can get the code from a link at the bottom of the page. > Here's the link anyway: > http://www.zogotounga.net/comp/squeak/Saucers1.6.sar > > Note that this is for 4.5 > > Best, > > Stef > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/b607b443/attachment.htm From frank.shearar at gmail.com Wed Nov 25 11:04:30 2015 From: frank.shearar at gmail.com (Frank Shearar) Date: Wed Nov 25 11:04:31 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> Message-ID: On 24 November 2015 at 21:09, H. Hirzel wrote: > On 11/21/15, Chris Muller wrote: >> On Fri, Nov 20, 2015 at 12:40 PM, tim Rowledge wrote: >>> Should we keep Traits? It was a neat idea that I was happy to support but >>> it got left unfinished. Where are tools to develop & manage Traits? Where >>> is the usage? >>> >>> Unless there is a compelling reason - and subsequent effort to fill out >>> support - I suggest we should remove them. Along with Islands. And >>> Universes. And probably Environments too, since that has stalled without >>> becoming a proper part of the system. >> >> +1. +1. +1 and, +1. Doing the most with the least is the most >> beautiful and admirable aspect of Squeak. Six reserved words, >> assignment, and sending messages to objects. That's pretty much it. >> Those concepts alone form the building blocks of the entire IDE, and >> still able to push the language with clever hacks like Mixins, >> Generators, Promises, Futures, WriteBarriers, and Continuations. >> >> Traits, Slots, Islands, Environments and Pragmas never convinced me >> that they deserve to be part of a language this wonderfully sparse. > > +1 for removing Universes at the moment. There is no server for them > and updating SqueakMap which is done at a modest pace replaces the > need for them. I was under the impression that Universes _was removed_, like, back in 4.4 or the beginning of the 4.5 cycle, when I was up to my eyeballs in hairy dependencies... Certainly the build processes think so - https://github.com/squeak-smalltalk/squeak-ci/blob/master/package-load-scripts/Universes.st is the _load script_ for Universes (implying its _unloaded by default_ state). frank > I think this has been discussed before the release of 4.6 and people > agreed but at that time it was to late to do it. > > --Hannes > From commits at source.squeak.org Wed Nov 25 11:32:20 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 25 11:32:21 2015 Subject: [squeak-dev] The Inbox: Tools-kfr.657.mcz Message-ID: A new version of Tools was added to project The Inbox: http://source.squeak.org/inbox/Tools-kfr.657.mcz ==================== Summary ==================== Name: Tools-kfr.657 Author: kfr Time: 25 November 2015, 12:31:59.64 pm UUID: 4c535bc5-5f99-42b3-8caa-4dc9bafb00ba Ancestors: Tools-kfr.656 Adds a toggle to show packages alphabetically in the PackagePaneBrowser =============== Diff against Tools-kfr.656 =============== Item was changed: Browser subclass: #PackagePaneBrowser + instanceVariableNames: 'package packageListIndex packageList packageListSorted' - instanceVariableNames: 'package packageListIndex packageList' classVariableNames: '' poolDictionaries: '' category: 'Tools-Browser'! !PackagePaneBrowser commentStamp: '' prior: 0! A package browser represents a hierarchical query path through an organization of class and method information. It parses class categories into a two-level hierarchy on the first '-' character, giving "packages" (e.g., Magnitude, Collections, Graphics, etc.), and "categories" (e.g., Magnitude-General and Magnitude-Number). Instance Variables: package the "category header," e.g., #Magnitudes or #Collections packageListIndex The index in the package list packageList the list of package names ! Item was changed: ----- Method: PackagePaneBrowser>>mainPackageMenu: (in category 'package list') ----- mainPackageMenu: aMenu "Answer a Menu of operations on class packages to be displayed when the operate menu button is pressed." ^aMenu addList: #( ('find class...' findClass) ('recent classes...' recent) - ('reorganize' editSystemCategories) + ('show alphabetically' togglePackageListSorted) + ('show unsorted' togglePackageListSorted) ('update' updatePackages)); yourself. ! Item was changed: ----- Method: PackagePaneBrowser>>packageList (in category 'package list') ----- packageList "Answer a list of the packages in the current system organization." | str stream | str := Set new: 100. stream := WriteStream on: (Array new: 100). systemOrganizer categories do: [ :categ | | cats | cats := categ asString copyUpTo: $-. (str includes: cats) ifFalse: [str add: cats. stream nextPut: cats]]. + packageListSorted + ifTrue:[ ^stream contents sorted] + ifFalse:[ ^stream contents]! - ^stream contents! Item was changed: ----- Method: PackagePaneBrowser>>systemOrganizer: (in category 'initialize-release') ----- systemOrganizer: aSystemOrganizer "Initialize the receiver as a perspective on the system organizer, aSystemOrganizer. Typically there is only one--the system variable SystemOrganization." super systemOrganizer: aSystemOrganizer . + packageListIndex := 0. + packageListSorted := false! - packageListIndex := 0! Item was added: + ----- Method: PackagePaneBrowser>>togglePackageListSorted (in category 'package list') ----- + togglePackageListSorted + packageListSorted + ifTrue:[ packageListSorted := false] + ifFalse:[ packageListSorted := true] + ! From hannes.hirzel at gmail.com Wed Nov 25 12:39:47 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Nov 25 12:39:50 2015 Subject: [squeak-dev] Removing of Universe classes Message-ID: On 11/25/15, Frank Shearar wrote: > On 24 November 2015 at 21:09, H. Hirzel wrote: >> On 11/21/15, Chris Muller wrote: >>> On Fri, Nov 20, 2015 at 12:40 PM, tim Rowledge wrote: >>>> I suggest we should Universes. >>> +1. +1. +1 and, +1. .. > > I was under the impression that Universes _was removed_, like, back in > 4.4 or the beginning of the 4.5 cycle, when I was up to my eyeballs in > hairy dependencies... Certainly the build processes think so - > https://github.com/squeak-smalltalk/squeak-ci/blob/master/package-load-scripts/Universes.st > is the _load script_ for Universes (implying its _unloaded by default_ > state). > > frank > >> I think this has been discussed before the release of 4.6 and people >> agreed but at that time it was to late to do it. >> >> --Hannes >> > > Hi Frank Indeed I do not see a Universe browser in the app menu of Squeak 5.0. However there seem to be some classes left in the system, see screen shot. So there was removal but it seems it was not done completely. -------------- next part -------------- A non-text attachment was scrubbed... Name: Removing_of_Universe_classes_in_Squeak5.0_2015-11-25.png Type: image/png Size: 27095 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/1aa1a108/Removing_of_Universe_classes_in_Squeak5.0_2015-11-25.png From karlramberg at gmail.com Wed Nov 25 13:02:29 2015 From: karlramberg at gmail.com (karl ramberg) Date: Wed Nov 25 13:02:32 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: References: Message-ID: Universes was removed from menus because it was not functional. To remove Universes from Trunk one has to take into account the update number. I think the update number is the sum of all package versions ? I'm not sure how one does this. Best, Karl On Wed, Nov 25, 2015 at 1:39 PM, H. Hirzel wrote: > On 11/25/15, Frank Shearar wrote: > > On 24 November 2015 at 21:09, H. Hirzel wrote: > >> On 11/21/15, Chris Muller wrote: > >>> On Fri, Nov 20, 2015 at 12:40 PM, tim Rowledge > wrote: > > > >>>> I suggest we should Universes. > > > >>> +1. +1. +1 and, +1. > .. > > > > > I was under the impression that Universes _was removed_, like, back in > > 4.4 or the beginning of the 4.5 cycle, when I was up to my eyeballs in > > hairy dependencies... Certainly the build processes think so - > > > https://github.com/squeak-smalltalk/squeak-ci/blob/master/package-load-scripts/Universes.st > > is the _load script_ for Universes (implying its _unloaded by default_ > > state). > > > > frank > > > >> I think this has been discussed before the release of 4.6 and people > >> agreed but at that time it was to late to do it. > >> > >> --Hannes > >> > > > > > > Hi Frank > > Indeed I do not see a Universe browser in the app menu of Squeak 5.0. > > However there seem to be some classes left in the system, see screen shot. > > So there was removal but it seems it was not done completely. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/3de58ee3/attachment.htm From hannes.hirzel at gmail.com Wed Nov 25 13:31:57 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Nov 25 13:32:00 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: References: Message-ID: Thanks, Karl, for this piece of information. I have updated Package Universes http://wiki.squeak.org/squeak/3785 accordingly. --HH On 11/25/15, karl ramberg wrote: > Universes was removed from menus because it was not functional. > > To remove Universes from Trunk one has to take into account the update > number. > I think the update number is the sum of all package versions ? > > I'm not sure how one does this. > > Best, > Karl > > On Wed, Nov 25, 2015 at 1:39 PM, H. Hirzel wrote: > >> On 11/25/15, Frank Shearar wrote: >> > On 24 November 2015 at 21:09, H. Hirzel >> > wrote: >> >> On 11/21/15, Chris Muller wrote: >> >>> On Fri, Nov 20, 2015 at 12:40 PM, tim Rowledge >> wrote: >> >> >> >>>> I suggest we should Universes. >> >> >> >>> +1. +1. +1 and, +1. >> .. >> >> > >> > I was under the impression that Universes _was removed_, like, back in >> > 4.4 or the beginning of the 4.5 cycle, when I was up to my eyeballs in >> > hairy dependencies... Certainly the build processes think so - >> > >> https://github.com/squeak-smalltalk/squeak-ci/blob/master/package-load-scripts/Universes.st >> > is the _load script_ for Universes (implying its _unloaded by default_ >> > state). >> > >> > frank >> > >> >> I think this has been discussed before the release of 4.6 and people >> >> agreed but at that time it was to late to do it. >> >> >> >> --Hannes >> >> >> > >> > >> >> Hi Frank >> >> Indeed I do not see a Universe browser in the app menu of Squeak 5.0. >> >> However there seem to be some classes left in the system, see screen >> shot. >> >> So there was removal but it seems it was not done completely. >> >> >> >> > From leves at elte.hu Wed Nov 25 13:50:25 2015 From: leves at elte.hu (Levente Uzonyi) Date: Wed Nov 25 13:50:29 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: References: Message-ID: This question comes up from time to time. There's an empty package named Squeak-Version in the image. When you unload a package, let's say Universes-mt.48, you add 49 (48 + 1) to the version number of Squeak-Version and save it as well to ensure that the global Squeak version number keeps increasing. Levente On Wed, 25 Nov 2015, karl ramberg wrote: > Universes was removed from menus because it was not functional. > > To remove Universes from Trunk one has to take into ?account the update number.?I think the update number is the sum of all package versions ? > > I'm not sure how one does this. > > Best, > Karl > > On Wed, Nov 25, 2015 at 1:39 PM, H. Hirzel wrote: > On 11/25/15, Frank Shearar wrote: > > On 24 November 2015 at 21:09, H. Hirzel wrote: > >> On 11/21/15, Chris Muller wrote: > >>> On Fri, Nov 20, 2015 at 12:40 PM, tim Rowledge wrote: > > > >>>> I suggest we should Universes. > > > >>> +1.? +1.? +1 and, +1. > .. > > > > > I was under the impression that Universes _was removed_, like, back in > > 4.4 or the beginning of the 4.5 cycle, when I was up to my eyeballs in > > hairy dependencies... Certainly the build processes think so - > > https://github.com/squeak-smalltalk/squeak-ci/blob/master/package-load-scripts/Universes.st > > is the _load script_ for Universes (implying its _unloaded by default_ > > state). > > > > frank > > > >> I think this has been discussed before the release of 4.6 and people > >> agreed but at that time it was to late to do it. > >> > >> --Hannes > >> > > > > > > Hi Frank > > Indeed I do not see a Universe browser in the app menu of Squeak 5.0. > > However there seem to be some classes left in the system, see screen shot. > > So there was removal but it seems it was not done completely. > > > > > > From edgardec2005 at gmail.com Wed Nov 25 13:59:13 2015 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Wed Nov 25 13:59:20 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: Message-ID: Any code changing the image as loading a package from trunk should end in a numbered change set. This is how Cuis works and how Squeak should work. And please , get rid of Squeak-Version also. As we have automatic procedures, we should have a way of made reliable change sets and put this change sets in GitHub On 11/25/15, 10:50 AM, "Levente Uzonyi" wrote: > This question comes up from time to time. > There's an empty package named Squeak-Version in the image. When you > unload a package, let's say Universes-mt.48, you add 49 (48 + 1) to the > version number of Squeak-Version and save it as well to ensure that the > global Squeak version number keeps increasing. > > Levente From frank.shearar at gmail.com Wed Nov 25 14:18:32 2015 From: frank.shearar at gmail.com (Frank Shearar) Date: Wed Nov 25 14:18:34 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: References: Message-ID: On 25 November 2015 at 13:59, Edgar J. De Cleene wrote: > > Any code changing the image as loading a package from trunk should end in a > numbered change set. > > This is how Cuis works and how Squeak should work. > > And please , get rid of Squeak-Version also. > As we have automatic procedures, we should have a way of made reliable > change sets and put this change sets in GitHub We can't, without a fair amount of work. Your squeak "version" is the sum of versions of all the base packages. When we remove packages from the base system, we must bump Squeak-Version's version by the removed package's version number, so that the aggregate version number doesn't decrease. It's a bit crazy (because if you and I both have packages Foo and Bar, but my Foo is one version ahead of yours, and my Bar one version behind, the aggregate version number is the same), but it's what's there. And fixing it won't be easy - to do it reliably you'd have to record the versions of the individual packages - you'd have a _version vector_. frank > On 11/25/15, 10:50 AM, "Levente Uzonyi" wrote: > >> This question comes up from time to time. >> There's an empty package named Squeak-Version in the image. When you >> unload a package, let's say Universes-mt.48, you add 49 (48 + 1) to the >> version number of Squeak-Version and save it as well to ensure that the >> global Squeak version number keeps increasing. >> >> Levente From hannes.hirzel at gmail.com Wed Nov 25 14:36:06 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Nov 25 14:36:08 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: References: Message-ID: Frank, what would you propose as the solution then? Just delete all the classes in the Universes package and remove the references to it and keep the empty package? --Hannes On 11/25/15, Frank Shearar wrote: > On 25 November 2015 at 13:59, Edgar J. De Cleene > wrote: >> >> Any code changing the image as loading a package from trunk should end in >> a >> numbered change set. >> >> This is how Cuis works and how Squeak should work. >> >> And please , get rid of Squeak-Version also. >> As we have automatic procedures, we should have a way of made reliable >> change sets and put this change sets in GitHub > > We can't, without a fair amount of work. Your squeak "version" is the > sum of versions of all the base packages. When we remove packages from > the base system, we must bump Squeak-Version's version by the removed > package's version number, so that the aggregate version number doesn't > decrease. > > It's a bit crazy (because if you and I both have packages Foo and Bar, > but my Foo is one version ahead of yours, and my Bar one version > behind, the aggregate version number is the same), but it's what's > there. And fixing it won't be easy - to do it reliably you'd have to > record the versions of the individual packages - you'd have a _version > vector_. > > frank > >> On 11/25/15, 10:50 AM, "Levente Uzonyi" wrote: >> >>> This question comes up from time to time. >>> There's an empty package named Squeak-Version in the image. When you >>> unload a package, let's say Universes-mt.48, you add 49 (48 + 1) to the >>> version number of Squeak-Version and save it as well to ensure that the >>> global Squeak version number keeps increasing. >>> >>> Levente > > From karlramberg at gmail.com Wed Nov 25 15:23:09 2015 From: karlramberg at gmail.com (karl ramberg) Date: Wed Nov 25 15:23:11 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: References: Message-ID: Hi, On Wed, Nov 25, 2015 at 2:50 PM, Levente Uzonyi wrote: > This question comes up from time to time. > There's an empty package named Squeak-Version in the image. When you > unload a package, let's say Universes-mt.48, you add 49 (48 + 1) to the > version number of Squeak-Version and save it as well to ensure that the > global Squeak version number keeps increasing. So one just changes the version number in the dialog box when one saves a new version ? As far as unloading the Universes, where do one put the unloading script ? And the unload script is like: (MCPackage named: 'Universes') workingCopy unload Best, Karl > > > Levente > > > On Wed, 25 Nov 2015, karl ramberg wrote: > > Universes was removed from menus because it was not functional. >> >> To remove Universes from Trunk one has to take into account the update >> number. I think the update number is the sum of all package versions ? >> >> I'm not sure how one does this. >> >> Best, >> Karl >> >> On Wed, Nov 25, 2015 at 1:39 PM, H. Hirzel >> wrote: >> On 11/25/15, Frank Shearar wrote: >> > On 24 November 2015 at 21:09, H. Hirzel >> wrote: >> >> On 11/21/15, Chris Muller wrote: >> >>> On Fri, Nov 20, 2015 at 12:40 PM, tim Rowledge < >> tim@rowledge.org> wrote: >> >> >> >>>> I suggest we should Universes. >> >> >> >>> +1. +1. +1 and, +1. >> .. >> >> > >> > I was under the impression that Universes _was removed_, like, >> back in >> > 4.4 or the beginning of the 4.5 cycle, when I was up to my >> eyeballs in >> > hairy dependencies... Certainly the build processes think so - >> > >> https://github.com/squeak-smalltalk/squeak-ci/blob/master/package-load-scripts/Universes.st >> > is the _load script_ for Universes (implying its _unloaded by >> default_ >> > state). >> > >> > frank >> > >> >> I think this has been discussed before the release of 4.6 and >> people >> >> agreed but at that time it was to late to do it. >> >> >> >> --Hannes >> >> >> > >> > >> >> Hi Frank >> >> Indeed I do not see a Universe browser in the app menu of Squeak >> 5.0. >> >> However there seem to be some classes left in the system, see >> screen shot. >> >> So there was removal but it seems it was not done completely. >> >> >> >> >> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/924a4f40/attachment.htm From commits at source.squeak.org Wed Nov 25 15:47:00 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 25 15:47:02 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz Message-ID: Karl Ramberg uploaded a new version of Universes to project The Trunk: http://source.squeak.org/trunk/Universes-kfr.49.mcz ==================== Summary ==================== Name: Universes-kfr.49 Author: kfr Time: 25 November 2015, 4:41:51.099 pm UUID: 7fee292f-53fe-4b4d-822a-bf8798bd2cda Ancestors: Universes-mt.48 Removal of Universes =============== Diff against Universes-mt.48 =============== Item was added: + (PackageInfo named: 'Universes') preamble: '"below, add code to be run before the loading of this package" + (MCPackage named: ''Universes'') workingCopy unload'! From commits at source.squeak.org Wed Nov 25 15:48:46 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 25 15:48:48 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr. 4711.mcz Message-ID: Karl Ramberg uploaded a new version of Squeak-Version to project The Trunk: http://source.squeak.org/trunk/Squeak-Version-kfr. 4711.mcz ==================== Summary ==================== Name: Squeak-Version-kfr. 4711 Author: kfr Time: 25 November 2015, 4:48:22.871 pm UUID: 499e1646-64b4-4f30-a422-471455781462 Ancestors: Squeak-Version-ar.4662 Removal of Universes =============== Diff against Squeak-Version-ar.4662 =============== From karlramberg at gmail.com Wed Nov 25 15:52:44 2015 From: karlramberg at gmail.com (karl ramberg) Date: Wed Nov 25 15:52:46 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr. 4711.mcz In-Reply-To: <5655d864.0c918c0a.160e5.ffffe102SMTPIN_ADDED_MISSING@mx.google.com> References: <5655d864.0c918c0a.160e5.ffffe102SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Fingers crossed that this work, as if that would help.... Best, Karl On Wed, Nov 25, 2015 at 4:48 PM, wrote: > Karl Ramberg uploaded a new version of Squeak-Version to project The Trunk: > http://source.squeak.org/trunk/Squeak-Version-kfr. 4711.mcz > > ==================== Summary ==================== > > Name: Squeak-Version-kfr. 4711 > Author: kfr > Time: 25 November 2015, 4:48:22.871 pm > UUID: 499e1646-64b4-4f30-a422-471455781462 > Ancestors: Squeak-Version-ar.4662 > > Removal of Universes > > =============== Diff against Squeak-Version-ar.4662 =============== > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/05a047e5/attachment-0001.htm From Das.Linux at gmx.de Wed Nov 25 15:59:53 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Nov 25 15:59:57 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr. 4711.mcz In-Reply-To: References: <5655d864.0c918c0a.160e5.ffffe102SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <61A4ECB9-CA8C-49BC-8AE6-46C6C5303EEE@gmx.de> On 25.11.2015, at 16:52, karl ramberg wrote: > Fingers crossed that this work, as if that would help.... Dear Karl? Perhaps we didn't cross hard enough, there's a space in this version number.. :/ That seems unfortunate. Best regards -Tobias > > Best, > Karl > > On Wed, Nov 25, 2015 at 4:48 PM, wrote: > Karl Ramberg uploaded a new version of Squeak-Version to project The Trunk: > http://source.squeak.org/trunk/Squeak-Version-kfr. 4711.mcz > > ==================== Summary ==================== > > Name: Squeak-Version-kfr. 4711 > Author: kfr > Time: 25 November 2015, 4:48:22.871 pm > UUID: 499e1646-64b4-4f30-a422-471455781462 > Ancestors: Squeak-Version-ar.4662 > > Removal of Universes > > =============== Diff against Squeak-Version-ar.4662 =============== > > > > From bert at freudenbergs.de Wed Nov 25 16:00:39 2015 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Nov 25 16:00:44 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1054.mcz In-Reply-To: <1448442454668-4863250.post@n4.nabble.com> References: <1448442454668-4863250.post@n4.nabble.com> Message-ID: On 25.11.2015, at 10:07, marcel.taeumel 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 - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4115 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/ae620473/smime.bin From asqueaker at gmail.com Wed Nov 25 16:14:22 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 25 16:15:04 2015 Subject: [squeak-dev] The Inbox: Tools-kfr.657.mcz In-Reply-To: <56559c47.53c3370a.1fbe0.3066SMTPIN_ADDED_MISSING@mx.google.com> References: <56559c47.53c3370a.1fbe0.3066SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: There is already an "alphabetize" function. On Wed, Nov 25, 2015 at 5:32 AM, wrote: > A new version of Tools was added to project The Inbox: > http://source.squeak.org/inbox/Tools-kfr.657.mcz > > ==================== Summary ==================== > > Name: Tools-kfr.657 > Author: kfr > Time: 25 November 2015, 12:31:59.64 pm > UUID: 4c535bc5-5f99-42b3-8caa-4dc9bafb00ba > Ancestors: Tools-kfr.656 > > Adds a toggle to show packages alphabetically in the PackagePaneBrowser > > =============== Diff against Tools-kfr.656 =============== > > Item was changed: > Browser subclass: #PackagePaneBrowser > + instanceVariableNames: 'package packageListIndex packageList packageListSorted' > - instanceVariableNames: 'package packageListIndex packageList' > classVariableNames: '' > poolDictionaries: '' > category: 'Tools-Browser'! > > !PackagePaneBrowser commentStamp: '' prior: 0! > A package browser represents a hierarchical query path through an organization of class and method information. It parses class categories into a two-level hierarchy on the first '-' character, giving "packages" (e.g., Magnitude, Collections, Graphics, etc.), and "categories" (e.g., Magnitude-General and Magnitude-Number). > > Instance Variables: > package the "category header," e.g., #Magnitudes or #Collections > packageListIndex The index in the package list > packageList the list of package names > ! > > Item was changed: > ----- Method: PackagePaneBrowser>>mainPackageMenu: (in category 'package list') ----- > mainPackageMenu: aMenu > "Answer a Menu of operations on class packages to be > displayed when the operate menu button is pressed." > > ^aMenu addList: #( > ('find class...' findClass) > ('recent classes...' recent) > - > ('reorganize' editSystemCategories) > + ('show alphabetically' togglePackageListSorted) > + ('show unsorted' togglePackageListSorted) > ('update' updatePackages)); > yourself. > ! > > Item was changed: > ----- Method: PackagePaneBrowser>>packageList (in category 'package list') ----- > packageList > "Answer a list of the packages in the current system organization." > > | str stream | > str := Set new: 100. > stream := WriteStream on: (Array new: 100). > systemOrganizer categories do: > [ :categ | | cats | > cats := categ asString copyUpTo: $-. > (str includes: cats) ifFalse: > [str add: cats. > stream nextPut: cats]]. > + packageListSorted > + ifTrue:[ ^stream contents sorted] > + ifFalse:[ ^stream contents]! > - ^stream contents! > > Item was changed: > ----- Method: PackagePaneBrowser>>systemOrganizer: (in category 'initialize-release') ----- > systemOrganizer: aSystemOrganizer > "Initialize the receiver as a perspective on the system organizer, > aSystemOrganizer. Typically there is only one--the system variable > SystemOrganization." > > super systemOrganizer: aSystemOrganizer . > + packageListIndex := 0. > + packageListSorted := false! > - packageListIndex := 0! > > Item was added: > + ----- Method: PackagePaneBrowser>>togglePackageListSorted (in category 'package list') ----- > + togglePackageListSorted > + packageListSorted > + ifTrue:[ packageListSorted := false] > + ifFalse:[ packageListSorted := true] > + ! > > From asqueaker at gmail.com Wed Nov 25 16:19:07 2015 From: asqueaker at gmail.com (Chris Muller) Date: Wed Nov 25 16:19:49 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr. 4711.mcz In-Reply-To: <61A4ECB9-CA8C-49BC-8AE6-46C6C5303EEE@gmx.de> References: <5655d864.0c918c0a.160e5.ffffe102SMTPIN_ADDED_MISSING@mx.google.com> <61A4ECB9-CA8C-49BC-8AE6-46C6C5303EEE@gmx.de> Message-ID: Agggg, this will probably blow up the history function again... :-( On Wed, Nov 25, 2015 at 9:59 AM, Tobias Pape wrote: > > On 25.11.2015, at 16:52, karl ramberg wrote: > >> Fingers crossed that this work, as if that would help.... > > Dear Karl? Perhaps we didn't cross hard enough, > there's a space in this version number.. :/ > That seems unfortunate. > > Best regards > -Tobias > >> >> Best, >> Karl >> >> On Wed, Nov 25, 2015 at 4:48 PM, wrote: >> Karl Ramberg uploaded a new version of Squeak-Version to project The Trunk: >> http://source.squeak.org/trunk/Squeak-Version-kfr. 4711.mcz >> >> ==================== Summary ==================== >> >> Name: Squeak-Version-kfr. 4711 >> Author: kfr >> Time: 25 November 2015, 4:48:22.871 pm >> UUID: 499e1646-64b4-4f30-a422-471455781462 >> Ancestors: Squeak-Version-ar.4662 >> >> Removal of Universes >> >> =============== Diff against Squeak-Version-ar.4662 =============== >> >> >> >> > > From hannes.hirzel at gmail.com Wed Nov 25 16:26:28 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Nov 25 16:26:30 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr. 4711.mcz In-Reply-To: References: <5655d864.0c918c0a.160e5.ffffe102SMTPIN_ADDED_MISSING@mx.google.com> <61A4ECB9-CA8C-49BC-8AE6-46C6C5303EEE@gmx.de> Message-ID: Could it be fixed by removing spaces from file names? On 11/25/15, Chris Muller wrote: > Agggg, this will probably blow up the history function again... :-( > > > On Wed, Nov 25, 2015 at 9:59 AM, Tobias Pape wrote: >> >> On 25.11.2015, at 16:52, karl ramberg wrote: >> >>> Fingers crossed that this work, as if that would help.... >> >> Dear Karl? Perhaps we didn't cross hard enough, >> there's a space in this version number.. :/ >> That seems unfortunate. >> >> Best regards >> -Tobias >> >>> >>> Best, >>> Karl >>> >>> On Wed, Nov 25, 2015 at 4:48 PM, wrote: >>> Karl Ramberg uploaded a new version of Squeak-Version to project The >>> Trunk: >>> http://source.squeak.org/trunk/Squeak-Version-kfr. 4711.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Squeak-Version-kfr. 4711 >>> Author: kfr >>> Time: 25 November 2015, 4:48:22.871 pm >>> UUID: 499e1646-64b4-4f30-a422-471455781462 >>> Ancestors: Squeak-Version-ar.4662 >>> >>> Removal of Universes >>> >>> =============== Diff against Squeak-Version-ar.4662 =============== >>> >>> >>> >>> >> >> > > From bert at freudenbergs.de Wed Nov 25 16:50:19 2015 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Nov 25 16:50:22 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr. 4711.mcz In-Reply-To: References: <5655d864.0c918c0a.160e5.ffffe102SMTPIN_ADDED_MISSING@mx.google.com> <61A4ECB9-CA8C-49BC-8AE6-46C6C5303EEE@gmx.de> Message-ID: <6245BC3F-4A22-4704-AB9E-4AFE2BD8CA90@freudenbergs.de> > On 25.11.2015, at 17:26, H. Hirzel wrote: > > Could it be fixed by removing spaces from file names? Easiest fix is to delete this version and re-upload one with the correct name. - Bert - > > On 11/25/15, Chris Muller wrote: >> Agggg, this will probably blow up the history function again... :-( >> >> >> On Wed, Nov 25, 2015 at 9:59 AM, Tobias Pape wrote: >>> >>> On 25.11.2015, at 16:52, karl ramberg wrote: >>> >>>> Fingers crossed that this work, as if that would help.... >>> >>> Dear Karl? Perhaps we didn't cross hard enough, >>> there's a space in this version number.. :/ >>> That seems unfortunate. >>> >>> Best regards >>> -Tobias >>> >>>> >>>> Best, >>>> Karl >>>> >>>> On Wed, Nov 25, 2015 at 4:48 PM, wrote: >>>> Karl Ramberg uploaded a new version of Squeak-Version to project The >>>> Trunk: >>>> http://source.squeak.org/trunk/Squeak-Version-kfr. 4711.mcz >>>> >>>> ==================== Summary ==================== >>>> >>>> Name: Squeak-Version-kfr. 4711 >>>> Author: kfr >>>> Time: 25 November 2015, 4:48:22.871 pm >>>> UUID: 499e1646-64b4-4f30-a422-471455781462 >>>> Ancestors: Squeak-Version-ar.4662 >>>> >>>> Removal of Universes >>>> >>>> =============== Diff against Squeak-Version-ar.4662 =============== >>>> >>>> >>>> >>>> >>> >>> >> >> > - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4115 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/2f504c88/smime.bin From leves at elte.hu Wed Nov 25 16:51:00 2015 From: leves at elte.hu (Levente Uzonyi) Date: Wed Nov 25 16:51:05 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: References: Message-ID: On Wed, 25 Nov 2015, Frank Shearar wrote: > On 25 November 2015 at 13:59, Edgar J. De Cleene wrote: >> >> Any code changing the image as loading a package from trunk should end in a >> numbered change set. >> >> This is how Cuis works and how Squeak should work. >> >> And please , get rid of Squeak-Version also. >> As we have automatic procedures, we should have a way of made reliable >> change sets and put this change sets in GitHub > > We can't, without a fair amount of work. Your squeak "version" is the > sum of versions of all the base packages. When we remove packages from > the base system, we must bump Squeak-Version's version by the removed > package's version number, so that the aggregate version number doesn't > decrease. > > It's a bit crazy (because if you and I both have packages Foo and Bar, > but my Foo is one version ahead of yours, and my Bar one version > behind, the aggregate version number is the same), but it's what's > there. And fixing it won't be easy - to do it reliably you'd have to > record the versions of the individual packages - you'd have a _version > vector_. I don't think there's anything to fix here. The version number is only meaningful in a Trunk image, and it only has to be consistent after updates. So it does exactly what it has to do. Levente > > frank > >> On 11/25/15, 10:50 AM, "Levente Uzonyi" wrote: >> >>> This question comes up from time to time. >>> There's an empty package named Squeak-Version in the image. When you >>> unload a package, let's say Universes-mt.48, you add 49 (48 + 1) to the >>> version number of Squeak-Version and save it as well to ensure that the >>> global Squeak version number keeps increasing. >>> >>> Levente > > From leves at elte.hu Wed Nov 25 16:53:52 2015 From: leves at elte.hu (Levente Uzonyi) Date: Wed Nov 25 16:53:58 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz In-Reply-To: References: Message-ID: I don't think it is right to unload the package when you're about to load it. I wonder what would happen if you were to load it into an image. Levente On Wed, 25 Nov 2015, commits@source.squeak.org wrote: > Karl Ramberg uploaded a new version of Universes to project The Trunk: > http://source.squeak.org/trunk/Universes-kfr.49.mcz > > ==================== Summary ==================== > > Name: Universes-kfr.49 > Author: kfr > Time: 25 November 2015, 4:41:51.099 pm > UUID: 7fee292f-53fe-4b4d-822a-bf8798bd2cda > Ancestors: Universes-mt.48 > > Removal of Universes > > =============== Diff against Universes-mt.48 =============== > > Item was added: > + (PackageInfo named: 'Universes') preamble: '"below, add code to be run before the loading of this package" > + (MCPackage named: ''Universes'') workingCopy unload'! > > > From ma.chris.m at gmail.com Wed Nov 25 16:53:36 2015 From: ma.chris.m at gmail.com (Chris Muller) Date: Wed Nov 25 16:54:19 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr. 4711.mcz In-Reply-To: <14AC90C9-47B5-48C6-986D-5F415FB128D0@gmail.com> References: <5655d864.0c918c0a.160e5.ffffe102SMTPIN_ADDED_MISSING@mx.google.com> <61A4ECB9-CA8C-49BC-8AE6-46C6C5303EEE@gmx.de> <14AC90C9-47B5-48C6-986D-5F415FB128D0@gmail.com> Message-ID: Agree. I just checked the server, all looks fine except it did copy this version to the historical repository. Just to be safe, I moved the files to the /treated. Karl, would you mind reverting to the ancestor (ar.4662) and then re-committing it as 4712? Please don't reuse 4711 again. Thanks. On Wed, Nov 25, 2015 at 10:29 AM, Bert Freudenberg wrote: > >> On 25.11.2015, at 17:26, H. Hirzel wrote: >> >> Could it be fixed by removing spaces from file names? > > Easiest fix is to delete this version and re-upload one with the correct name. > > - Bert - > >> >> On 11/25/15, Chris Muller wrote: >>> Agggg, this will probably blow up the history function again... :-( >>> >>> >>> On Wed, Nov 25, 2015 at 9:59 AM, Tobias Pape wrote: >>>> >>>> On 25.11.2015, at 16:52, karl ramberg wrote: >>>> >>>>> Fingers crossed that this work, as if that would help.... >>>> >>>> Dear Karl? Perhaps we didn't cross hard enough, >>>> there's a space in this version number.. :/ >>>> That seems unfortunate. >>>> >>>> Best regards >>>> -Tobias >>>> >>>>> >>>>> Best, >>>>> Karl >>>>> >>>>> On Wed, Nov 25, 2015 at 4:48 PM, wrote: >>>>> Karl Ramberg uploaded a new version of Squeak-Version to project The >>>>> Trunk: >>>>> http://source.squeak.org/trunk/Squeak-Version-kfr. 4711.mcz >>>>> >>>>> ==================== Summary ==================== >>>>> >>>>> Name: Squeak-Version-kfr. 4711 >>>>> Author: kfr >>>>> Time: 25 November 2015, 4:48:22.871 pm >>>>> UUID: 499e1646-64b4-4f30-a422-471455781462 >>>>> Ancestors: Squeak-Version-ar.4662 >>>>> >>>>> Removal of Universes >>>>> >>>>> =============== Diff against Squeak-Version-ar.4662 =============== >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>> >>> >> > From ma.chris.m at gmail.com Wed Nov 25 16:54:06 2015 From: ma.chris.m at gmail.com (Chris Muller) Date: Wed Nov 25 16:54:48 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr. 4711.mcz In-Reply-To: References: <5655d864.0c918c0a.160e5.ffffe102SMTPIN_ADDED_MISSING@mx.google.com> <61A4ECB9-CA8C-49BC-8AE6-46C6C5303EEE@gmx.de> <14AC90C9-47B5-48C6-986D-5F415FB128D0@gmail.com> Message-ID: On Wed, Nov 25, 2015 at 10:53 AM, Chris Muller wrote: > Agree. I just checked the server, all looks fine except it did copy s/did/didn't From bert at freudenbergs.de Wed Nov 25 17:40:00 2015 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Nov 25 17:40:04 2015 Subject: [squeak-dev] Comment improvements References: <359D8A7F-C472-40A2-A8F6-7F19C9083ED7@gmail.com> Message-ID: <8BD5E987-747D-48D4-9DBE-D40FF682AD63@freudenbergs.de> Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4115 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/90059d1b/smime.bin From eliot.miranda at gmail.com Wed Nov 25 18:27:29 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Nov 25 18:27:36 2015 Subject: [squeak-dev] Comment improvements In-Reply-To: <8BD5E987-747D-48D4-9DBE-D40FF682AD63@freudenbergs.de> References: <359D8A7F-C472-40A2-A8F6-7F19C9083ED7@gmail.com> <8BD5E987-747D-48D4-9DBE-D40FF682AD63@freudenbergs.de> Message-ID: <26ED1C66-AA2D-4938-9211-1C1D96B04A42@gmail.com> > On Nov 25, 2015, at 9:40 AM, Bert Freudenberg wrote: > > ? from vm-dev list. Who?d like to take care of this? :) I will. I just wanted the message thread to be read here. > > - Bert - > >> Begin forwarded message: >> >> From: Eliot Miranda >> Subject: [Vm-dev] Re: [Pharo-dev] what is exactly flushCache? >> Date: 25. November 2015 18:25:01 MEZ >> To: Pharo Development List >> Cc: vm-dev@lists.squeakfoundation.org >> Reply-To: Squeak Virtual Machine Development Discussion >> >> Hi Stef, >> >>> On Nov 24, 2015, at 12:00 PM, stepharo wrote: >>> >>> Thanks for this great explanation and yes I know about this cache but I do not why >>> I was wondering that we did not need to update it from the image. >>> Now I would like to add such comment inside the system because I like self explanation. >>> >>> "See Object documentation whatIsAPrimitive." gets frustrates me. >> >> It's still appropriate to explain to newbies what primitives are and how they are invoked. Interesting to consider what the minimum knowledge programmers have when first using the system. Do they know, for example, that methods contain bytecode for a stack machine, or that underneath the system is a virtual machine containing a bytecode execution engine, a set of primitives and (a) garbage collector(s)? >> >>> So I imagine that is Behavior flushCache flushing for the class in the class,selector pair. >> >> Again because of inheritance the VM can't just flush entries for a specific class, so the VM responds to Behavior>>flushCache flushes the entire cache. >> >>> What would be a good place to add such comment? MethodDictionary. It sounds reasonable to me but tell me. >> >> If the comments in the various flushCache implementations are correct and reference each other then I think that's enough. >> >>> TBehavior >> flushCache >>> "Tell the interpreter to remove the contents of its method lookup cache, if it has >>> one. Essential. See Object documentation whatIsAPrimitive." >>> >>> >>> self primitiveFailed >> >> I would rewrite this to say >> >> "Tell the virtual machine to remove the contents of its method lookup caches, if it has any. This must be done when the system modifies the class hierarchy so that message lookups reflect the revised organization. c.f. Symbol>>flushCache & CompiledMethod>>flushCache. Essential. See Object documentation whatIsAPrimitive." >> >>> Symbol >> flushCache >>> "Tell the interpreter to remove all entries with this symbol as a selector from its method lookup cache, if it has one. This primitive must be called whenever a method is redefined or removed. >>> NOTE: Only one of the two selective flush methods (Symbol or CompiledMethod) needs to be used." >>> >>> >> >> I would rewrite this to say >> >> "Tell the virtual machine to remove all entries with this symbol as a selector from its method lookup caches, if it has any. This must be done whenever a method is added, redefined or removed, so that message lookups reflect the revised organization. c.f. Behavior>>flushCache & CompiledMethod>>flushCache. Essential. See Object documentation whatIsAPrimitive." >> >> >>> CompiledMethod >> flushCache >>> "Tell the interpreter to remove all references to this method from its method lookup cache, if it has one. This primitive must be called whenever a method is redefined or removed. >>> NOTE: Only one of two selective flush methods (Symbol or CompiledMethod) needs to be used." >>> >>> >> >> I would rewrite this to say >> >> "Tell the virtual machine to remove all references to this method from its method lookup caches, and to discard any optimized version of the method, if it has any of these. This must be done whenever a method is modified in place, such as modifying its literals or machine code, to reflect the revised code. c.f. Behavior>>flushCache & Symbol>>flushCache. Essential. See Object documentation whatIsAPrimitive." > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/1b9e4622/attachment.htm From karlramberg at gmail.com Wed Nov 25 19:01:57 2015 From: karlramberg at gmail.com (karl ramberg) Date: Wed Nov 25 19:01:59 2015 Subject: [squeak-dev] The Inbox: Tools-kfr.657.mcz In-Reply-To: References: <56559c47.53c3370a.1fbe0.3066SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: In the package pane menu? I could not see it. It was just 4 items in the menu. Best, Karl On Wed, Nov 25, 2015 at 5:14 PM, Chris Muller wrote: > There is already an "alphabetize" function. > > On Wed, Nov 25, 2015 at 5:32 AM, wrote: > > A new version of Tools was added to project The Inbox: > > http://source.squeak.org/inbox/Tools-kfr.657.mcz > > > > ==================== Summary ==================== > > > > Name: Tools-kfr.657 > > Author: kfr > > Time: 25 November 2015, 12:31:59.64 pm > > UUID: 4c535bc5-5f99-42b3-8caa-4dc9bafb00ba > > Ancestors: Tools-kfr.656 > > > > Adds a toggle to show packages alphabetically in the PackagePaneBrowser > > > > =============== Diff against Tools-kfr.656 =============== > > > > Item was changed: > > Browser subclass: #PackagePaneBrowser > > + instanceVariableNames: 'package packageListIndex packageList > packageListSorted' > > - instanceVariableNames: 'package packageListIndex packageList' > > classVariableNames: '' > > poolDictionaries: '' > > category: 'Tools-Browser'! > > > > !PackagePaneBrowser commentStamp: '' prior: 0! > > A package browser represents a hierarchical query path through an > organization of class and method information. It parses class categories > into a two-level hierarchy on the first '-' character, giving "packages" > (e.g., Magnitude, Collections, Graphics, etc.), and "categories" (e.g., > Magnitude-General and Magnitude-Number). > > > > Instance Variables: > > package the "category header," e.g., #Magnitudes or > #Collections > > packageListIndex The index in the package list > > packageList the list of package > names > > ! > > > > Item was changed: > > ----- Method: PackagePaneBrowser>>mainPackageMenu: (in category > 'package list') ----- > > mainPackageMenu: aMenu > > "Answer a Menu of operations on class packages to be > > displayed when the operate menu button is pressed." > > > > ^aMenu addList: #( > > ('find class...' findClass) > > ('recent classes...' recent) > > - > > ('reorganize' editSystemCategories) > > + ('show alphabetically' togglePackageListSorted) > > + ('show unsorted' togglePackageListSorted) > > ('update' updatePackages)); > > yourself. > > ! > > > > Item was changed: > > ----- Method: PackagePaneBrowser>>packageList (in category 'package > list') ----- > > packageList > > "Answer a list of the packages in the current system > organization." > > > > | str stream | > > str := Set new: 100. > > stream := WriteStream on: (Array new: 100). > > systemOrganizer categories do: > > [ :categ | | cats | > > cats := categ asString copyUpTo: $-. > > (str includes: cats) ifFalse: > > [str add: cats. > > stream nextPut: cats]]. > > + packageListSorted > > + ifTrue:[ ^stream contents sorted] > > + ifFalse:[ ^stream contents]! > > - ^stream contents! > > > > Item was changed: > > ----- Method: PackagePaneBrowser>>systemOrganizer: (in category > 'initialize-release') ----- > > systemOrganizer: aSystemOrganizer > > "Initialize the receiver as a perspective on the system > organizer, > > aSystemOrganizer. Typically there is only one--the system > variable > > SystemOrganization." > > > > super systemOrganizer: aSystemOrganizer . > > + packageListIndex := 0. > > + packageListSorted := false! > > - packageListIndex := 0! > > > > Item was added: > > + ----- Method: PackagePaneBrowser>>togglePackageListSorted (in category > 'package list') ----- > > + togglePackageListSorted > > + packageListSorted > > + ifTrue:[ packageListSorted := false] > > + ifFalse:[ packageListSorted := true] > > + ! > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/97828ed3/attachment-0001.htm From commits at source.squeak.org Wed Nov 25 19:09:57 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 25 19:09:59 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr.4712.mcz Message-ID: Karl Ramberg uploaded a new version of Squeak-Version to project The Trunk: http://source.squeak.org/trunk/Squeak-Version-kfr.4712.mcz ==================== Summary ==================== Name: Squeak-Version-kfr.4712 Author: kfr Time: 25 November 2015, 8:09:45.569 pm UUID: d76df055-6e8c-459d-abed-9d978d04c9b2 Ancestors: Squeak-Version-ar.4662 Messed up last version, try again =============== Diff against Squeak-Version-ar.4662 =============== From karlramberg at gmail.com Wed Nov 25 19:20:24 2015 From: karlramberg at gmail.com (karl ramberg) Date: Wed Nov 25 19:20:26 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz In-Reply-To: References: Message-ID: It seems all package unloading involves it first being loaded. But you mean it the unloading should be in the post script? On Wed, Nov 25, 2015 at 5:53 PM, Levente Uzonyi wrote: > I don't think it is right to unload the package when you're about to load > it. I wonder what would happen if you were to load it into an image. > > Levente > > > On Wed, 25 Nov 2015, commits@source.squeak.org wrote: > > Karl Ramberg uploaded a new version of Universes to project The Trunk: >> http://source.squeak.org/trunk/Universes-kfr.49.mcz >> >> ==================== Summary ==================== >> >> Name: Universes-kfr.49 >> Author: kfr >> Time: 25 November 2015, 4:41:51.099 pm >> UUID: 7fee292f-53fe-4b4d-822a-bf8798bd2cda >> Ancestors: Universes-mt.48 >> >> Removal of Universes >> >> =============== Diff against Universes-mt.48 =============== >> >> Item was added: >> + (PackageInfo named: 'Universes') preamble: '"below, add code to be run >> before the loading of this package" >> + (MCPackage named: ''Universes'') workingCopy unload'! >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151125/c7e8f23e/attachment.htm From tim at rowledge.org Wed Nov 25 19:51:31 2015 From: tim at rowledge.org (tim Rowledge) Date: Wed Nov 25 19:51:35 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <56556DC3.40300@zogotounga.net> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> <56556DC3.40300@zogotounga.net> Message-ID: <5BA23D3B-B66E-4716-839C-318FEBD50CCD@rowledge.org> > On 25-11-2015, at 12:13 AM, St?phane Rollandin wrote: > >> So maybe the shortage is of compliements than caring..? Or a shortage >> of positive thinking? > > Shortage of people actually using the stuff :) Always a problem, and especially so for open source stuff. Almost all open projects end up with a single contributor and a tiny number of users. It?s just life. For example St?phane?s Prolog etc - I?d never be likely to even look at it because nothing about Lisp or Prolog interests me, not being a languages geek and having had nasty experiences when I did try to make some sense of them as an impressionable youth. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: IPL: Invent Program Lines From eliot.miranda at gmail.com Wed Nov 25 20:26:20 2015 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Nov 25 20:26:24 2015 Subject: [squeak-dev] Re: The Inbox: Traits-pre.307.mcz In-Reply-To: <1448356321769-4862942.post@n4.nabble.com> References: <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <1448356321769-4862942.post@n4.nabble.com> Message-ID: Hi Marcel, > On Nov 24, 2015, at 1:12 AM, marcel.taeumel wrote: > > For the sake of maintainability, we should keep them in Trunk, make them > unloadable and configure our CI environment to execute all tests *after* > unloading them. +1. And to be clear, run the tests before and after unloading them. > We could/should do so for other packages as well. It is not only about > having a minimal base system were things can be loaded but about a base > system that represents a fair trade-off for maintenance while supporting > things to be unloadable. :) +1. > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Inbox-Traits-pre-307-mcz-tp4862218p4862942.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. _,,,^..^,,,_ (phone) From Das.Linux at gmx.de Wed Nov 25 21:46:02 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Nov 25 21:46:06 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz In-Reply-To: References: Message-ID: <213BA91F-07E4-4889-9E97-630A6A10493F@gmx.de> On 25.11.2015, at 20:20, karl ramberg wrote: > It seems all package unloading involves it first being loaded. > > But you mean it the unloading should be in the post script? > I would actually favour to do the unloading of any to-be-gone package in the postscript of the SqueakVersion Package (possibly incrementing the version by the necessary offset). What do you think? Best regards -Tobias PS: I had this all on my mental list and had hoped to do it before novermber, but thats how it goes? > > > On Wed, Nov 25, 2015 at 5:53 PM, Levente Uzonyi wrote: > I don't think it is right to unload the package when you're about to load it. I wonder what would happen if you were to load it into an image. > > Levente > > > On Wed, 25 Nov 2015, commits@source.squeak.org wrote: > > Karl Ramberg uploaded a new version of Universes to project The Trunk: > http://source.squeak.org/trunk/Universes-kfr.49.mcz > > ==================== Summary ==================== > > Name: Universes-kfr.49 > Author: kfr > Time: 25 November 2015, 4:41:51.099 pm > UUID: 7fee292f-53fe-4b4d-822a-bf8798bd2cda > Ancestors: Universes-mt.48 > > Removal of Universes > > =============== Diff against Universes-mt.48 =============== > > Item was added: > + (PackageInfo named: 'Universes') preamble: '"below, add code to be run before the loading of this package" > + (MCPackage named: ''Universes'') workingCopy unload'! > > > > > > From commits at source.squeak.org Wed Nov 25 22:55:03 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Nov 25 22:55:05 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151125225503.32171.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009196.html Name: Universes-kfr.49 Ancestors: Universes-mt.48 Removal of Universes ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009197.html Name: Squeak-Version-kfr. 4711 Ancestors: Squeak-Version-ar.4662 Removal of Universes ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009198.html Name: Squeak-Version-kfr.4712 Ancestors: Squeak-Version-ar.4662 Messed up last version, try again ============================================= From leves at elte.hu Wed Nov 25 23:20:40 2015 From: leves at elte.hu (Levente Uzonyi) Date: Wed Nov 25 23:20:45 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz In-Reply-To: <213BA91F-07E4-4889-9E97-630A6A10493F@gmx.de> References: <213BA91F-07E4-4889-9E97-630A6A10493F@gmx.de> Message-ID: On Wed, 25 Nov 2015, Tobias Pape wrote: > > On 25.11.2015, at 20:20, karl ramberg wrote: > >> It seems all package unloading involves it first being loaded. >> >> But you mean it the unloading should be in the post script? >> > > I would actually favour to do the unloading of any to-be-gone package > in the postscript of the SqueakVersion Package (possibly incrementing the version by > the necessary offset). > > What do you think? I agree. Levente > > Best regards > -Tobias > > PS: I had this all on my mental list and had hoped to do it before novermber, but > thats how it goes? > >> >> >> On Wed, Nov 25, 2015 at 5:53 PM, Levente Uzonyi wrote: >> I don't think it is right to unload the package when you're about to load it. I wonder what would happen if you were to load it into an image. >> >> Levente >> >> >> On Wed, 25 Nov 2015, commits@source.squeak.org wrote: >> >> Karl Ramberg uploaded a new version of Universes to project The Trunk: >> http://source.squeak.org/trunk/Universes-kfr.49.mcz >> >> ==================== Summary ==================== >> >> Name: Universes-kfr.49 >> Author: kfr >> Time: 25 November 2015, 4:41:51.099 pm >> UUID: 7fee292f-53fe-4b4d-822a-bf8798bd2cda >> Ancestors: Universes-mt.48 >> >> Removal of Universes >> >> =============== Diff against Universes-mt.48 =============== >> >> Item was added: >> + (PackageInfo named: 'Universes') preamble: '"below, add code to be run before the loading of this package" >> + (MCPackage named: ''Universes'') workingCopy unload'! >> >> >> >> >> >> > > > From ma.chris.m at gmail.com Wed Nov 25 23:49:24 2015 From: ma.chris.m at gmail.com (Chris Muller) Date: Wed Nov 25 23:50:06 2015 Subject: [squeak-dev] The Inbox: Tools-kfr.657.mcz In-Reply-To: References: <56559c47.53c3370a.1fbe0.3066SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Ah, looks like our difference is in the "Browser shows package pane" preference. When it is off, there is a "alphabetize" there. When its on, the "alphabetize" is in the second pane. In both cases it alphabetizes all system categories.. On Wed, Nov 25, 2015 at 1:01 PM, karl ramberg wrote: > In the package pane menu? > I could not see it. It was just 4 items in the menu. > > Best, > Karl > > > On Wed, Nov 25, 2015 at 5:14 PM, Chris Muller wrote: >> >> There is already an "alphabetize" function. >> >> On Wed, Nov 25, 2015 at 5:32 AM, wrote: >> > A new version of Tools was added to project The Inbox: >> > http://source.squeak.org/inbox/Tools-kfr.657.mcz >> > >> > ==================== Summary ==================== >> > >> > Name: Tools-kfr.657 >> > Author: kfr >> > Time: 25 November 2015, 12:31:59.64 pm >> > UUID: 4c535bc5-5f99-42b3-8caa-4dc9bafb00ba >> > Ancestors: Tools-kfr.656 >> > >> > Adds a toggle to show packages alphabetically in the PackagePaneBrowser >> > >> > =============== Diff against Tools-kfr.656 =============== >> > >> > Item was changed: >> > Browser subclass: #PackagePaneBrowser >> > + instanceVariableNames: 'package packageListIndex packageList >> > packageListSorted' >> > - instanceVariableNames: 'package packageListIndex packageList' >> > classVariableNames: '' >> > poolDictionaries: '' >> > category: 'Tools-Browser'! >> > >> > !PackagePaneBrowser commentStamp: '' prior: 0! >> > A package browser represents a hierarchical query path through an >> > organization of class and method information. It parses class categories >> > into a two-level hierarchy on the first '-' character, giving "packages" >> > (e.g., Magnitude, Collections, Graphics, etc.), and "categories" (e.g., >> > Magnitude-General and Magnitude-Number). >> > >> > Instance Variables: >> > package the "category header," e.g., #Magnitudes or >> > #Collections >> > packageListIndex The index in the package list >> > packageList the list of package >> > names >> > ! >> > >> > Item was changed: >> > ----- Method: PackagePaneBrowser>>mainPackageMenu: (in category >> > 'package list') ----- >> > mainPackageMenu: aMenu >> > "Answer a Menu of operations on class packages to be >> > displayed when the operate menu button is pressed." >> > >> > ^aMenu addList: #( >> > ('find class...' findClass) >> > ('recent classes...' recent) >> > - >> > ('reorganize' editSystemCategories) >> > + ('show alphabetically' togglePackageListSorted) >> > + ('show unsorted' togglePackageListSorted) >> > ('update' >> > updatePackages)); >> > yourself. >> > ! >> > >> > Item was changed: >> > ----- Method: PackagePaneBrowser>>packageList (in category 'package >> > list') ----- >> > packageList >> > "Answer a list of the packages in the current system >> > organization." >> > >> > | str stream | >> > str := Set new: 100. >> > stream := WriteStream on: (Array new: 100). >> > systemOrganizer categories do: >> > [ :categ | | cats | >> > cats := categ asString copyUpTo: $-. >> > (str includes: cats) ifFalse: >> > [str add: cats. >> > stream nextPut: cats]]. >> > + packageListSorted >> > + ifTrue:[ ^stream contents sorted] >> > + ifFalse:[ ^stream contents]! >> > - ^stream contents! >> > >> > Item was changed: >> > ----- Method: PackagePaneBrowser>>systemOrganizer: (in category >> > 'initialize-release') ----- >> > systemOrganizer: aSystemOrganizer >> > "Initialize the receiver as a perspective on the system >> > organizer, >> > aSystemOrganizer. Typically there is only one--the system >> > variable >> > SystemOrganization." >> > >> > super systemOrganizer: aSystemOrganizer . >> > + packageListIndex := 0. >> > + packageListSorted := false! >> > - packageListIndex := 0! >> > >> > Item was added: >> > + ----- Method: PackagePaneBrowser>>togglePackageListSorted (in category >> > 'package list') ----- >> > + togglePackageListSorted >> > + packageListSorted >> > + ifTrue:[ packageListSorted := false] >> > + ifFalse:[ packageListSorted := true] >> > + ! >> > >> > >> > From karlramberg at gmail.com Thu Nov 26 05:35:31 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 26 05:35:33 2015 Subject: [squeak-dev] The Inbox: Tools-kfr.657.mcz In-Reply-To: References: <56559c47.53c3370a.1fbe0.3066SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Ok, I'll remove this change Best, Karl On Thu, Nov 26, 2015 at 12:49 AM, Chris Muller wrote: > Ah, looks like our difference is in the "Browser shows package pane" > preference. > > When it is off, there is a "alphabetize" there. When its on, the > "alphabetize" is in the second pane. In both cases it alphabetizes > all system categories.. > > On Wed, Nov 25, 2015 at 1:01 PM, karl ramberg > wrote: > > In the package pane menu? > > I could not see it. It was just 4 items in the menu. > > > > Best, > > Karl > > > > > > On Wed, Nov 25, 2015 at 5:14 PM, Chris Muller > wrote: > >> > >> There is already an "alphabetize" function. > >> > >> On Wed, Nov 25, 2015 at 5:32 AM, wrote: > >> > A new version of Tools was added to project The Inbox: > >> > http://source.squeak.org/inbox/Tools-kfr.657.mcz > >> > > >> > ==================== Summary ==================== > >> > > >> > Name: Tools-kfr.657 > >> > Author: kfr > >> > Time: 25 November 2015, 12:31:59.64 pm > >> > UUID: 4c535bc5-5f99-42b3-8caa-4dc9bafb00ba > >> > Ancestors: Tools-kfr.656 > >> > > >> > Adds a toggle to show packages alphabetically in the > PackagePaneBrowser > >> > > >> > =============== Diff against Tools-kfr.656 =============== > >> > > >> > Item was changed: > >> > Browser subclass: #PackagePaneBrowser > >> > + instanceVariableNames: 'package packageListIndex packageList > >> > packageListSorted' > >> > - instanceVariableNames: 'package packageListIndex packageList' > >> > classVariableNames: '' > >> > poolDictionaries: '' > >> > category: 'Tools-Browser'! > >> > > >> > !PackagePaneBrowser commentStamp: '' prior: 0! > >> > A package browser represents a hierarchical query path through an > >> > organization of class and method information. It parses class > categories > >> > into a two-level hierarchy on the first '-' character, giving > "packages" > >> > (e.g., Magnitude, Collections, Graphics, etc.), and "categories" > (e.g., > >> > Magnitude-General and Magnitude-Number). > >> > > >> > Instance Variables: > >> > package the "category header," e.g., #Magnitudes or > >> > #Collections > >> > packageListIndex The index in the package list > >> > packageList the list of package > >> > names > >> > ! > >> > > >> > Item was changed: > >> > ----- Method: PackagePaneBrowser>>mainPackageMenu: (in category > >> > 'package list') ----- > >> > mainPackageMenu: aMenu > >> > "Answer a Menu of operations on class packages to be > >> > displayed when the operate menu button is pressed." > >> > > >> > ^aMenu addList: #( > >> > ('find class...' findClass) > >> > ('recent classes...' recent) > >> > - > >> > ('reorganize' editSystemCategories) > >> > + ('show alphabetically' > togglePackageListSorted) > >> > + ('show unsorted' togglePackageListSorted) > >> > ('update' > >> > updatePackages)); > >> > yourself. > >> > ! > >> > > >> > Item was changed: > >> > ----- Method: PackagePaneBrowser>>packageList (in category 'package > >> > list') ----- > >> > packageList > >> > "Answer a list of the packages in the current system > >> > organization." > >> > > >> > | str stream | > >> > str := Set new: 100. > >> > stream := WriteStream on: (Array new: 100). > >> > systemOrganizer categories do: > >> > [ :categ | | cats | > >> > cats := categ asString copyUpTo: $-. > >> > (str includes: cats) ifFalse: > >> > [str add: cats. > >> > stream nextPut: cats]]. > >> > + packageListSorted > >> > + ifTrue:[ ^stream contents sorted] > >> > + ifFalse:[ ^stream contents]! > >> > - ^stream contents! > >> > > >> > Item was changed: > >> > ----- Method: PackagePaneBrowser>>systemOrganizer: (in category > >> > 'initialize-release') ----- > >> > systemOrganizer: aSystemOrganizer > >> > "Initialize the receiver as a perspective on the system > >> > organizer, > >> > aSystemOrganizer. Typically there is only one--the system > >> > variable > >> > SystemOrganization." > >> > > >> > super systemOrganizer: aSystemOrganizer . > >> > + packageListIndex := 0. > >> > + packageListSorted := false! > >> > - packageListIndex := 0! > >> > > >> > Item was added: > >> > + ----- Method: PackagePaneBrowser>>togglePackageListSorted (in > category > >> > 'package list') ----- > >> > + togglePackageListSorted > >> > + packageListSorted > >> > + ifTrue:[ packageListSorted := false] > >> > + ifFalse:[ packageListSorted := true] > >> > + ! > >> > > >> > > >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151126/3bda9721/attachment.htm From Das.Linux at gmx.de Thu Nov 26 06:14:30 2015 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Nov 26 06:14:32 2015 Subject: [squeak-dev] The Inbox: Tools-kfr.657.mcz In-Reply-To: References: <56559c47.53c3370a.1fbe0.3066SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Hi Karl, On 26.11.2015, at 06:35, karl ramberg wrote: > Ok, > I'll remove this change I'm fine with the change. Also, contrary to 'alphabetize', you change just sorts the packages as presented, not in the system organizer, which has benefits on its own :) Best regards -Tobias > > Best, > Karl > > On Thu, Nov 26, 2015 at 12:49 AM, Chris Muller wrote: > Ah, looks like our difference is in the "Browser shows package pane" preference. > > When it is off, there is a "alphabetize" there. When its on, the > "alphabetize" is in the second pane. In both cases it alphabetizes > all system categories.. > > On Wed, Nov 25, 2015 at 1:01 PM, karl ramberg wrote: > > In the package pane menu? > > I could not see it. It was just 4 items in the menu. > > > > Best, > > Karl > > > > > > On Wed, Nov 25, 2015 at 5:14 PM, Chris Muller wrote: > >> > >> There is already an "alphabetize" function. > >> > >> On Wed, Nov 25, 2015 at 5:32 AM, wrote: > >> > A new version of Tools was added to project The Inbox: > >> > http://source.squeak.org/inbox/Tools-kfr.657.mcz > >> > > >> > ==================== Summary ==================== > >> > > >> > Name: Tools-kfr.657 > >> > Author: kfr > >> > Time: 25 November 2015, 12:31:59.64 pm > >> > UUID: 4c535bc5-5f99-42b3-8caa-4dc9bafb00ba > >> > Ancestors: Tools-kfr.656 > >> > > >> > Adds a toggle to show packages alphabetically in the PackagePaneBrowser > >> > > >> > =============== Diff against Tools-kfr.656 =============== > >> > > >> > Item was changed: > >> > Browser subclass: #PackagePaneBrowser > >> > + instanceVariableNames: 'package packageListIndex packageList > >> > packageListSorted' > >> > - instanceVariableNames: 'package packageListIndex packageList' > >> > classVariableNames: '' > >> > poolDictionaries: '' > >> > category: 'Tools-Browser'! > >> > > >> > !PackagePaneBrowser commentStamp: '' prior: 0! > >> > A package browser represents a hierarchical query path through an > >> > organization of class and method information. It parses class categories > >> > into a two-level hierarchy on the first '-' character, giving "packages" > >> > (e.g., Magnitude, Collections, Graphics, etc.), and "categories" (e.g., > >> > Magnitude-General and Magnitude-Number). > >> > > >> > Instance Variables: > >> > package the "category header," e.g., #Magnitudes or > >> > #Collections > >> > packageListIndex The index in the package list > >> > packageList the list of package > >> > names > >> > ! > >> > > >> > Item was changed: > >> > ----- Method: PackagePaneBrowser>>mainPackageMenu: (in category > >> > 'package list') ----- > >> > mainPackageMenu: aMenu > >> > "Answer a Menu of operations on class packages to be > >> > displayed when the operate menu button is pressed." > >> > > >> > ^aMenu addList: #( > >> > ('find class...' findClass) > >> > ('recent classes...' recent) > >> > - > >> > ('reorganize' editSystemCategories) > >> > + ('show alphabetically' togglePackageListSorted) > >> > + ('show unsorted' togglePackageListSorted) > >> > ('update' > >> > updatePackages)); > >> > yourself. > >> > ! > >> > > >> > Item was changed: > >> > ----- Method: PackagePaneBrowser>>packageList (in category 'package > >> > list') ----- > >> > packageList > >> > "Answer a list of the packages in the current system > >> > organization." > >> > > >> > | str stream | > >> > str := Set new: 100. > >> > stream := WriteStream on: (Array new: 100). > >> > systemOrganizer categories do: > >> > [ :categ | | cats | > >> > cats := categ asString copyUpTo: $-. > >> > (str includes: cats) ifFalse: > >> > [str add: cats. > >> > stream nextPut: cats]]. > >> > + packageListSorted > >> > + ifTrue:[ ^stream contents sorted] > >> > + ifFalse:[ ^stream contents]! > >> > - ^stream contents! > >> > > >> > Item was changed: > >> > ----- Method: PackagePaneBrowser>>systemOrganizer: (in category > >> > 'initialize-release') ----- > >> > systemOrganizer: aSystemOrganizer > >> > "Initialize the receiver as a perspective on the system > >> > organizer, > >> > aSystemOrganizer. Typically there is only one--the system > >> > variable > >> > SystemOrganization." > >> > > >> > super systemOrganizer: aSystemOrganizer . > >> > + packageListIndex := 0. > >> > + packageListSorted := false! > >> > - packageListIndex := 0! > >> > > >> > Item was added: > >> > + ----- Method: PackagePaneBrowser>>togglePackageListSorted (in category > >> > 'package list') ----- > >> > + togglePackageListSorted > >> > + packageListSorted > >> > + ifTrue:[ packageListSorted := false] > >> > + ifFalse:[ packageListSorted := true] > >> > + ! > >> > > >> > > >> > > > > From Marcel.Taeumel at hpi.de Thu Nov 26 07:07:34 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Nov 26 07:23:18 2015 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1054.mcz In-Reply-To: References: <1448442454668-4863250.post@n4.nabble.com> Message-ID: <1448521654554-4863597.post@n4.nabble.com> 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 -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1054-mcz-tp4862936p4863597.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From frank.shearar at gmail.com Thu Nov 26 09:55:04 2015 From: frank.shearar at gmail.com (Frank Shearar) Date: Thu Nov 26 09:55:06 2015 Subject: [squeak-dev] Removing of Universe classes In-Reply-To: References: Message-ID: On 25 November 2015 at 16:51, Levente Uzonyi wrote: > On Wed, 25 Nov 2015, Frank Shearar wrote: > >> On 25 November 2015 at 13:59, Edgar J. De Cleene >> wrote: >>> >>> >>> Any code changing the image as loading a package from trunk should end in >>> a >>> numbered change set. >>> >>> This is how Cuis works and how Squeak should work. >>> >>> And please , get rid of Squeak-Version also. >>> As we have automatic procedures, we should have a way of made reliable >>> change sets and put this change sets in GitHub >> >> >> We can't, without a fair amount of work. Your squeak "version" is the >> sum of versions of all the base packages. When we remove packages from >> the base system, we must bump Squeak-Version's version by the removed >> package's version number, so that the aggregate version number doesn't >> decrease. >> >> It's a bit crazy (because if you and I both have packages Foo and Bar, >> but my Foo is one version ahead of yours, and my Bar one version >> behind, the aggregate version number is the same), but it's what's >> there. And fixing it won't be easy - to do it reliably you'd have to >> record the versions of the individual packages - you'd have a _version >> vector_. > > > I don't think there's anything to fix here. The version number is only > meaningful in a Trunk image, and it only has to be consistent after updates. > So it does exactly what it has to do. Yeah, maybe "fix" is a bit of hyperbole. "Fixing" the Squeak trunk version is like saying "the version of my operating system is Windows 10 + VS 2013.4 + Git 2.6.2 + ...". No one actually does that. The thing called "Cuis" is versioned across the packages in the base system. That's pretty close to what we do, kinda. Maybe in fact "the Squeak trunk version" should only be calculated by the sum of packages in the MCM... but I suspect that's exactly what we _actually do_. So THEN, when we remove packages from the base system (as in, it's not part of the base system anymore), we have the number deficit that Squeak-Version fixes. Er. That might be a long-winded "carry on, nothing to see here." frank > Levente > > >> >> frank >> >>> On 11/25/15, 10:50 AM, "Levente Uzonyi" wrote: >>> >>>> This question comes up from time to time. >>>> There's an empty package named Squeak-Version in the image. When you >>>> unload a package, let's say Universes-mt.48, you add 49 (48 + 1) to the >>>> version number of Squeak-Version and save it as well to ensure that the >>>> global Squeak version number keeps increasing. >>>> >>>> Levente >> >> >> > From karlramberg at gmail.com Thu Nov 26 12:00:51 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 26 12:00:55 2015 Subject: [squeak-dev] The Inbox: Tools-kfr.657.mcz In-Reply-To: References: <56559c47.53c3370a.1fbe0.3066SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: I like the "soft" sorting, too. Sometimes it's nice to have different views on the class tree. With "hard" sorting it's a one way street. Best, Karl On Thu, Nov 26, 2015 at 7:14 AM, Tobias Pape wrote: > Hi Karl, > > On 26.11.2015, at 06:35, karl ramberg wrote: > > > Ok, > > I'll remove this change > > I'm fine with the change. Also, contrary to 'alphabetize', you change > just sorts the packages as presented, not in the system organizer, which > has benefits on its own :) > > Best regards > -Tobias > > > > > > Best, > > Karl > > > > On Thu, Nov 26, 2015 at 12:49 AM, Chris Muller > wrote: > > Ah, looks like our difference is in the "Browser shows package pane" > preference. > > > > When it is off, there is a "alphabetize" there. When its on, the > > "alphabetize" is in the second pane. In both cases it alphabetizes > > all system categories.. > > > > On Wed, Nov 25, 2015 at 1:01 PM, karl ramberg > wrote: > > > In the package pane menu? > > > I could not see it. It was just 4 items in the menu. > > > > > > Best, > > > Karl > > > > > > > > > On Wed, Nov 25, 2015 at 5:14 PM, Chris Muller > wrote: > > >> > > >> There is already an "alphabetize" function. > > >> > > >> On Wed, Nov 25, 2015 at 5:32 AM, wrote: > > >> > A new version of Tools was added to project The Inbox: > > >> > http://source.squeak.org/inbox/Tools-kfr.657.mcz > > >> > > > >> > ==================== Summary ==================== > > >> > > > >> > Name: Tools-kfr.657 > > >> > Author: kfr > > >> > Time: 25 November 2015, 12:31:59.64 pm > > >> > UUID: 4c535bc5-5f99-42b3-8caa-4dc9bafb00ba > > >> > Ancestors: Tools-kfr.656 > > >> > > > >> > Adds a toggle to show packages alphabetically in the > PackagePaneBrowser > > >> > > > >> > =============== Diff against Tools-kfr.656 =============== > > >> > > > >> > Item was changed: > > >> > Browser subclass: #PackagePaneBrowser > > >> > + instanceVariableNames: 'package packageListIndex packageList > > >> > packageListSorted' > > >> > - instanceVariableNames: 'package packageListIndex > packageList' > > >> > classVariableNames: '' > > >> > poolDictionaries: '' > > >> > category: 'Tools-Browser'! > > >> > > > >> > !PackagePaneBrowser commentStamp: '' prior: 0! > > >> > A package browser represents a hierarchical query path through an > > >> > organization of class and method information. It parses class > categories > > >> > into a two-level hierarchy on the first '-' character, giving > "packages" > > >> > (e.g., Magnitude, Collections, Graphics, etc.), and "categories" > (e.g., > > >> > Magnitude-General and Magnitude-Number). > > >> > > > >> > Instance Variables: > > >> > package the "category header," e.g., #Magnitudes > or > > >> > #Collections > > >> > packageListIndex The index in the package list > > >> > packageList the list of > package > > >> > names > > >> > ! > > >> > > > >> > Item was changed: > > >> > ----- Method: PackagePaneBrowser>>mainPackageMenu: (in category > > >> > 'package list') ----- > > >> > mainPackageMenu: aMenu > > >> > "Answer a Menu of operations on class packages to be > > >> > displayed when the operate menu button is pressed." > > >> > > > >> > ^aMenu addList: #( > > >> > ('find class...' findClass) > > >> > ('recent classes...' recent) > > >> > - > > >> > ('reorganize' > editSystemCategories) > > >> > + ('show alphabetically' > togglePackageListSorted) > > >> > + ('show unsorted' togglePackageListSorted) > > >> > ('update' > > >> > updatePackages)); > > >> > yourself. > > >> > ! > > >> > > > >> > Item was changed: > > >> > ----- Method: PackagePaneBrowser>>packageList (in category > 'package > > >> > list') ----- > > >> > packageList > > >> > "Answer a list of the packages in the current system > > >> > organization." > > >> > > > >> > | str stream | > > >> > str := Set new: 100. > > >> > stream := WriteStream on: (Array new: 100). > > >> > systemOrganizer categories do: > > >> > [ :categ | | cats | > > >> > cats := categ asString copyUpTo: $-. > > >> > (str includes: cats) ifFalse: > > >> > [str add: cats. > > >> > stream nextPut: cats]]. > > >> > + packageListSorted > > >> > + ifTrue:[ ^stream contents sorted] > > >> > + ifFalse:[ ^stream contents]! > > >> > - ^stream contents! > > >> > > > >> > Item was changed: > > >> > ----- Method: PackagePaneBrowser>>systemOrganizer: (in category > > >> > 'initialize-release') ----- > > >> > systemOrganizer: aSystemOrganizer > > >> > "Initialize the receiver as a perspective on the system > > >> > organizer, > > >> > aSystemOrganizer. Typically there is only one--the system > > >> > variable > > >> > SystemOrganization." > > >> > > > >> > super systemOrganizer: aSystemOrganizer . > > >> > + packageListIndex := 0. > > >> > + packageListSorted := false! > > >> > - packageListIndex := 0! > > >> > > > >> > Item was added: > > >> > + ----- Method: PackagePaneBrowser>>togglePackageListSorted (in > category > > >> > 'package list') ----- > > >> > + togglePackageListSorted > > >> > + packageListSorted > > >> > + ifTrue:[ packageListSorted := false] > > >> > + ifFalse:[ packageListSorted := true] > > >> > + ! > > >> > > > >> > > > >> > > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151126/d030078e/attachment.htm From karlramberg at gmail.com Thu Nov 26 12:04:39 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 26 12:04:43 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <56543AD3.1020503@zogotounga.net> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> Message-ID: On Tue, Nov 24, 2015 at 11:24 AM, St?phane Rollandin wrote: > You say "Nobody cares. >> Nobody wants to make Squeak better. The only thing the Squeak community >> values is compatibility with Alan's demos, and a version of Etoys that >> nobody uses.". None of those statements are true of my efforts or, as >> far as I can see, of the significant efforts of the HPI team, or of Tim >> Rowledge, if Chris Muller or Levente Uzoni, and probably a lot of other >> folks too. >> >> Squeak is my day to day workhorse. The HOI folks are improving the >> environment at great velocity. Squeak 5 is ~40% faster than Squeak 4.6. >> Neither of these things are true because no one cares. >> > > +1 > > And if I may add: the feeling that "nobody cares" is a permeating one. Not > many people give feedback about what they care about (me included). > > In my case, I definitely have the feeling that nobody cares about anything > I ever did in Squeak during about 15 years now, which to day includes: a > modular Lisp/Scheme implementation, an extension for functional > programming, the upgrading of the Prolog implementation, a vast system for > musical composition, and a Space Invader reboot. > > It's fortunate I did not do this for glory and fame :) > > Even more, I still mostly feel like a complete outsider (probably because > I build things on top of Squeak instead of working on the core, and > possibly also because I work alone and have no position in industry or > academia). > > I'm so convinced nobody cares about what I do that stopped long ago > sending fixes to bug I encounters: I just fix them in my code. For example, > the Saucers game I did has a much faster way of handling morphs, down to > modified #addMorph: logic. This could be leveraged, if someone looked at > the code. But you cannot command interest. > Are you not interested becoming a core developer so you can contribute directly to trunk ? I would guess you are qualified, based on the stuff you have produced... Best, Karl > > Well, that's how it is. I have the same experience with Csound people, so > I'm pretty sure there is nothing specific to Squeak in these matters. The > web is a cold place. > > > Cheers, > > Stef > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151126/b731c9a6/attachment.htm From commits at source.squeak.org Thu Nov 26 15:58:52 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 26 15:58:56 2015 Subject: [squeak-dev] The Trunk: Squeak-Version-kfr.4713.mcz Message-ID: Karl Ramberg uploaded a new version of Squeak-Version to project The Trunk: http://source.squeak.org/trunk/Squeak-Version-kfr.4713.mcz ==================== Summary ==================== Name: Squeak-Version-kfr.4713 Author: kfr Time: 26 November 2015, 4:57:34.747 pm UUID: 96c171dc-c340-492e-b376-30e0212b9c8e Ancestors: Squeak-Version-kfr.4712 Unload and unregister Universes =============== Diff against Squeak-Version-kfr.4712 =============== Item was added: + (PackageInfo named: 'Squeak-Version') postscript: '"below, add code to be run after the loading of this package" + (MCPackage named: ''Universes'') workingCopy unload. + (MCPackage named: ''Universes'') workingCopy unregister. + '! From karlramberg at gmail.com Thu Nov 26 16:00:12 2015 From: karlramberg at gmail.com (karl ramberg) Date: Thu Nov 26 16:00:16 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz In-Reply-To: References: <213BA91F-07E4-4889-9E97-630A6A10493F@gmx.de> Message-ID: Ok, I made a new version that unloads and unregister Universes from the Squeak-Version post script. Best, Karl On Thu, Nov 26, 2015 at 12:20 AM, Levente Uzonyi wrote: > On Wed, 25 Nov 2015, Tobias Pape wrote: > > >> On 25.11.2015, at 20:20, karl ramberg wrote: >> >> It seems all package unloading involves it first being loaded. >>> >>> But you mean it the unloading should be in the post script? >>> >>> >> I would actually favour to do the unloading of any to-be-gone package >> in the postscript of the SqueakVersion Package (possibly incrementing the >> version by >> the necessary offset). >> >> What do you think? >> > > I agree. > > Levente > > > >> Best regards >> -Tobias >> >> PS: I had this all on my mental list and had hoped to do it before >> novermber, but >> thats how it goes? >> >> >>> >>> On Wed, Nov 25, 2015 at 5:53 PM, Levente Uzonyi wrote: >>> I don't think it is right to unload the package when you're about to >>> load it. I wonder what would happen if you were to load it into an image. >>> >>> Levente >>> >>> >>> On Wed, 25 Nov 2015, commits@source.squeak.org wrote: >>> >>> Karl Ramberg uploaded a new version of Universes to project The Trunk: >>> http://source.squeak.org/trunk/Universes-kfr.49.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Universes-kfr.49 >>> Author: kfr >>> Time: 25 November 2015, 4:41:51.099 pm >>> UUID: 7fee292f-53fe-4b4d-822a-bf8798bd2cda >>> Ancestors: Universes-mt.48 >>> >>> Removal of Universes >>> >>> =============== Diff against Universes-mt.48 =============== >>> >>> Item was added: >>> + (PackageInfo named: 'Universes') preamble: '"below, add code to be run >>> before the loading of this package" >>> + (MCPackage named: ''Universes'') workingCopy unload'! >>> >>> >>> >>> >>> >>> >>> >> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151126/c03bba20/attachment-0001.htm From hannes.hirzel at gmail.com Thu Nov 26 17:11:40 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Thu Nov 26 17:11:43 2015 Subject: Raspberry Pi Zero (5USD) with Scratch (Re: Use of the Scratch program in the UK? (Re: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz)) Message-ID: https://www.youtube.com/watch?v=NFFQmdUc5Vg&feature=youtu.be&a at 4:17 shows the Raspberry Pi Zero (a 5USD computer) running Scratch On 11/24/15, H. Hirzel wrote: > On 11/24/15, H. Hirzel wrote: >> On 11/24/15, David T. Lewis wrote: >>> On Mon, Nov 23, 2015 at 11:30:44PM +0100, karl ramberg wrote: >>>> On Mon, Nov 23, 2015 at 11:17 PM, tim Rowledge >>>> wrote: >>>> >>>> > >>>> > > On 23-11-2015, at 1:16 PM, Chris Muller >>>> > > wrote: >>>> > > >>>> > > Is this so that Scratch users won't have to see the pre-debugger? >>>> > >>>> > Nah, the Scratch code handles it in ScratchSoundRecroderDialog or >>>> > some-such. These couple of changes are simply suggestions for more >>>> > politely >>>> > handling a possible problem in a way that is a touch less painful >>>> > than >>>> > a >>>> > primitiveFailed within a critical block. If people prefer the plain >>>> > notifier for an unhandled Warning, fine. >>>> > >>>> > ChatNotes etc are not used by Scratch - though enabling group chat >>>> > could >>>> > be fun... >>>> > >>>> > > If >>>> > > a Scratch kid gets a debugger and clicks "Debug" isntead of >>>> > > "Abanadon". They might get confused or they might learn >>>> > > something..? >>>> > >>>> > I suspect a teacher of a class of 30-40 8 year olds trying to keep >>>> > their >>>> > minds on the required lesson might not see it as at all amusing. >>>> > Remember, >>>> > Scratch usage is now part of the national curriculum in the UK. >>>> > >>>> >>>> Oh, that's really big. >>>> Hope they enjoy it :-) >>>> >>> >>> Indeed, it sounds like a pretty big deal, but not something that I would >>> have remembered since I did not know about it in the first place. Tim, >>> can you provide a link to "Scratch usage is now part of the national >>> curriculum in the UK"? >> >> So far I found >> >> http://www.naace.co.uk/curriculum/primaryguide >> >> Page 14 shows a screen with scratch. This is from an association of >> UK ICT teachers. >> >> There are web pages from the UK government but I did not find the >> reference >> yet. > > And here an announcement for teachers to learn about Scratch in Jan 2016 > > https://www.sciencelearningcentres.org.uk/cpd/ondemand/fc0b576e-61a4-46b8-a4de-943f1fa02124/delivering-the-coding-elements-of-the-national-curriculum-at-ks2/ > > > "Experience a number of different methods to develop both your skills > in Scratch and the teaching techniques that you can use to make it > work for you and your students." > > "This course takes you through the principles of the computing > curriculum coding programming, giving you ?hand on? opportunities to > experience a number of different methods hands on time to develop > both your skills in Scratch and the teaching techniques that you can > use to make it work for you and your students. In 2 days, we will take > you from creating simple programs to the exciting coded world of > creating your own computer games." > > > >> --Hannes >> >> >>> And when they say "Scratch" does it mean the real one, or the "improved" >>> version that was reimplemented in a soon-to-be-dead language by wannabe >>> IT managers? >>> >>> Dave >>> >>> >>> >> > From tim at rowledge.org Thu Nov 26 19:32:45 2015 From: tim at rowledge.org (tim Rowledge) Date: Thu Nov 26 19:32:48 2015 Subject: Raspberry Pi Zero (5USD) with Scratch (Re: Use of the Scratch program in the UK? (Re: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz)) In-Reply-To: References: Message-ID: <1DEF8607-1EAB-494E-A382-442F28FE9243@rowledge.org> > On 26-11-2015, at 9:11 AM, H. Hirzel wrote: > > https://www.youtube.com/watch?v=NFFQmdUc5Vg&feature=youtu.be&a > > at 4:17 shows the Raspberry Pi Zero (a 5USD computer) running Scratch > This months ?MagPi? magazine in hardcopy version includes a free P0 stuck to the front cover. I?m reasonably sure it?s the first time a full linux computer has been given away with a magazine, but I could be wrong. See also https://vimeo.com/146893658 for the official release video, and indeed the foundation website blog at https://www.raspberrypi.org/blog/raspberry-pi-zero/ At 1GHz even a single-core bcm2835 runs Squeak/Cog/Spur quite nicely and Scratch can run Asteroids at 45+ fps, and PacMan (which originally managed <1fps on the original PiB with original Scratch image) trots along at ~12fps. Using the ?Shootout? benchmarks Eliot favours for large non-UI testing, the P0 will score around half of the Pi2 - but with the Cog/Spur vm it is about 5X the orginal PiB system when this all started in2012. 40+ Dorado for $5 seems a pretty good deal. Of course, the web is alight with complaints that it isn?t a quadcore multi-GHz Xeon with terabytes of ram and petabytes of ssd. Oh, and it costs too much, apparently. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Bayard(n): a person armed with the self-confidence of ignorance From frank.shearar at gmail.com Thu Nov 26 20:11:29 2015 From: frank.shearar at gmail.com (Frank Shearar) Date: Thu Nov 26 20:11:32 2015 Subject: Raspberry Pi Zero (5USD) with Scratch (Re: Use of the Scratch program in the UK? (Re: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz)) In-Reply-To: <1DEF8607-1EAB-494E-A382-442F28FE9243@rowledge.org> References: <1DEF8607-1EAB-494E-A382-442F28FE9243@rowledge.org> Message-ID: On 26 November 2015 at 19:32, tim Rowledge wrote: > >> On 26-11-2015, at 9:11 AM, H. Hirzel wrote: >> >> https://www.youtube.com/watch?v=NFFQmdUc5Vg&feature=youtu.be&a >> >> at 4:17 shows the Raspberry Pi Zero (a 5USD computer) running Scratch >> > > This months ?MagPi? magazine in hardcopy version includes a free P0 stuck to the front cover. I?m reasonably sure it?s the first time a full linux computer has been given away with a magazine, but I could be wrong. > > See also https://vimeo.com/146893658 for the official release video, and indeed the foundation website blog at https://www.raspberrypi.org/blog/raspberry-pi-zero/ > > At 1GHz even a single-core bcm2835 runs Squeak/Cog/Spur quite nicely and Scratch can run Asteroids at 45+ fps, and PacMan (which originally managed <1fps on the original PiB with original Scratch image) trots along at ~12fps. > > Using the ?Shootout? benchmarks Eliot favours for large non-UI testing, the P0 will score around half of the Pi2 - but with the Cog/Spur vm it is about 5X the orginal PiB system when this all started in2012. 40+ Dorado for $5 seems a pretty good deal. > > Of course, the web is alight with complaints that it isn?t a quadcore multi-GHz Xeon with terabytes of ram and petabytes of ssd. Oh, and it costs too much, apparently. Well, there are lots of people who can complain now, because everywhere seems to be sold out. To the complainers: don't worry, just send me your Pi0. I don't mind. frank > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Bayard(n): a person armed with the self-confidence of ignorance > > From frank.shearar at gmail.com Thu Nov 26 20:13:22 2015 From: frank.shearar at gmail.com (Frank Shearar) Date: Thu Nov 26 20:13:25 2015 Subject: Raspberry Pi Zero (5USD) with Scratch (Re: Use of the Scratch program in the UK? (Re: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz)) In-Reply-To: References: <1DEF8607-1EAB-494E-A382-442F28FE9243@rowledge.org> Message-ID: On 26 November 2015 at 20:11, Frank Shearar wrote: > On 26 November 2015 at 19:32, tim Rowledge wrote: >> >>> On 26-11-2015, at 9:11 AM, H. Hirzel wrote: >>> >>> https://www.youtube.com/watch?v=NFFQmdUc5Vg&feature=youtu.be&a >>> >>> at 4:17 shows the Raspberry Pi Zero (a 5USD computer) running Scratch >>> >> >> This months ?MagPi? magazine in hardcopy version includes a free P0 stuck to the front cover. I?m reasonably sure it?s the first time a full linux computer has been given away with a magazine, but I could be wrong. >> >> See also https://vimeo.com/146893658 for the official release video, and indeed the foundation website blog at https://www.raspberrypi.org/blog/raspberry-pi-zero/ >> >> At 1GHz even a single-core bcm2835 runs Squeak/Cog/Spur quite nicely and Scratch can run Asteroids at 45+ fps, and PacMan (which originally managed <1fps on the original PiB with original Scratch image) trots along at ~12fps. >> >> Using the ?Shootout? benchmarks Eliot favours for large non-UI testing, the P0 will score around half of the Pi2 - but with the Cog/Spur vm it is about 5X the orginal PiB system when this all started in2012. 40+ Dorado for $5 seems a pretty good deal. >> >> Of course, the web is alight with complaints that it isn?t a quadcore multi-GHz Xeon with terabytes of ram and petabytes of ssd. Oh, and it costs too much, apparently. > > Well, there are lots of people who can complain now, because > everywhere seems to be sold out. To the complainers: don't worry, just > send me your Pi0. I don't mind. For goodness' sake, that's _less than a pint_ for a computer. frank > frank > >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> Bayard(n): a person armed with the self-confidence of ignorance >> >> From commits at source.squeak.org Thu Nov 26 22:55:04 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Nov 26 22:55:07 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151126225504.6520.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009199.html Name: Squeak-Version-kfr.4713 Ancestors: Squeak-Version-kfr.4712 Unload and unregister Universes ============================================= From btc at openinworld.com Thu Nov 26 23:11:30 2015 From: btc at openinworld.com (Ben Coman) Date: Thu Nov 26 23:11:55 2015 Subject: Raspberry Pi Zero (5USD) with Scratch (Re: Use of the Scratch program in the UK? (Re: [squeak-dev] The Inbox: Nebraska-tpr.42.mcz)) In-Reply-To: References: <1DEF8607-1EAB-494E-A382-442F28FE9243@rowledge.org> Message-ID: On Fri, Nov 27, 2015 at 4:13 AM, Frank Shearar wrote: > On 26 November 2015 at 20:11, Frank Shearar wrote: >> On 26 November 2015 at 19:32, tim Rowledge wrote: >>> >>>> On 26-11-2015, at 9:11 AM, H. Hirzel wrote: >>>> >>>> https://www.youtube.com/watch?v=NFFQmdUc5Vg&feature=youtu.be&a >>>> >>>> at 4:17 shows the Raspberry Pi Zero (a 5USD computer) running Scratch >>>> >>> >>> This months ?MagPi? magazine in hardcopy version includes a free P0 stuck to the front cover. I?m reasonably sure it?s the first time a full linux computer has been given away with a magazine, but I could be wrong. >>> >>> See also https://vimeo.com/146893658 for the official release video, and indeed the foundation website blog at https://www.raspberrypi.org/blog/raspberry-pi-zero/ >>> >>> At 1GHz even a single-core bcm2835 runs Squeak/Cog/Spur quite nicely and Scratch can run Asteroids at 45+ fps, and PacMan (which originally managed <1fps on the original PiB with original Scratch image) trots along at ~12fps. >>> >>> Using the ?Shootout? benchmarks Eliot favours for large non-UI testing, the P0 will score around half of the Pi2 - but with the Cog/Spur vm it is about 5X the orginal PiB system when this all started in2012. 40+ Dorado for $5 seems a pretty good deal. >>> >>> Of course, the web is alight with complaints that it isn?t a quadcore multi-GHz Xeon with terabytes of ram and petabytes of ssd. Oh, and it costs too much, apparently. >> >> Well, there are lots of people who can complain now, because >> everywhere seems to be sold out. To the complainers: don't worry, just >> send me your Pi0. I don't mind. > > For goodness' sake, that's _less than a pint_ for a computer. So we can say its a pint-sized computer? cheers -ben From lecteur at zogotounga.net Fri Nov 27 09:14:58 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Fri Nov 27 09:15:01 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> Message-ID: <56581F12.7040303@zogotounga.net> > Are you not interested becoming a core developer so you can contribute > directly to trunk ? > I would guess you are qualified, based on the stuff you have produced... Why not ? Stef From lecteur at zogotounga.net Fri Nov 27 09:24:12 2015 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Fri Nov 27 09:24:17 2015 Subject: [squeak-dev] The Inbox: Traits-pre.307.mcz In-Reply-To: <56581F12.7040303@zogotounga.net> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> <56581F12.7040303@zogotounga.net> Message-ID: <5658213C.8060805@zogotounga.net> > Why not ? By which I mean: "yes, I'd be honored". Which is more proper I guess... Stef From stephan at stack.nl Fri Nov 27 10:08:00 2015 From: stephan at stack.nl (Stephan Eggermont) Date: Fri Nov 27 10:08:23 2015 Subject: [squeak-dev] How does runLocalStepMethodsIn: aWorld work? Message-ID: Looking at how to do autoscrolling when drag-holding, we ran into: WorldState>>runLocalStepmethodsIn: aWorld does interesting things with the lastStepMessage. Can anyone explain how this works? Why does it not do anything with lastStepMessage value: now. and then test for lastStepMessage ifNotNil: There's a comment about buggy morphs. Were they so buggy that they did a become on a message send? Or do I totally misunderstand this stuff? Stephan From Marcel.Taeumel at hpi.de Fri Nov 27 11:25:19 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 27 11:41:17 2015 Subject: [squeak-dev] Re: How does runLocalStepMethodsIn: aWorld work? In-Reply-To: References: Message-ID: <1448623519202-4863855.post@n4.nabble.com> Hi Stephan, I suspect WorldState >> #stopStepping: or WorldState >> #stopStepping:selector:. If the step message calls something like "self stopStepping", then you do not want another step call but an immediate stop of the stepping. WorldState >> stopStepping: aMorph "Remove the given morph from the step list." lastStepMessage ifNotNil:[ (lastStepMessage receiver == aMorph) ifTrue:[lastStepMessage := nil]]. stepList removeAll: (stepList select:[:stepMsg| stepMsg receiver == aMorph]). Hence, there is no suspicious "become" but only a nasty side-effect. :) Best, Marcel -- View this message in context: http://forum.world.st/How-does-runLocalStepMethodsIn-aWorld-work-tp4863844p4863855.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Nov 27 11:29:50 2015 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Nov 27 11:45:47 2015 Subject: [squeak-dev] Re: How does runLocalStepMethodsIn: aWorld work? In-Reply-To: <1448623519202-4863855.post@n4.nabble.com> References: <1448623519202-4863855.post@n4.nabble.com> Message-ID: <1448623790615-4863856.post@n4.nabble.com> I think that WorldState >> #stopStepping: (resp. Morph >> #stopStepping) is also part of the machinery for controlling buggy morphs to not go wild. Try browsing senders of #stopStepping. Therefore, you remove the morph from the stepping list before you let it step. If everything worked out fine, that is lastStepMessage is not nil, you put it into the list again. Best, Marcel -- View this message in context: http://forum.world.st/How-does-runLocalStepMethodsIn-aWorld-work-tp4863844p4863856.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From hannes.hirzel at gmail.com Fri Nov 27 13:22:48 2015 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Nov 27 13:22:52 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz In-Reply-To: References: <213BA91F-07E4-4889-9E97-630A6A10493F@gmx.de> Message-ID: Update through the SqueakMenu up to update number 15555 is fine. Seems to work fine at this end. Universes are no longer in the image. Only and Installer class is left. --Hannes On 11/26/15, karl ramberg wrote: > Ok, > I made a new version that unloads and unregister Universes from the > Squeak-Version post script. > > Best, > Karl > > On Thu, Nov 26, 2015 at 12:20 AM, Levente Uzonyi wrote: > >> On Wed, 25 Nov 2015, Tobias Pape wrote: >> >> >>> On 25.11.2015, at 20:20, karl ramberg wrote: >>> >>> It seems all package unloading involves it first being loaded. >>>> >>>> But you mean it the unloading should be in the post script? >>>> >>>> >>> I would actually favour to do the unloading of any to-be-gone package >>> in the postscript of the SqueakVersion Package (possibly incrementing >>> the >>> version by >>> the necessary offset). >>> >>> What do you think? >>> >> >> I agree. >> >> Levente >> >> >> >>> Best regards >>> -Tobias >>> >>> PS: I had this all on my mental list and had hoped to do it before >>> novermber, but >>> thats how it goes? >>> >>> >>>> >>>> On Wed, Nov 25, 2015 at 5:53 PM, Levente Uzonyi wrote: >>>> I don't think it is right to unload the package when you're about to >>>> load it. I wonder what would happen if you were to load it into an >>>> image. >>>> >>>> Levente >>>> >>>> >>>> On Wed, 25 Nov 2015, commits@source.squeak.org wrote: >>>> >>>> Karl Ramberg uploaded a new version of Universes to project The Trunk: >>>> http://source.squeak.org/trunk/Universes-kfr.49.mcz >>>> >>>> ==================== Summary ==================== >>>> >>>> Name: Universes-kfr.49 >>>> Author: kfr >>>> Time: 25 November 2015, 4:41:51.099 pm >>>> UUID: 7fee292f-53fe-4b4d-822a-bf8798bd2cda >>>> Ancestors: Universes-mt.48 >>>> >>>> Removal of Universes >>>> >>>> =============== Diff against Universes-mt.48 =============== >>>> >>>> Item was added: >>>> + (PackageInfo named: 'Universes') preamble: '"below, add code to be >>>> run >>>> before the loading of this package" >>>> + (MCPackage named: ''Universes'') workingCopy unload'! >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>> >>> >> >> >> > -------------- next part -------------- A non-text attachment was scrubbed... Name: Squeak_update_15555_Screenshot_2015-11-27.png Type: image/png Size: 20569 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151127/92b4a996/Squeak_update_15555_Screenshot_2015-11-27.png From stephan at stack.nl Fri Nov 27 13:38:52 2015 From: stephan at stack.nl (Stephan Eggermont) Date: Fri Nov 27 13:39:17 2015 Subject: [squeak-dev] Re: How does runLocalStepMethodsIn: aWorld work? In-Reply-To: <1448623519202-4863855.post@n4.nabble.com> References: <1448623519202-4863855.post@n4.nabble.com> Message-ID: On 27-11-15 12:25, marcel.taeumel wrote: > Hi Stephan, > > I suspect WorldState >> #stopStepping: or WorldState >> > #stopStepping:selector:. If the step message calls something like "self > stopStepping", then you do not want another step call but an immediate stop > of the stepping. > > WorldState >> stopStepping: aMorph > > Hence, there is no suspicious "become" but only a nasty side-effect. :) Ah yes, I see. Interesting approach. Stephan From edgardec2005 at gmail.com Fri Nov 27 14:55:03 2015 From: edgardec2005 at gmail.com (Edgar De Cleene) Date: Fri Nov 27 14:55:12 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz In-Reply-To: References: <213BA91F-07E4-4889-9E97-630A6A10493F@gmx.de> Message-ID: > On Nov 27, 2015, at 10:22, H. Hirzel wrote: > > Update through the SqueakMenu up to update number 15555 is fine. Seems > to work fine at this end. > > Universes are no longer in the image. Only and Installer class is left. > > ?Hannes Very good news. Thanks Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151127/dedb93c5/attachment.htm From commits at source.squeak.org Sat Nov 28 01:16:44 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 28 01:16:57 2015 Subject: [squeak-dev] The Trunk: Environments-cwp.60.mcz Message-ID: Colin Putney uploaded a new version of Environments to project The Trunk: http://source.squeak.org/trunk/Environments-cwp.60.mcz ==================== Summary ==================== Name: Environments-cwp.60 Author: cwp Time: 27 November 2015, 5:14:36.376 pm UUID: c8836cde-f21e-4652-a2e9-73f8de6f00e0 Ancestors: Environments-kfr.59 Always serialize Bindings as DiskProxies. =============== Diff against Environments-kfr.59 =============== Item was changed: ----- Method: Binding>>objectForDataStream: (in category 'as yet unclassified') ----- objectForDataStream: refStrm + "I am about to be written on an object file. I am a global, so write a proxy that + will hook up with the same resource in the destination system." - | dp | - "I am about to be written on an object file. If I am a known global, write a proxy that will hook up with the same resource in the destination system." - self flag: #environments. + | dp | + dp := DiskProxy + global: #Smalltalk + selector: #associationOrUndeclaredAt: + args: (Array with: key). + refStrm replace: self with: dp. + ^ dp! - ^ (Smalltalk globals associationAt: key ifAbsent: [nil]) == self - ifTrue: [dp := DiskProxy global: #Smalltalk selector: #associationOrUndeclaredAt: - args: (Array with: key). - refStrm replace: self with: dp. - dp] - ifFalse: [self]! From commits at source.squeak.org Sat Nov 28 01:25:50 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 28 01:25:59 2015 Subject: [squeak-dev] The Trunk: System-cwp.781.mcz Message-ID: Colin Putney uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cwp.781.mcz ==================== Summary ==================== Name: System-cwp.781 Author: cwp Time: 27 November 2015, 5:22:38.591 pm UUID: c0ffbab7-f7ee-4966-ba07-d57436ac42f2 Ancestors: System-mt.780 Remove specialized serialization of Associations. Since associations are no longer used as globals, we never need to serialize them using DiskProxy. =============== Diff against System-mt.780 =============== Item was removed: - ----- Method: Association>>objectForDataStream: (in category '*System-Object Storage-objects from disk') ----- - objectForDataStream: refStrm - | dp | - "I am about to be written on an object file. If I am a known global, write a proxy that will hook up with the same resource in the destination system." - self flag: #environments. - - ^ (Smalltalk globals associationAt: key ifAbsent: [nil]) == self - ifTrue: [dp := DiskProxy global: #Smalltalk selector: #associationOrUndeclaredAt: - args: (Array with: key). - refStrm replace: self with: dp. - dp] - ifFalse: [self]! From commits at source.squeak.org Sat Nov 28 05:06:01 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 28 05:06:19 2015 Subject: [squeak-dev] The Trunk: System-cwp.782.mcz Message-ID: Colin Putney uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cwp.782.mcz ==================== Summary ==================== Name: System-cwp.782 Author: cwp Time: 27 November 2015, 9:00:42.904 pm UUID: ae1f1166-0438-4e78-8ded-46c59c212210 Ancestors: System-cwp.781 Reload DiskProxies using the current environment When looking up objects from the destination image, DiskProxies should use the current environment, rather than referring to to Smalltalk. This lets objects on disk be loaded into arbitrary environments. =============== Diff against System-cwp.781 =============== Item was changed: ----- Method: DiskProxy>>comeFullyUpOnReload: (in category 'i/o') ----- comeFullyUpOnReload: smartRefStream "Internalize myself into a fully alive object after raw loading from a DataStream. (See my class comment.) DataStream will substitute the object from this eval for the DiskProxy." + | globalObj symbol pr nn arrayIndex env | - | globalObj symbol pr nn arrayIndex | - self flag: #environments. symbol := globalObjectName. "See if class is mapped to another name" (smartRefStream respondsTo: #renamed) ifTrue: [ "If in outPointers in an ImageSegment, remember original class name. See mapClass:installIn:. Would be lost otherwise." ((thisContext sender sender sender sender sender sender sender sender receiver class == ImageSegment) and: [ thisContext sender sender sender sender method == (DataStream compiledMethodAt: #readArray)]) ifTrue: [ arrayIndex := (thisContext sender sender sender sender) tempAt: 4. "index var in readArray. Later safer to find i on stack of context." smartRefStream renamedConv at: arrayIndex put: symbol]. "save original name" symbol := smartRefStream renamed at: symbol ifAbsent: [symbol]]. "map" + env := Environment current. + globalObj := env valueOf: symbol ifAbsent: [ - globalObj := Smalltalk at: symbol ifAbsent: [ preSelector == nil & (constructorSelector = #yourself) ifTrue: [ Transcript cr; show: symbol, ' is undeclared.'. + env undeclare: symbol. - (Undeclared includesKey: symbol) ifTrue: [^ Undeclared at: symbol]. - Undeclared at: symbol put: nil. ^ nil]. ^ self error: 'Global "', symbol, '" not found']. ((symbol == #World) and: [Smalltalk isMorphic not]) ifTrue: [ self inform: 'These objects will work better if opened in a Morphic World. Dismiss and reopen all menus.']. preSelector ifNotNil: [ Symbol hasInterned: preSelector ifTrue: [:selector | [globalObj := globalObj perform: selector] on: Error do: [:ex | ex messageText = 'key not found' ifTrue: [^ nil]. ^ ex signal]] ]. symbol == #Project ifTrue: [ (constructorSelector = #fromUrl:) ifTrue: [ nn := (constructorArgs first findTokens: '/') last. nn := (nn findTokens: '.|') first. pr := Project named: nn. ^ pr ifNil: [self] ifNotNil: [pr]]. pr := globalObj perform: constructorSelector withArguments: constructorArgs. ^ pr ifNil: [self] ifNotNil: [pr]]. "keep the Proxy if Project does not exist" constructorSelector ifNil: [^ globalObj]. Symbol hasInterned: constructorSelector ifTrue: [:selector | [^ globalObj perform: selector withArguments: constructorArgs] on: Error do: [:ex | ex messageText = 'key not found' ifTrue: [^ nil]. ^ ex signal] ]. "args not checked against Renamed" ^ nil "was not in proper form"! From commits at source.squeak.org Sat Nov 28 05:48:47 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 28 05:48:54 2015 Subject: [squeak-dev] The Inbox: Morphic-cwp.1055.mcz Message-ID: A new version of Morphic was added to project The Inbox: http://source.squeak.org/inbox/Morphic-cwp.1055.mcz ==================== Summary ==================== Name: Morphic-cwp.1055 Author: cwp Time: 27 November 2015, 9:46:27.986 pm UUID: 75600228-b4f9-4739-b9c8-0318e1ef1d3a Ancestors: Morphic-mt.1054 Implement PasteUpMorph>>referencePool Loading a project seems to require it. =============== Diff against Morphic-mt.1054 =============== Item was added: + ----- Method: PasteUpMorph>>referencePool (in category 'objects from disk') ----- + referencePool + | pool | + pool := OrderedCollection new. + self setProperty: #References toValue: pool. + ^ pool! From colin at wiresong.com Sat Nov 28 06:00:44 2015 From: colin at wiresong.com (Colin Putney) Date: Sat Nov 28 06:01:02 2015 Subject: [squeak-dev] It's not yet clear how serialization should work in the presence of environments In-Reply-To: References: <20140928022023.GA61861@shell.msen.com> <5427C41F.5060805@gmx.net> Message-ID: On Tue, Nov 24, 2015 at 1:01 PM, H. Hirzel wrote: > This simple case where there is only one environment is described in > http://bugs.squeak.org/view.php?id=7814 > > And currently probably nearly 100% of the users still have only one > environment. > > What would it mean to fix this case? > Ok, I think I've got it sorted out. I've made the following changes in trunk: - Bindings implement #objectForDataStream: by always creating a DiskProxy - Association should never create a DiskProxy, so no longer implement #objectForDataStream: - DiskProxy now uses the current environment in #comeUpFullyOnReload:, rather than Smalltalk That should take care of the single-environment case. It should also work for multi-environment images, if we create UI for setting the "current" environment, or actually make use of the "environment" instance variable in Project. One other change was required to get loading a project to work, but this has nothing to do with environments. In the Inbox, I've uploaded a version of Morphic that implements PasteUpMorph>>referencePool, which creates a new reference pool... whatever that is. Could someone who knows more about Projects review that, please? With these four changes, it's possible to save and load projects in a Squeak 4.6 image. It doesn't work in a trunk image, however. The Spur VM crashes when saving a project. I've reported that on the VM list. It also fails to load an image segment - looks like the primitive for that isn't quite finished in Spur. Though I've tested these changes in a 4.6 image, I committed them to trunk only. What's the correct way to get them into the 4.6 update stream as well? Colin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151127/940b6313/attachment-0001.htm From karlramberg at gmail.com Sat Nov 28 06:13:50 2015 From: karlramberg at gmail.com (karl ramberg) Date: Sat Nov 28 06:13:55 2015 Subject: [squeak-dev] It's not yet clear how serialization should work in the presence of environments In-Reply-To: References: <20140928022023.GA61861@shell.msen.com> <5427C41F.5060805@gmx.net> Message-ID: Yay Best, Karl On Sat, Nov 28, 2015 at 7:00 AM, Colin Putney wrote: > > > On Tue, Nov 24, 2015 at 1:01 PM, H. Hirzel > wrote: > > >> This simple case where there is only one environment is described in >> http://bugs.squeak.org/view.php?id=7814 >> >> And currently probably nearly 100% of the users still have only one >> environment. >> >> What would it mean to fix this case? >> > > Ok, I think I've got it sorted out. I've made the following changes in > trunk: > > - Bindings implement #objectForDataStream: by always creating a DiskProxy > - Association should never create a DiskProxy, so no longer implement > #objectForDataStream: > - DiskProxy now uses the current environment in #comeUpFullyOnReload:, > rather than Smalltalk > > That should take care of the single-environment case. It should also work > for multi-environment images, if we create UI for setting the "current" > environment, or actually make use of the "environment" instance variable in > Project. > > One other change was required to get loading a project to work, but this > has nothing to do with environments. In the Inbox, I've uploaded a version > of Morphic that implements PasteUpMorph>>referencePool, which creates a new > reference pool... whatever that is. Could someone who knows more about > Projects review that, please? > > With these four changes, it's possible to save and load projects in a > Squeak 4.6 image. It doesn't work in a trunk image, however. The Spur VM > crashes when saving a project. I've reported that on the VM list. It also > fails to load an image segment - looks like the primitive for that isn't > quite finished in Spur. > > Though I've tested these changes in a 4.6 image, I committed them to trunk > only. What's the correct way to get them into the 4.6 update stream as well? > > Colin > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151128/71e554f6/attachment.htm From commits at source.squeak.org Sat Nov 28 06:37:04 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 28 06:37:10 2015 Subject: [squeak-dev] The Inbox: Morphic-jmg.1055.mcz Message-ID: A new version of Morphic was added to project The Inbox: http://source.squeak.org/inbox/Morphic-jmg.1055.mcz ==================== Summary ==================== Name: Morphic-jmg.1055 Author: jmg Time: 27 November 2015, 11:34:49.151 pm UUID: 2866bfd1-711c-4f03-b944-b8d4adb0f6cb Ancestors: Morphic-mt.1054 If you're like me and have the swapMouseButtons perference unselected because you are on windows, then right-clicking on a morph and picking the 'select' menu item raises an exception because popUpFor:at:hand: is expecting a position for the at: argument, and currently this sends in a MouseEvent transformed by the relevant amount. We need to take one additional step and extract the position from this newly translated event, which I do in this change. =============== Diff against Morphic-mt.1054 =============== Item was changed: ----- Method: SimpleHaloMorph>>popUpFor:hand: (in category 'pop up') ----- popUpFor: morph hand: hand self popUpFor: morph + at: (hand lastEvent transformedBy: (morph transformedFrom: nil)) position - at: (hand lastEvent transformedBy: (morph transformedFrom: nil)) hand: hand! From commits at source.squeak.org Sat Nov 28 22:55:28 2015 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Nov 28 22:55:46 2015 Subject: [squeak-dev] Daily Commit Log Message-ID: <20151128225528.26260.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2015-November/009200.html Name: Environments-cwp.60 Ancestors: Environments-kfr.59 Always serialize Bindings as DiskProxies. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009201.html Name: System-cwp.781 Ancestors: System-mt.780 Remove specialized serialization of Associations. Since associations are no longer used as globals, we never need to serialize them using DiskProxy. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2015-November/009202.html Name: System-cwp.782 Ancestors: System-cwp.781 Reload DiskProxies using the current environment When looking up objects from the destination image, DiskProxies should use the current environment, rather than referring to to Smalltalk. This lets objects on disk be loaded into arbitrary environments. ============================================= From leves at elte.hu Sun Nov 29 03:03:35 2015 From: leves at elte.hu (Levente Uzonyi) Date: Sun Nov 29 03:03:47 2015 Subject: [squeak-dev] The Trunk: Universes-kfr.49.mcz In-Reply-To: References: <213BA91F-07E4-4889-9E97-630A6A10493F@gmx.de> Message-ID: Sadly the update process will break if your image has Universes-mt.48 in it, because it'll try to load Universes-kfr.49 after it has been removed by Squeak-Version. I think removing Universes from the update map will help. Levente On Fri, 27 Nov 2015, Edgar De Cleene wrote: > > On Nov 27, 2015, at 10:22, H. Hirzel wrote: > > Update through the SqueakMenu up to update number 15555 is fine. Seems > to work fine at this end. > > Universes are no longer in the image. Only and Installer class is left. > > ?Hannes > > > Very good news. > Thanks Karl > > > From lewis at mail.msen.com Sun Nov 29 23:52:43 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Mon Nov 30 23:06:39 2015 Subject: [squeak-dev] It's not yet clear how serialization should work in the presence of environments In-Reply-To: References: <20140928022023.GA61861@shell.msen.com> <5427C41F.5060805@gmx.net> Message-ID: <20151129235243.GA31822@shell.msen.com> On Fri, Nov 27, 2015 at 10:00:44PM -0800, Colin Putney wrote: > On Tue, Nov 24, 2015 at 1:01 PM, H. Hirzel wrote: > > > > This simple case where there is only one environment is described in > > http://bugs.squeak.org/view.php?id=7814 > > > > And currently probably nearly 100% of the users still have only one > > environment. > > > > What would it mean to fix this case? > > > > Ok, I think I've got it sorted out. I've made the following changes in > trunk: Colin, Thank you for doing this! > > With these four changes, it's possible to save and load projects in a > Squeak 4.6 image. It doesn't work in a trunk image, however. The Spur VM > crashes when saving a project. I've reported that on the VM list. It also > fails to load an image segment - looks like the primitive for that isn't > quite finished in Spur. > Your message to vm-dev was initially blocked due to message size, but I re-sent it to the list and put a copy of your crash-image.zip here: http://squeakvm.org/~lewis/tmp/crash-image.zip It's a holiday week in the US so you may not get an immediate response on the crash issue. The main thing is that you have it working in 4.6 (yay!) so we now have a working baseline for image segments with Environments, and whatever issues are appearing in 5.0/trunk can be much more easily understood and addressed. > Though I've tested these changes in a 4.6 image, I committed them to trunk > only. What's the correct way to get them into the 4.6 update stream as well? > I am not certain, but I expect we will want to merge them back into the squeak46 repository, and possibly also consider doing a maintenance release to the 4.6 image. Having an up to date image with working image segments seems like a pretty big deal to me :-) Dave From lewis at mail.msen.com Sun Nov 29 19:59:31 2015 From: lewis at mail.msen.com (David T. Lewis) Date: Mon Nov 30 23:06:46 2015 Subject: [squeak-dev] Core developers (was: The Inbox: Traits-pre.307.mcz) In-Reply-To: <5658213C.8060805@zogotounga.net> References: <20151120135830.295FD60613@mail2.hpi.uni-potsdam.de> <1448028452837.42806@hpi.de> <4A03255F-A50C-4DE4-98DC-4F4332508800@rowledge.org> <8C3DFFEB-F8F4-45ED-B754-44597C00FBA2@gmail.com> <56543AD3.1020503@zogotounga.net> <56581F12.7040303@zogotounga.net> <5658213C.8060805@zogotounga.net> Message-ID: <20151129195931.GA92720@shell.msen.com> On Fri, Nov 27, 2015 at 10:24:12AM +0100, St??phane Rollandin wrote: > > On Thu, Nov 26, 2015 at 01:04:39PM +0100, karl ramberg wrote: > > > > On Tue, Nov 24, 2015 at 11:24 AM, St??phane Rollandin > > > > > I'm so convinced nobody cares about what I do that stopped long ago > > > sending fixes to bug I encounters: I just fix them in my code. For example, > > > the Saucers game I did has a much faster way of handling morphs, down to > > > modified #addMorph: logic. This could be leveraged, if someone looked at > > > the code. But you cannot command interest. > > > > > > > Are you not interested becoming a core developer so you can contribute > > directly to trunk ? > > I would guess you are qualified, based on the stuff you have produced... > > > > Why not ? > > By which I mean: "yes, I'd be honored". Which is more proper I guess... > Hi Stef, It would be great to have you contributing to trunk. Can I suggest that you start by creating an account for yourself on source.squeak.org, and maybe commit a few of your fixes to the inbox? You have done some remarkable work with Squeak and muO, and it would be really nice to see you involved as a core developer also. Dave From javier_diaz_r at mac.com Sun Nov 29 23:28:23 2015 From: javier_diaz_r at mac.com (Javier Diaz-Reinoso) Date: Tue Dec 1 01:39:40 2015 Subject: [squeak-dev] Update Squeak on iOS In-Reply-To: <6B9404C7-3652-4235-AD85-49E42429087F@mac.com> References: <6B9404C7-3652-4235-AD85-49E42429087F@mac.com> Message-ID: I updated the zip file with a new version with this changes: - Fix the bug with dragging a morph and PasteUpMorph>>flashRects:color: - Extra bluetooth keyboard support, now Cmd, Shift-Cmd, Control, Arrows key work. - Activated the debugger with shake. https://copy.com/7T9DPaUxDjQSc2Kf -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20151129/cd5ceacf/attachment.htm