Keyboard Shortcuts in Pharo?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
26 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Re: Keyboard Shortcuts in Pharo?

Mariano Martinez Peck


On Sun, Dec 13, 2009 at 9:15 PM, Stéphane Ducasse <[hidden email]> wrote:
thanks for the pointer.
Note also that we should get the textEditor done in CUIS and integrated in squeak.

Stef

On Dec 13, 2009, at 6:35 PM, Benjamin Pollack wrote:

> On Fri, Dec 11, 2009 at 2:44 AM, Lukas Renggli <[hidden email]> wrote:
> Safara was an attempt to implement a replacement for the current text
> editor, where nothing was hardcoded but everything could be configured
> by the tool (highlighting, completing, shortcuts, ...). Unfortunately
> this project never made it into a useable state. Writing a text editor
> is difficult.
>
>
> I hadn't heard of Safara, but SVI (http://map.squeak.org/package/ab5ae6be-b705-40a2-8d63-a992442086ec) is (in my opinion) a very successful attempt at modernizing the editor.  It comes with vim- and Emacs-like keybindings, which include shortcuts for selecting and navigating through blocks, paren groups, messages and the like--exactly what we're talking about here.  It doesn't run on Pharo or trunk Squeak, but it worked just fine in heavy use for me on Squeak ~3.6 through 3.9.  I don't have the time to make it run on Pharo right now, but I doubt someone with sufficient motivation would have that much of a problem getting it running comfortably.  If I recall correctly, the main effort was going to be updating the OmniBrowser integration.
>
> --Benjamin
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: Keyboard Shortcuts in Pharo?

Sean P. DeNigris
Administrator
In reply to this post by Lukas Renggli
Lukas Renggli wrote
> SVI

It is a hack on top of the Pluggable Morphic editor, that is a hack on
top of the Morphic editor, that is a hack on top of the MVC editor,
that is a hack on top of the original Smalltalk-80 editor. No joke.
Hey, I'm doing research on custom key bindings in Pharo.  One of the key things (for me) is vim bindings.  What makes SVI a hack, and if I was going to start from scratch, what approach would you recommend?

Thanks.
Sean
Cheers,
Sean
Reply | Threaded
Open this post in threaded view
|

Re: Keyboard Shortcuts in Pharo?

Stéphane Ducasse

On May 14, 2010, at 6:12 AM, Sean P. DeNigris wrote:

>
>
> Lukas Renggli wrote:
>>
>>> SVI
>>
>> It is a hack on top of the Pluggable Morphic editor, that is a hack on
>> top of the Morphic editor, that is a hack on top of the MVC editor,
>> that is a hack on top of the original Smalltalk-80 editor. No joke.

I can imagine that easily.

>>
>
> Hey, I'm doing research on custom key bindings in Pharo.  One of the key
> things (for me) is vim bindings.  What makes SVI a hack, and if I was going
> to start from scratch, what approach would you recommend?


have a look at the way this is currently done in paragraph editor and do the inverse :)
Now the binding should just be a spec that bind a keystroke to an object receiving a message
so we should be able to reuse them.

Stef
_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: Keyboard Shortcuts in Pharo?

Sean P. DeNigris
Administrator
I've got all three running in Squeak 4.1 trunk.  Loading in Pharo will be more complicated due to missing dependencies - maybe not worth it.  It might be better to catalogue how they work and come up with something simple and flexible from scratch?

There is a solution brewing in my head that generalizes key bindings to a condition and action.  So, instead of being restricted to 'when shift and c are pressed' you could say 'when shift and c are pressed and a Workspace is the active morph'

