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