Hi Chris,
I looked into the #mouseOverForKeyboardFocus matter. An eCompletion menu now gives back the focus to the editors morph when entered with the mouse. It only gets focus, when you click into the source code in the detail pane. Would you mind to try it out and give me feedback how it works?
You find the changed version here: http://www.squeaksource.com/eCompletion/ECompletion-bar.79.mcz
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