Code Search for Developers
 
 
  

ug.wml from gzz at Krugle


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

gzz

An implementation of Ted Nelson's ZZstructure. ZZstructure is a new type of programming platform for structured data.

Project homepage: http://savannah.nongnu.org/projects/gzz
Programming language(s): C++,Java,Python
License: lgpl21

  Makefile
  active.png
  addressbook.png
  aftermove.png
  alku.png
  bind1.png
  bind2.png
  boring.png
  bothwins.png
  breakkafka.png
  change1.png
  change2.png
  child1.png
  child2.png
  clone1.png
  clone2.png
  connect1.png
  connect2.png
  connection1.png
  creation.png
  dimensio.png
  edit1.png
  edit2.png
  edit3.png
  edit4.png
  extra.png
  f2.png
  familytree.png
  font.png
  grey.png
  hop1.png
  hop2.png
  hopolympos.png
  htree.png
  kafka.png
  klooni.png
  make1.png
  make2.png
  make3.png
  make4.png
  make5.png
  make6.png
  margins.png
  mark1.png
  mark2.png
  markconnect.png
  mutsi.png
  mutsiosoite.png
  myspeech.png
  myspeech1.png
  myspeech2.png
  myspeech3.png
  newcells.png
  newstory.png
  newstory2.png
  newstory3.png
  newug.wml
  olympos.png
  olympos2.png
  osoite.png
  para.png
  rainy.png
  rastererror.png
  rcfact1.png
  rightmoved.png
  rotate.png
  row.png
  shiny.png
  shinyhappy.png
  shinyhappy2.png
  shinyhappy3.png
  showingz.png
  start.png
  story.png
  storytext.png
  structure1.png
  structure2.png
  suku.png
  testi.png
  ug.wml
  wallstreet.png
  widthstr.png
  wrongconn.png