Thank you all for the positive feedback!!!
@chris: I've fixed the bug. It would be great if you could test it. Just download the latest version from squeaksource and give it a try. Here is the link: http://www.squeaksource.com/eCompletion/ECompletion-bar.78.mcz. Concerning #mouseOverForKeyboardFocus - I'll look into it... and give you feedback.
Ruben
On 3/31/06, Chris Muller chris@funkyobjects.org wrote:
Stunning. Simply gorgeous.
It is high time Squeak got a such a nice and serious productivity update to its core dev tools. I knew someone would do it eventually. This level of auto-completion is finally on par with eclipse.
It looks like you've really given great consideration to the subtle usability. I *really* like the keyboard support; thank you for that. Good keyboard support really helps me go faster.
Even the web site is gorgeous, simple and.. heh, uncomplex! :)
I had tried the previous version of eCompletion a while ago (still have it installed) but eventually turned it off because it doesn't seem to work well with #mouseOverForKeyboardFocus enabled. I run with this on all the time just so I can easily close windows with command+w. I'm always opening a (hierarchy or tracing-messages) browser and then conveniently closing via keyboard. Ha! Ironically, I suppose this has been my "poor-mans" ecompletion, I'll probably switch to the real thing now (I will miss command+w)..
Thanks for the great contribution! Chris
PS - I hit a couple of notifications.. Here's one of them.
30 March 2006 9:52:44 pm
VM: Win32 - a SmalltalkImage Image: Squeak3.8 [latest update: #6665]
SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir C:\Development\Chris\Development\Squeak Trusted Dir C:\Development\Chris\Development\Squeak\Chris Untrusted Dir C:\My Squeak\Chris
UndefinedObject(Object)>>doesNotUnderstand: #model Receiver: nil Arguments and temporary variables: aMessage: model Receiver's instance variables: nil
TextMorph>>keyStroke: Receiver: a TextMorph(2873) Arguments and temporary variables: evt: [keystroke '<left>'] action: nil completionAllowed: nil stringHolder: nil Receiver's instance variables: bounds: 522@482 corner: 894@652 owner: an ECDetailMorph(1665) submorphs: #() fullBounds: 522@482 corner: 894@652 color: Color black extension: a MorphExtension (1702) [other: (autoFitContents -> false)] borderWidth: 0 borderColor: Color black textStyle: a TextStyle Verdana text: a Text for 'actionMap
^EventManager actionMapFor: self' wrapFlag: true paragraph: a MultiNewParagraph editor: nil container: nil predecessor: nil successor: nil backgroundColor: nil margins: nil
TextMorph>>handleKeystroke: Receiver: a TextMorph(2873) Arguments and temporary variables: anEvent: [keystroke '<left>'] pasteUp: nil Receiver's instance variables: bounds: 522@482 corner: 894@652 owner: an ECDetailMorph(1665) submorphs: #() fullBounds: 522@482 corner: 894@652 color: Color black extension: a MorphExtension (1702) [other: (autoFitContents -> false)] borderWidth: 0 borderColor: Color black textStyle: a TextStyle Verdana text: a Text for 'actionMap
^EventManager actionMapFor: self' wrapFlag: true paragraph: a MultiNewParagraph editor: nil container: nil predecessor: nil successor: nil backgroundColor: nil margins: nil
KeyboardEvent>>sentTo: Receiver: [keystroke '<left>'] Arguments and temporary variables: anObject: a TextMorph(2873) Receiver's instance variables: timeStamp: 35880924 source: a HandMorph(2006) type: #keystroke buttons: 0 position: 704@523 handler: nil wasHandled: true keyValue: 28
--- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #model TextMorph>>keyStroke: TextMorph>>handleKeystroke: KeyboardEvent>>sentTo:
TextMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: TextMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: ECDetailMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: ECMenuMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: PasteUpMorph(Morph)>>processEvent:using: PasteUpMorph>>processEvent:using: PasteUpMorph(Morph)>>processEvent: HandMorph>>sendEvent:focus:clear: HandMorph>>sendKeyboardEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h processEvents. capturingGesture := capturingGest...]} Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in Project class>>spawnNewProcess {[[World doOneCycle. Processor yield. false] whileFalse. nil]} [] in BlockContext>>newProcess {[self value. Processor terminateActive]}
--- Ruben Bakker ruben.bakker1@gmail.com wrote:
On SqueakMap you'll find a new release of eCompletion. There are a bunch of new features to be tried and tested:
- Integration with RoelTyper (created by Roel Wuyts) for better
instance variable type determination.
- New detail pane for current menu entry
- Open a (class, implementers) browser on a menu entry
- menu paging (PageUp, PageDown, Home, End)
- Character completion for quotes, brackets etc.
- Uses same colors as Shout
- Help
3.0b1 is beta, so I didn't publish it. In "Squeakmap Package Loader" you need to open the eCompletion entry and install the version 3.0b1 by right clicking and choosing "install" on it.
eCompletion got a new home: http://uncomplex.net/ecompletion. You'll find more documentation there.
Please don't hesitate to send me bug reports, suggestions and feedback!
Ruben