I've been playing around in squeak for a few months now and one thing that I find really frustrating is that it appears difficult to figure out what all keyboard shortcuts are, what support there is from the keyboard for editing text, and how to customize it. I have read a number of tutorials but I am still confused.
Is there an exhaustive list of keyboard shortcuts? If not, how does one find out what keyboard shortcuts are defined in an image?
Are there any packages or support for moving around text with the same speed and ease as vi or emacs? Is there a vi or emacs keys package for squeak? I would love to learn "squeak keys" but from all the documentation I have read, it seems very notepad-ish. Have I completely missed the boat?
I use vi and emacs extensively and I love the fact I can customize the way the keys work. How can I do this in squeak?
I love the whole browser idea, I just hope I don't have to keep touching my mouse so much when navigating the browser and that when I edit a method, I am able to move quickly around the text without touching the mouse.
Thank you and I really appreciate your help, Shawn
-- Shawn MacIntyre Edmonton, Alberta, Canada
Hi Shawn,
Welcome to the beginners list. Have I got good news for you!
The shortcuts are defined in ParagraphEditor and there is a very nice FAQ about this subject at: http://minnow.cc.gatech.edu/squeak/1844 .
The good news is that the FAQ above includes a reference to Emacs key bindings. So you should be able to get what you are looking for. I remember vi. Be careful what you ask for!
Happy Coding!!
Ron Teitelbaum President / Principal Software Engineer US Medical Record Specialists Ron@USMedRec.com
-----Original Message----- From: Shawn MacIntyre Sent: Thursday, May 04, 2006 8:22 AM
[SNIP] Is there an exhaustive list of keyboard shortcuts? If not, how does one find out what keyboard shortcuts are defined in an image?
Are there any packages or support for moving around text with the same speed and ease as vi or emacs? Is there a vi or emacs keys package for squeak? [SNIP] Thank you and I really appreciate your help, Shawn
-- Shawn MacIntyre Edmonton, Alberta, Canada
Hello Shawn,
welcome here.
SM> Is there an exhaustive list of keyboard shortcuts? SM> If not, how does one find out what keyboard shortcuts are defined in SM> an image?
In the World Menu, Help, "command key help" will open a workspace which contains a big list of command keys.
SM> Is there a vi or emacs keys package for squeak?
SqueakMap has Emacs key bindings. Never used it. Sorry to say SM is in a state of transition right now, so maybe this helps: Download: ftp://st.cs.uiuc.edu/Smalltalk/Squeak/goodies/EmacsKeys.cs
Try it in a new image, as it's for Version 3.4!
http://minnow.cc.gatech.edu/squeak/2909 might be a starting point.
SM> I would love to learn "squeak keys" but from all the documentation I SM> have read, it seems very notepad-ish. Have I completely missed the boat?
I (never having used vi or emacs) feel that squeak has more than sufficient command keys, you can judge for yourself after trying the above tip.
SM> I use vi and emacs extensively and I love the fact I can customize SM> the way the keys work. How can I do this in squeak?
That should be easy, as everything can be customized in squeak. Sorry I don't know much about this. If nobody else replies, please come back with a separate mail, which has a more specific topic.
http://minnow.cc.gatech.edu/squeak/1844 might be of more help.
SM> I love the whole browser idea, I just hope I don't have to keep SM> touching my mouse so much when navigating the browser and that when I SM> edit a method, I am able to move quickly around the text without SM> touching the mouse.
BTW, if you haven't yet met the tracing messages browser, I think it's a great help here. The trick is that a senders or implementors in the bottom list will add the method indented to the top list.
Great tool if you work on an algorithm which is distributed over several methods of several classes.
Cheers,
Herbert mailto:herbertkoenig@gmx.net
Herbert and Ron,
Thank you for your quick replies. I will try these out!
Another question(s): I have been trying to learn Monticello... Is there a good tutorial for it? How does it compare to CVS or darcs? When you open a repository, what is the difference between "Load", "Merge", and "Adopt"? What are the best practices for it? If I add a method to a base class, how do add it to my project's Monitcello repository?
Thank you once again! Shawn
On May 4, 2006, at 6:58, Herbert König wrote:
Hello Shawn,
welcome here.
SM> Is there an exhaustive list of keyboard shortcuts? SM> If not, how does one find out what keyboard shortcuts are defined in SM> an image?
In the World Menu, Help, "command key help" will open a workspace which contains a big list of command keys.
SM> Is there a vi or emacs keys package for squeak?
SqueakMap has Emacs key bindings. Never used it. Sorry to say SM is in a state of transition right now, so maybe this helps: Download: ftp://st.cs.uiuc.edu/Smalltalk/Squeak/goodies/EmacsKeys.cs
Try it in a new image, as it's for Version 3.4!
http://minnow.cc.gatech.edu/squeak/2909 might be a starting point.
SM> I would love to learn "squeak keys" but from all the documentation I SM> have read, it seems very notepad-ish. Have I completely missed the boat?
I (never having used vi or emacs) feel that squeak has more than sufficient command keys, you can judge for yourself after trying the above tip.
SM> I use vi and emacs extensively and I love the fact I can customize SM> the way the keys work. How can I do this in squeak?
That should be easy, as everything can be customized in squeak. Sorry I don't know much about this. If nobody else replies, please come back with a separate mail, which has a more specific topic.
http://minnow.cc.gatech.edu/squeak/1844 might be of more help.
SM> I love the whole browser idea, I just hope I don't have to keep SM> touching my mouse so much when navigating the browser and that when I SM> edit a method, I am able to move quickly around the text without SM> touching the mouse.
BTW, if you haven't yet met the tracing messages browser, I think it's a great help here. The trick is that a senders or implementors in the bottom list will add the method indented to the top list.
Great tool if you work on an algorithm which is distributed over several methods of several classes.
Cheers,
Herbert mailto:herbertkoenig@gmx.net <tracingMess.gif> _______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners
-- Shawn MacIntyre Edmonton, Alberta, Canada
Hello again Shawn,
From: Shawn MacIntyre Sent: Thursday, May 04, 2006 9:45 AM
Another question(s): I have been trying to learn Monticello... Is there a good tutorial for it?
I would think a good place to start is http://minnow.cc.gatech.edu/squeak/monticello%20basics
How does it compare to CVS or darcs?
Here's an interesting discussion: http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-January/100192.h tml
When you open a repository, what is the difference between "Load", "Merge", and "Adopt"?
Load does what it says, but I haven't used the Merge and Adopt features, maybe someone else can help here.
What are the best practices for it?
I put all my changes into a repository, organize packages well, version often, and put good notes on your versions. In my experience it is always best to be able to start from a clean image, so if you must save an image open a clean one, load your changes from Monticello and save, don't do anything else. This makes upgrading much easier.
If I add a method to a base class, how do add it to my project's Monitcello repository?
If you use * in front of your category name it will place that method in the package that comes after the *. So to have a method placed in the Foo package make the category *Foo. For more info see: http://minnow.cc.gatech.edu/squeak/5712
Thank you once again!
You are welcome! I hope that helps. It's always good to get the programming flow and organization worked out before pushing ahead. A little work to get it right up front will pay off tremendously down the line.
Ron Teitelbaum President / Principal Software Engineer US Medical Record Specialists Ron@USMedRec.com
When you open a repository, what is the difference between "Load", "Merge", and "Adopt"?
I think load loads in the new code - when there are conflicts - loading (new) version wins.
Merge does something similar - but provides a merge tool for letting the user resolve the conflicts first.
Adopt (I think) makes that version the base version for changes going forwards. Kind of like branching off in a new direction. I think its good for recovering from coding down a blind alley and deciding to back up and start over from some point.
Mostly I use save, load and merge.
On May 4, 2006, at 9:03, Ron Teitelbaum wrote:
[snip]
Thank you once again!
You are welcome! I hope that helps. It's always good to get the programming flow and organization worked out before pushing ahead. A little work to get it right up front will pay off tremendously down the line.
Hi Ron and all,
That is exactly my sentiment. :) I have another questions to ask related to programming workflow in Squeak:
I am a little uncertain about the best practices when dealing with a system that lives in an image. I have been experimenting with packages on squeakmap and exploring the base 3.8 image I downloaded. I seem to manage to break it beyond my ability repair it with some ease ;-) I now have about 20 somewhat functioning images. :)
My next step was augmenting the base 3.8 with packages that I have found that work together and that I like: such as Seaside and the shout workspace. I am now using this a my base for my experimentation. Is this the normal process?
Basically, I have lived all my life with files, how should I understand the workflow with images? Could you describe your standard workflow while developing under squeak?
How can I rollback package adds from Squeakmap or loading new versions with Monticello? Or is this always a risk process since anything in the system can be modified a package or a change set? That would be fine if it was the case; I would just have to modify my practices then.
What about versions of the image. From lurking around I see some people using 3.7 and some using 3.8. Now with the beta of 3.9 (which looks very pretty) out ... is there any recommend image version to use? I have been using 3.8 because it seems to be the "official" version. What do most squeak developers do in this situation? Is it okay to run a different version of the VM from the image? It seems to work for me.
One last key binding question: Is there anything like Alt-Tab to rotate windows? Or close/minimize/maximize windows? Or minimize all windows? I do most of my experiment on my 12" powerbook and I quickly find that I fill the screen with windows. What is the most manageable way to deal with this?
Finally, let talk browsers. I have been using the standard browser but I have seen the Star browser and heard of the re-factoring browser. For a new user working on building an app with Seaside, is there a recommended browser?
phew .... thank you again! I think I have made more progress today then in the past three months! The pieces fit together a bit better. Shawn
-- Shawn MacIntyre Edmonton, Alberta, Canada
On May 4, 2006, at 5:49 PM, Shawn MacIntyre wrote:
I am a little uncertain about the best practices when dealing with a system that lives in an image. I have been experimenting with packages on squeakmap and exploring the base 3.8 image I downloaded. I seem to manage to break it beyond my ability repair it with some ease ;-) I now have about 20 somewhat functioning images. :)
The usual way I break one is by loading in a library from squeakmap that runs into a problem. Saving your image is a checkpoint, remember to save after every major modification. I also export my current project in Monticello regularly so I can load it into a new image if necessary.
My next step was augmenting the base 3.8 with packages that I have found that work together and that I like: such as Seaside and the shout workspace. I am now using this a my base for my experimentation. Is this the normal process?
Yes, most people will build a seed image to use as the base for most projects. I personally immediately get rid of all the windows, the flaps, and the mouse, load up shout, and squeakmap, and then save that.
Basically, I have lived all my life with files, how should I understand the workflow with images? Could you describe your standard workflow while developing under squeak?
I get an image - pull in all the libraries I need. Save it. Start developing. As soon as I have a few classes in a package, create a monticello project and start saving versions. When I hit a good checkpoint I export a new Monticello version and often do a "save as new version" of my image.
How can I rollback package adds from Squeakmap or loading new versions with Monticello? Or is this always a risk process since anything in the system can be modified a package or a change set? That would be fine if it was the case; I would just have to modify my practices then.
I generally save just before trying to load something. If the load fails, I just quit and relaunch.
What about versions of the image. From lurking around I see some people using 3.7 and some using 3.8. Now with the beta of 3.9 (which looks very pretty) out ... is there any recommend image version to use? I have been using 3.8 because it seems to be the "official" version. What do most squeak developers do in this situation? Is it okay to run a different version of the VM from the image? It seems to work for me.
Generally VMs track image versions - but not that closely. Seaside people are using base images based on 3.7 mostly. They work fine with the 3.8 and 3.9 VMs. Image format changes become incompatible when major versions flip. I would not expect a 4.0 VM to run a 3.x image.
Finally, let talk browsers. I have been using the standard browser but I have seen the Star browser and heard of the re-factoring browser. For a new user working on building an app with Seaside, is there a recommended browser?
I usually use the vanilla browser but you should play around and see which one you like. I really liked the whisker browser for awhile but its not included by default and I got tired of loading it all the time.
-Todd Blanchard
Images are wonderful, but they are not perfect. In particular, images are not good for long-term archiving. I do not allow myself to store code long term in an image. In other words, if I am working on a project then I will periodically (once a day or so) make sure that I can build a new image with all my source code.
-Ralph Johnson
...and the absolute newbies here say "How do you do THAT, Mister Johnson?" ;)
-Kyle H
On 5/5/06, Ralph Johnson johnson@cs.uiuc.edu wrote:
Images are wonderful, but they are not perfect. In particular, images are not good for long-term archiving. I do not allow myself to store code long term in an image. In other words, if I am working on a project then I will periodically (once a day or so) make sure that I can build a new image with all my source code.
-Ralph Johnson _______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners
If you want to save code on the disk, it is useful to learn about changesets. See http://minnow.cc.gatech.edu/squeak/uploads/changesets.pdf
Changesets are pretty easy to use once you get used to them, but they are easy to misuse when you haven't used them much. So, practice! Play around with them until you are comfortable with them.
You can use changesets to manage code in a multiperson project, but if you are on a real multiperson project then you should use Monticello, instead. In fact, you might want to use Monticello even for a single person project, but if you are getting started with Squeak it is probably easier to learn about changesets..
-Ralph Johnson
Kyle Hamilton a écrit :
...and the absolute newbies here say "How do you do THAT, Mister Johnson?" ;)
My reason is that I had a lot of problems with images. They often crashed (I was playing with dynamic variables). So, I always store my projects using monticello (on squeaksource or directly on my hard disk).
-----Original Message----- From: Shawn MacIntyre Sent: Thursday, May 04, 2006 8:50 PM On May 4, 2006, at 9:03, Ron Teitelbaum wrote:
[snip]
I now have about 20 somewhat functioning images. :)
Having a number of images par for the course. In my opinion, the issue is can you save your changes, do you know how to retrieve your changes, and do you know how to rescue your changes from a change set. Having a base image is a good way to go and being able to start over and bring your code into a new base image is very important. Saved images should be only check points to base images and not development images. In other words develop all you want but when you are done make a new version in the repository, then if loading that version becomes too time consuming in the future, start a base image, load the changes to bring you up to some checkpoint level, save that image and use it as a new base. This will just save you time getting started. As you have already determined, you will need different bases for different activities esp. when components don't play well together. But that's the fun of programming in Squeak! Hopefully some day the entire world will find balance, and all of squeak will follow the path and a beautiful rainbow, and make their way to one version! Personally I would love to see wxSqueak incorporated as soon as possible.
My next step was augmenting the base 3.8 with packages that I have found that work together and that I like: such as Seaside and the shout workspace. I am now using this a my base for my experimentation. Is this the normal process?
Yes. I understand that 3.7 is popular for Seaside, but I don't know what the issues are.
Basically, I have lived all my life with files, how should I understand the workflow with images? Could you describe your standard workflow while developing under squeak?
For me the image is not just development but a deployment vehicle. Think of the image as your compiled code base, there are some tools for changing the development image into a deployable image. If you consider the image as your run time, and your versions in the repository as your code, files, source or what ever you want to call them, it makes more sense. You just do not have to go through that compile phase to create an image.
How can I rollback package adds from Squeakmap or loading new versions with Monticello? Or is this always a risk process since anything in the system can be modified a package or a change set? That would be fine if it was the case; I would just have to modify my practices then.
I'm not sure I know the answer here but it's never been an issue for me. I always start with a base image and add from squeak map, or Monticello. If I want to roll something back I don't load it in the future and I only include things I know I want to keep in my check point images.
What about versions of the image. From lurking around I see some people using 3.7 and some using 3.8. Now with the beta of 3.9 (which looks very pretty) out ... is there any recommend image version to use? I have been using 3.8 because it seems to be the "official" version. What do most squeak developers do in this situation? Is it okay to run a different version of the VM from the image? It seems to work for me.
I'm working with 3.8 now, but only because I'm looking for stability. I want to make sure, as much as possible, that the things that I'm having problems with are my fault and not because of something that was recently introduced. I plan to move my code to 3.9 as soon as it's blessed by the community. Although I may be stuck with the wxSqueak version for the UI. For loading packages I've been pretty comfortable trying them out even if there is no version for the image I'm on. There is no guarantee but I find it's helpful and educational to find out why something breaks, it may highlight a new feature in the latest image that you wouldn't have found otherwise.
One last key binding question: Is there anything like Alt-Tab to rotate windows? Or close/minimize/maximize windows? Or minimize all windows? I do most of my experiment on my 12" powerbook and I quickly find that I fill the screen with windows. What is the most manageable way to deal with this?
There is a window menu that is pretty helpful. Open the world menu and click on windows. There is no key that I'm aware of for switching windows, but the window menu is useful for that. wxSqueak breaks out of the single window paradigm and allows for OS level window switching.
Finally, let talk browsers. I have been using the standard browser but I have seen the Star browser and heard of the re-factoring browser. For a new user working on building an app with Seaside, is there a recommended browser?
I'm not sure maybe some of the Seaside folks can answer this question.
phew .... thank you again! I think I have made more progress today then in the past three months! The pieces fit together a bit better. Shawn
I'm glad to help! Keep Squeaking!! I wasn't sure how much traffic we would have on the beginners list so it's nice to see that someone is benefiting from it!
Ron Teitelbaum President / Principal Software Engineer US Medical Record Specialists Ron@USMedRec.com
Finally, let talk browsers. I have been using the standard browser but I have seen the Star browser and heard of the re-factoring browser. For a new user working on building an app with Seaside, is there a recommended browser?
I always work with the refactoring browser because it allows... refactorings. You can then rename methods and variables, extract code to methods... It's very cool when you pay attention to object oriented design.
Shawn MacIntyre wrote:
I've been playing around in squeak for a few months now and one thing that I find really frustrating is that it appears difficult to figure out what all keyboard shortcuts are, what support there is from the keyboard for editing text, and how to customize it. I have read a number of tutorials but I am still confused.
Is there an exhaustive list of keyboard shortcuts? If not, how does one find out what keyboard shortcuts are defined in an image?
Are there any packages or support for moving around text with the same speed and ease as vi or emacs? Is there a vi or emacs keys package for squeak? I would love to learn "squeak keys" but from all the documentation I have read, it seems very notepad-ish. Have I completely missed the boat?
I use vi and emacs extensively and I love the fact I can customize the way the keys work. How can I do this in squeak?
I use emacs and vi quite a bit as well. They are part of my day to day life. One of my first projects in Squeak was Keymapping (http://map1.squeakfoundation.org/account/package/51055995-d976-42da-ae18-7f3...) which gives you a simple UI for editing key bindings.
I took is a bit further and modified all of the tools in Squeak 3.7 to have customizable keymaps. By the time I was done with it I was accustomed to the Squeak keybindings for most things :-( Still I used it every day in my development image. I have shortcuts for raising tools (process browser and moticello browser are the most common) and for extending the text editor. Keymapping works in Squeak 3.8 (and _probably_ in 3.9) but I have never updated the extensions to the tools so you don't get them by default. So, under Squeak 3.8 and higher Keymapping is good for:
1) adding keyboard shortcuts to your "world" to raise tools, switch projects etc 2) adding/changing keyboard shortcuts in the ParagraphEditor (text editor used by workspaces, class browsers etc)
but although they works in 3.7 the following things can't be done in 3.8 and higher
3) customize keybindings in existing tools such as the class browser 4) modify the "world" keybindings (you can add, just not modify the hard-coded ones)
Keymapping is moderately easy to use once you look at examples. The UI can be opened at any time by pressing C-k. It does modify several Squeak internals so if you decide to use it I recommend that you load it into a "play" image which has the same version as your work image...use it a while to make sure it is stable. Especially if you're using Squeak 3.9.
Hope that helps and welcome to Squeak!
David
I use vi and emacs extensively and I love the fact I can customize the way the keys work.
I love emacs too and I was lost when I started Squeak. I tried emacs-bindings in squeak without success. Now, I've noticed that I do not need the emacs shortcut anymore: it's because of Smalltalk. In Smalltalk, you write very few lines of code to express something. Well written methods have an average of 7 lines of code (IIRC).
beginners@lists.squeakfoundation.org