I'm new to self and trying to find my way around. I don't have access to a computer that runs Self at home though and am looking for a way to export self code (just the morph traits object would be fine for now) so i can look it over in text format at home.
I need a way to export all the slots of an object (hope that terminology is right) including methods to a text file, so i can read it later. Something similar to fileOut in Smalltalk.
Thanks for any tips, Jesse
if you execute
inspect: traits morph
you will get a reasonable print out in the terminal window where you started Self. Depending on the GUI you are using, the easiest solution is to copy the result and paste it into some text editor. 'inspect:' is implemented in defaultBehavior and uses 'inspectReflectee:', which unfortunately uses 'print' so it can't send the output to a file instead of the terminal. It would be easy to copy this method to change that, however.
But Self includes a sophisticated text export and import mechanism called "the transporter". Every object and every slot can be annotated as belonging to some "module" which is associated with a .self source file. This means that a single object can have its definition divided among several modules (files), each dealing with a different aspect of it. And a module can include the (partial) definition for many objects.
If you look at the result of the "inspect: traits morph" above or if you open up an outliner on traits morph (just type "traits morph" in any evaluator and press the "get it" button. Then press the small triangle in the result to open it up) you will see "9 modules".
The traits morph object itself is defined in module "morph", but its slots belong to the "activity", "editorMorph", "morph", "morphSaving", "outliner", "structuredEditing", "ui2Button", "ui2Menu" and "webBrowser" modules. All you have to do is execute expressions like
modules morph fileOut
and you will have a "morph.self" file (it will be in a ui2 subdirectory, and if you don't have that you might get an error). I find these files far less readable than what it generated by 'inspect:' since there is a lot of slot declaration overhead, but the method sources themselves are the same.
A more graphical way of doing this is to point to the background and choose "changed modules" from the middle button menu. A pink object should appear, but unless you have changed something it will be empty. You can use the middle button on it to choose "All Modules" which will give you an outliner view of all modules in the system. You can expand a few levels to get to morph (all2->allUI2) and just press the small "w" button beside it to write out the file.
Good luck, -- Jecel