Show ug.wml syntax highlighted
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!--
NOTE! This file uses WML 2.0.1
PLEASE PLEASE PLEASE don't edit .HTML. Edit .WML!!!! Actually,
it's more important for you since your changes will be LOST FOREVER
if you edit the .HTML files.
-->
<html>
<head>
<title>GZigZag User's Guide</title>
#include '../wmlinc/article.wml'
</head>
<body>
{: [[s/(?<!>)\b(d\.+\w+)/<code>\1<\/code>/g]]
<H1>GZigZag User's Guide</H1>
<pre>$Id: ug.wml,v 1.6 2000/09/12 17:12:13 tjl Exp $</pre>
<grid layout=3x3 spacing=20>
<cell> <b>Tuomas Lukka</b> <br>
<code>lukka@iki.fi</code><br>
Dept. of Mathematical Information Technology <br>
University of Jyväskylä
</cell>
</grid>
<toc>
<p>
This is the first attempt at an user's guide for GZigZag. It is not yet
complete and not a good tutorial but we will try to work on it. Patches
are gladly accepted!
This is work-in-progress: if there are any unclear parts, feel
free to ask me to clarify things.
<warn>
<h2>Introduction</h2>
<p>
GZigZag is a free implementation of Ted Nelson's ZigZag structure.
The ZigZag structure is a revolutionary new way of storing information
in a computer, in that it provides a clear, extensible structure
that can be orthogonally laid over existing information.
<p>
This document attempts to help users to get started with GZigZag.
We start at the point where the user has gotten the program to start;
to get to that point, read the other documentation, including
the <code>README</code> files.
Note that this document does not attempt to cover designing sensible
structures: the "Gentle Introduction" document is for that purpose.
Here we only explain how to use the GZigZag implementation of the structure.
<p>
GZigZag is a moving target: we will try our best to keep this document
up to date but sometimes it will simply be forgotten and be out
of date. Please notify
us if this happens.
<h2>The save model</h2>
<p>
GZigZag currently stores data in directories, in which there is
one file per dimension and one or two extra files for the contents of the
cells.
<p>
In the new, cached and explicit model, the data is loaded at startup
and stored in memory until it is explicitly saved.
Pressing <b>ctrl-S</b> saves the changes.
And indeed, in GZigZag, it is only the changes that are saved:
like CVS, GZigZag stores all the previous saved versions implicitly
as well (XXX Because of timestamp problems, not usable yet).
<h2>Viewing and moving around</h2>
<figure img="bothwins.png" width="600px">
The initial display of two windows next to each other. To fit them
in this document, they have been horizontally resized but otherwise
the view is exactly what you should get when starting GZigZag.
</figure>
<p>
The first figure shows the two windows next to each other that show
up when starting GZigZag on an empty space.
There are two cursors, the green and the blue cursor, which are
seen on the same cell, the home cell. From the home cell downwards
(poswards on d.2) is the <dfn>system list</dfn>, which contains
metainformation about the structure as well as keybindings, which
we shall return to later.
<p>
Let's move the blue cursor that defines the center of the
right-hand window down three steps. There are three different
ways to achieve this: either clicking on the "AllFlobViews" cell in the
right-hand window or by pressing the arrow down key thrice,
or (probably the most counterintuitive at first), pressing the
comma (,) key thrice.
This moves the view to the one shown in the next figure.
If your machine is fast enough, it should animate between each step
in order to better show how the cells move around.
<figure img="rightmoved.png" width="600px">
The right-hand window, after moving the cursor down three step.
Both cursors are shown in both views, but
moving the blue cursor has moved the center of the right-side view
with it.
</figure>
<p>
The last way is actually the recommended way since it allows you to
keep your hands on the main area of the keyboard at all times: mouse input
is not needed in GZigZag.
The direction keys for the X and Y directions are i, j, l and ','
for the right-hand view and
e, s, f and c for the left-hand view. If you look at the keyboard, you'll
see that they are arranged in two diamond patterns on the keyboard, one
for the left and one for the right hand to use.
<p>
If you look at the upper left-hand corner of the windows, you'll see
that X and Y are not the only dimensions here: there is also a third
dimension, Z, on which d.3 is shown by default.
A place in the default structure where d.3 is used can be found
by moving two steps right and one down from "AllFlobViews".
The depth cell is connected to other cells poswards on d.3.
The keys to move the right-hand view along the Z axis are k for poswards
and K (shift-k) for negwards.
<figure img="showingz.png" width="500px">
A place where the third dimension shown is used, as discussed in
the text.
</figure>
<p>
There are various different views to the structure, press 'v' or
shift-V to cycle through them in either window.
<p>
Before going on, you should train yourself to use these keys to move around
in the structure. The direction keys will be used in many places later
on in this guide, since they also form a vital part of the commands.
<h2>Editing the structure</h2>
This section does not give all the possible operations but
tries to give a subset that will be sufficient. Marking is not discussed.
<h3>Creating new cells</h3>
<p>
We shall start from the home cell.
<infigure img="edit1.png">
Press 'n' (for "New cell") and 'l' (the direction key
discussed above) and a new cell is created left of the
blue cursor:
<infigure img="edit2.png">
The same would work for the other view, you just need to
use the direction keys for the green cursor after the "n"
command.
For practice, move to the new cell (press 'l') and
press 'n' 'l', 'n' 'j', 'n' 'i' and 'n' ',' to create new cells on all
sides of the new cells. Note that when creating the new cell
leftwards, it is inserted between the first new cell and the
home cell:
<infigure img="edit3.png">
<h3>Entering text</h3>
<p>
Now, press Tab and type in some text:
<infigure img="edit4.png">
Tab moved you to the text editing mode which is pretty
much like familiar text entry mode in other systems:
the arrow keys move the insertion cursor and typing a character
inserts it.
Press Tab again to move out of text edit mode, and
the insertion cursor vanishes.
(NOTE: one planned feature is to have the background
change when in the edit mode - these pictures were taken
when this did not yet happen).
<p>
Try putting more text into the other cells.
<h3>Connecting and disconnecting cells</h3>
<p>
Now we get to the most important part of ZigZag: making
actual structures.
There are actually several different ways of connecting
cells but we shall only cover one because there's no
time to write this user's guide completely yet.
<p>
The way to connect two cells is to move the cursor of the
left-hand view (green) and the right-hand view (blue)
on the two cells, press '/' (slash) and a direction
to connect the two cells in.
Connect will fail if either of the two cells is connected
in that direction already, except if one of them is alone
in that dimension, in which case it is inserted next to
the other one.
<infigure img="connect1.png">
<p>
In this situation, pressing '/' ',' or, equivalently,
'/' 'e' results in
<infigure img="connect2.png">
<h3>Hopping</h3>
<p>
Hopping is a structural operation where cells are reorganized
along a rank.
It's easiest to figure out if you try it: press 'h' and a
direction key.
<h3>Alpha-shear</h3>
<p>
Another structural operation that can be very useful is
the alpha-shear, which changes a connection from the current cell
to another one in the same rank.
<p>
It is used by typing 'a' and two directions: first the connection
and then the direction into which the connection is to be moved.
<h3>Cell exchange</h3>
<p>
One more editing operation which helps a lot in making the structure
work the way you want it to. Press '%' (percent) to exchange
the connections of the two accursed cells in the visible X and Y
dimensions.
No other connections (Z or invisible) are touched.
<h3>Cloning</h3>
<p>
Cloning is an important structural operation in GZigZag,
as explained in the Gentle Introduction.
Basically, a clone of a cell is a cell poswards from that
cell on d.clone, but with the special property that their
contents are implied to be the same. Cloning is visually
shown by GZigZag by coloring the clones yellow and the original
light yellow.
A clone of a cell is made by placing the right or left cursor
on the cell and pressing 't' or shift-'t', respectively, and
a direction in which to place the clone.
<infigure img="clone1.png">
Pressing shift-T 'l' creates a clone of the left (green) cursor
and places it right of the right-side (blue) cursor:
<infigure img="clone2.png">
<h2>The system list</h2>
<p>
In this section, we explain briefly what the system list is, and
what you can do with it.
<p>
Basically, the system list contains information for the user interface
of GZigZag, i.e. the types of views, keybindings etc. It is possible to
configure GZigZag to look like something completely different
but you must act carefully: it's fairly easy to accomplish something like
the following:
<blockquote>
Hmm, I want to rebind the keys completely. So let's delete the
previous binding list (click) and then I'll start making the
new bindings list (click.. click.... click....) oops, it's not
responding! Right, I just deleted the keybindings list so of
course it will not do anything when I press a key. Duh!
</blockquote>
<p>
So remember that any changes to the system list are <strong>immediately</strong>
reflected in the behaviour of the user interface. At some point
we will probably create a mechanism for making delayed changes that you
can commit all at once but this is not yet in place.
<p>
The system list starts at the home cell of the space and continues on
d.system, but for your convenience those cells you will most likely want to
use are cloned to a d.2 rank starting from the home cell. The d.2 rank
is freely modifiable but changing the text in any of the system list cells,
or breaking the d.system rank can lead to dire consequences and you probably
shouldn't do that. At a later date, the system list will probably be locked
by default.
<p>
The cells on the system list simply enumerate the functions: the
actual cells that describe whatever are connected to the system list
cells on d.1.
<h3>Dimension list</h3>
<p>
The <code>DimLists</code> system list cell has connected to it on d.1
a cyclical rank on d.2, the dimension list.
This list contains the names of dimensions that the views
will cycle through when you press X, Y, Z (possibly with
shift/alt).
<p>
Adding a dimension simply involves creating a new cell and
typing the name into that cell. Likewise, deleting a cell
will delete the dimension from the list (but not currently the
connections along that dimension).
NOTE: don't rotate to an empty cell: this will possibly
cause problems: at the very least, a raster error.
<p>
The dimension cursors of the different views
are a variety of pink shades.
These dimension selectors of the different views are actually
generic cursors so it would be possible to have different
dimension lists for each X, Y and Z of each view but at the moment
it's not possible to repoint them to a different list except by
trickery. We will probably provide a mechanism for this.
<h3>Views</h3>
<p>
The views are defined on three different cells in the system list:
<code>Views</code>,
<code>AllViews</code> and
<code>CellViews</code>.
These cells have different functions.
<p>
The windows cycle through different views by moving in the
list below <code>Views</code>, much like the dimensions are
cycled on the list below <code>DimLists</code>.
The cells below <code>Views</code> describe one particular
view.
<p>
The cells below <code>Views</code> are actually clones of
cells below <code>AllViews</code> that actually give those
views' parameters. For instance, the Vanishing and StretchVanishing
rasters use the same Java code but have different parameters
in the structure below <code>AllViews</code>.
<p>
The structure below <code>AllViews</code> is simple:
it is a list of the clonable cells (which name the views, but
the name is just decoration for the user: the real information
is in the structural operation of cloning), which are
connected on d.1 to the structure that actually defines the view.
<p>
The defining cells are structure along the ZOb structure,
explained better elsewhere (XXX).
<p>
Not all views in <code>AllViews</code> are by default cloned to the
main
<code>Views</code>
list for two reasons: first, there are too many views to just cycle
through, and second: some are not yet very stable or useful.
Experimentation with them is encouraged, though.
<p>
<code>CellViews</code>
is similar to
<code>Views</code> and
<code>AllViews</code>
in that it also contains a list of cellviews, i.e. how to render
one cell.
This is because currently there are not enough different cellviews
that having a separate list of more possibilities is not necessary.
<h3>Bindings</h3>
<h3>Actions</h3>
<h2>The keystrokes.</h2>
This is a list of (almost) all the currently available keystrokes
in the default bindings. As explained above, it is simple to modify the
bindings.
#include '../keybindings.wml'
:}
</body>
</html>
<!--
vim: set syntax=html :
-->
See more files for this project here