The only thing that seems like it will be complicated is vi bindings (don't know enough to say about emacs).  For instance, I can't see how normal mode could be implemented without changing some existing classes (for example, the cursor must change).

Sean
Cheers,
Sean
Reply | Threaded
Open this post in threaded view
|

Re: Keyboard Shortcuts in Pharo?

Stéphane Ducasse


>
> I've got all three running in Squeak 4.1 trunk.  Loading in Pharo will be
> more complicated due to missing dependencies - maybe not worth it.  It might
> be better to catalogue how they work and come up with something simple and
> flexible from scratch?
>
> There is a solution brewing in my head that generalizes key bindings to a
> condition and action.  So, instead of being restricted to 'when shift and c
> are pressed' you could say 'when shift and c are pressed and a Workspace is
> the active morph'

If I remember (was 8 years ago) the mapping table is shared globally by all paragraphEditor
and what you want is that potentially each morph can have its own table.
So I would not attach context to a binding. But more the table been attached to a morph
would be active. But I do not have a definitive answer.

Now a trick used by the VW parser to have sharing and instance specific table is the following
The trick to get something cool is to have both a class var and an instance var that represent
a table: the method only access the table via inst var, at class initialize the classVar is initialized
then at instance creation the inst var points to the class var.

=> sharing of the class Var
but now on a specific instance you can copy the table and set up to a give object and
it will be used by the object. while others will share the global table.

Workspace class could simply have its own specific table for all instances
Roel Wuyts designed the magic shortcut in VW it worked quite well so I think that it would be worth to have a look
at them. They got integrated in the VW release.

Stef


>
> The only thing that seems like it will be complicated is vi bindings (don't
> know enough to say about emacs).  For instance, I can't see how normal mode
> could be implemented without changing some existing classes (for example,
> the cursor must change).
>
> Sean
> --
> View this message in context: http://forum.world.st/Keyboard-Shortcuts-in-Pharo-tp1298784p2217472.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: Keyboard Shortcuts in Pharo?

Guillermo Polito
Well, some days ago I downloaded the KeyBindings from monticello in a Pharo 1.1 dev image.  It downloaded well allowing the _ as assignment.  But it didn't work :/.  Maybe I just missed something.

Thinking about adding nice and configurable shortcuts to Morphic and after reading some mails in this thread, I had some thoughts (I'm just thinking aloud):

1) Maybe a class variable in Morph to share the global shortcuts and an instance class variable to have specific shortcuts could do it.

2) Buuut, maybe there is a shortcut that is shared in a context bigger than a morph and smaller than "all the morphs".  And maybe that context is the model of the morph.  In that case I think it would be right to delegate the resolution of the shortcut to the model.

3) I've never used emacs :).  Does it have "chords" of shortcuts?  I call a chord pressing ((ctrl+A) + (ctrl +e)) to make one and only one action.  This should make us mantain the state of the pressed keys...  I don´t think this will be a performance issue, but we must have it in mind.

4) How should compound Morphs resolve a shortcut?  Should the shortcut flow to the parent morph or not? If so, when should it stop flowing :D?  I'm thinking in the System Browser, when the focus is on a paragraph editor but you want to do something with the selected class. Mmm, this is related to 2) :).

5) We should have a well ordered plan to introduce this kind of change.  We have to analize and remove every replaceable #keyStroke:.  And there should be a simple way to deploy the shortcuts for non-core packages :)

What do you think?  What I am missing?

I want to introduce shortcuts at any cost, je (even if lose sleep hours :) ).

Cheers,
Guille

On Sat, May 15, 2010 at 4:50 AM, Stéphane Ducasse <[hidden email]> wrote:


>
> I've got all three running in Squeak 4.1 trunk.  Loading in Pharo will be
> more complicated due to missing dependencies - maybe not worth it.  It might
> be better to catalogue how they work and come up with something simple and
> flexible from scratch?
>
> There is a solution brewing in my head that generalizes key bindings to a
> condition and action.  So, instead of being restricted to 'when shift and c
> are pressed' you could say 'when shift and c are pressed and a Workspace is
> the active morph'

If I remember (was 8 years ago) the mapping table is shared globally by all paragraphEditor
and what you want is that potentially each morph can have its own table.
So I would not attach context to a binding. But more the table been attached to a morph
would be active. But I do not have a definitive answer.

Now a trick used by the VW parser to have sharing and instance specific table is the following
The trick to get something cool is to have both a class var and an instance var that represent
a table: the method only access the table via inst var, at class initialize the classVar is initialized
then at instance creation the inst var points to the class var.

=> sharing of the class Var
but now on a specific instance you can copy the table and set up to a give object and
it will be used by the object. while others will share the global table.

Workspace class could simply have its own specific table for all instances
Roel Wuyts designed the magic shortcut in VW it worked quite well so I think that it would be worth to have a look
at them. They got integrated in the VW release.

Stef


>
> The only thing that seems like it will be complicated is vi bindings (don't
> know enough to say about emacs).  For instance, I can't see how normal mode
> could be implemented without changing some existing classes (for example,
> the cursor must change).
>
> Sean
> --
> View this message in context: http://forum.world.st/Keyboard-Shortcuts-in-Pharo-tp1298784p2217472.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
12