Symbolics Genera programming environment for Squeak?
Brian Rice
water at tscnet.com
Mon Jan 15 20:32:15 UTC 2001
>It would be great if you could enumerate the features that you do
>like without being required to compare to Squeak.
>
>Cheers,
>
>Alan
>
>------
>
>At 9:55 AM -0800 1/15/01, Brian Rice wrote:
>>Hi Squeakers,
>>Is there an interest in this? I have recently acquired a MacIvory
>>machine running Symbolics Lisp. It has a fantastic interactive
>>listener, which is a lot more palpably usable than Squeak's
>>Workspaces.
>>
>>However, although I've been using Squeak for a while, the panoply
>>of useful key-bindings has eluded me, so I'm not sure I can
>>enumerate what features in Squeak do and do not compare to the
>>Genera environment (which is, to my knowledge, the absolute best
>>command-line environment I have seen, bar none).
>>
>>What do you think? This could be an interesting way to expand
>>Squeak as a development environment and as a hosted OS.
>>
>>Thanks in advance,
>>~
Fair enough, but be warned this will likely take a while to communicate. :)
For starters, I will enumerate the hardware which plays a factor,
although I have ideas on why the hardware is not necessary for Squeak.
NOTE: I am a novice user at this, so I am not aware of all the
capabilities or limitations of what I describe. Also keep in mind
that I don't yet have the machine at my disposal. It is sitting at a
friend's house some miles away, where I visit to use it. (I am
setting up remote X sessions to compensate for this.)
List:
Mouse: 3-buttons
the mouse in Genera is used in almost exactly the same way as
it is in MVC Squeak, however there are differences in the menu
systems, which I will discuss later.
Keyboard:
This requires a picture which is available here:
http://kogs-www.informatik.uni-hamburg.de/~moeller/symbolics-info/symbolics-images/keyboard.JPG
Now, the keys and how they are used:
<Shift>
<Caps Lock>
Down the left side:
<Function>
This is used for Zwei, Symbolics' text environment, basis for
Zmacs and Zmail.
<Network>
Unknown.
<Select>
This access the top-level process menu, which is persistent,
so that selecting a process type places you in the
most-recently-started process of that kind.
<Rubout>
Similar to backspace, yet not. Subject to modifiers.
<Symbol>
(used like <option> on the Macintosh to get at special
typographical symbols... it's not strictly necessary to get work
done, though)
<Local>
Uknown. Presumably corresponding to <Network>.
<Super>
<Hyper>
<Meta>
Modifies everything, including the other modifiers. Familiar
to most Emacs users.
<Control>
Mostly the Emacs bindings, although reduced to Zwei for most
contexts. Notably, the keyboard has no arrow keys, subsumed by Zwei.
<Mode Lock>
Caps Lock for all the above modifier keys, but only those
that are held down while activating the mode lock. De-activating the
lock de-activates all modes except ones being currently held.
Across the top:
<Escape>
Literally-dedicated for escape sequences.
<Refresh>
Screen refresh, although only at the frame-buffer level, apparently.
<[]> aka <Square> User-assignable
<()> aka <Circle> User-assignable
</\> aka <Triangle> User-assignable
<Clear Input>
Almost obsoleted by <Meta>-<Rubout>, this clears the command
line entry in its entirety.
<Suspend>
Debugger hook.
<Resume>
Corresponds to <Suspend>.
<Abort>
Another debugger hook.
Down the right side:
<Help>
This command-line documentation hook works on EVERYTHING. If
you hold down any key combination or partial combination, hitting
<Help> calls up docs. The same works if you type in only partial
keywords (argument selectors) for commands. This is incredibly
universal.
<Complete>
Auto-completion par excellance. <Meta>-<Complete> yields a
form to fill out, usable with a mouse. Even with forms, everything in
the listener history is saved as listener commands only.
<End>
Basically, it's "Enter" to complement the <Return>. I'm sure
there's more.
<Page>
<Line>
Accomplishes a line-feed without a <Return>. It also auto-indents.
<BackSpace>
Oddly enough, I've not looked at how to use this yet, or needed it.
<Return>
The usual... evaluation.
<Scroll>
<Scroll> subsumes PgDn. <Meta>-<Scroll> subsumes PgUp. There
is more, I'm sure.
You'll note in the picture that certain keys are labelled in red...
these keys modify other keys and must be held down by default to have
an effect.
One thing to note is that the keyboard supports "infinite rollover"
which according to the documentation allows the software to register
all key-ups and key-downs and presses while any number of keys are
already held.
Now to the significance of all of this:
Zwei, the text-editing core of Emacs, is the equivalent (in its place
in the overall architecture) of the engine behind Squeak's workspaces.
The command-line environment (the Listener) reads Lisp forms as a
command involving meta-commands '(' and ')'. Most Lisp environments
have listeners, but not on-line help in the way that Symbolics'
Listener provides.
Now, the Lisp Listener is different in flavor from Smalltalk
environments in the usual commercial implementations, but in Genera,
it lends itself to the MVC way of user-interaction:
http://kogs-www.informatik.uni-hamburg.de/~moeller/symbolics-info/source-oriented-debugging.html
What's not obvious in a screen shot is how mousing over many parts of
what appears to be a simple text display screen highlights parts of
the text that act either as symbolic references (this seamlessly
extends to hypertext it seems) or expressions/sub-expressions in
code. Genera does everything in monochrome for programmers'
efficiency over prettiness. So highlighting is a black box outline
around text.
This is incredibly powerful, as it is highly context-sensitive. I
imagine that modifier keys could actually access different contexts
dynamically.
I'm not suggesting that this is useful directly, but there are
certain aspects which are nice. For one, the presence of a listener
is nice enough. If one were to do something similar in Squeak, it
would likely involve the graphical production of Inspectors for the
results and command forms. One aspect of the listener which Squeak
could keep is the notion that a Listener session is a thread of
activity, that it can spawn other threads, and keep the relationships
explicit.
I have many ideas related to this, and I would suggest at least
looking into how key bindings work in Squeak, and perhaps creating a
suitable architecture for them before too many people rely on a
system which is not modular enough.
What are your thoughts on this?
Thanks,
~
More information about the Squeak-dev
mailing list
|