sourcedoc: zzDirex0629.html

hide references





To Ted Nelson home page

To Xanadu home page

Xanadu(R) ZigZag(tm) Hyperstructure Kit

THE ZIGZAG COMMANDS for Version 0.49

(c) 1997, 1998 Project Xanadu.

System designed by Ted Nelson, programmed by Andrew Pam.

These instructions by TN.


 The fact that it works quite well has been kind of a surprise.

This is not "the final system" in any sense.

The later system *as designed* will do many more things,

 much more easily.

However, this implementation works surprisingly well,

 and demonstrates some of the real powers of the general system.

So we can say "imagine a better interface." As well as

 some of the more advanced functions.

 But you don't have to imagine-- you can see-- the

 fascinating space and structures this system makes


- - - - -



Basic principle of command capitalization:

 lower-case is for the more important and more often used

 places and functions (esp. right window, but also forward)

 upper-case (which is slightly more trouble)

 is for the slightly less important and slightly less often used

 places and functions (esp. left window, but also backward).

- - - - -


You must have Perl 5 and the curses/perl interface installed.

 (See installation instructions at

To fire it up: Long form invocation:

perl zigzag.txt dataset-name[optional]

This can be easily aliased for convenience,

 shortening the invocation into (for example)

 "zigzag" or "zz".

You then see whichever data set you have named

 in exactly the view you last saw it (including cursor positions).

If you do not specify a data set (

 and a file by that name does not exist,

 such a file will be created when the system is fired up.

If you do not specify a data set (

 and a file by that name already exists,

 it will come up in exactly the view you last saw it

(including cursor positions).

- - - - -


Control k opens a cell for editing. It opens in

 some Unix editor, such as vi, emacs or mule

 (specifiable in the code).

- - - - -



You may quickly see the text contents of a cell in the

 right-hand window by typing q and in the left-hand

 window by typing Q. These are toggles, closed again

 with the same key.


There are three viewing axes: x, y and z.

 The current view in each window maps the cell structure

 to the viewing axes, assigning these three axes to

 whatever structure dimensions you specify.


The cell structure may have any number of dimensions,

 though the system begins with only seven (d.1, d.2, d.3,

 d.cursor, d.clone, d.mark, d.contain, d.contain2).

 (The functions of these are explained at the end.)


You may quickly change the mapping of the ZigZag world's

 dimensions to the window's viewing axes.

Typing x, y or z in lower case causes the view in the

 right window to step by one dimension on the

 specified viewing axis (x, y or z). Typing X, Y or Z in upper

 case causes the view in the left window to step by one

 dimension in the specified viewing axis (X, Y or Z).

VIEW MODES (presentation sequences, or "rasters")

A window currently has two possible view modes:

"I view" (rows connected by a single column, like the

 capital letter I) and "H view" (columns connected by a

 single row, like the capital letter H).

Changing the view mode does not change the structure,

 or the mapping of the structure to the viewing dimensions.

 It changes the sequence of presentation of the cells,

 beginning with the accursed cell (center of presentation)

 and following some chosen presentational sequence outward.

I and H views are very simple and basic, but many other

 programmable viewing modes are possible.

- - - - -


The "arrow" keys are--

 (these make more sense to your hand than reading them):

REAL arrows (which control the right cursor) or

 esfc (which control the left cursor) or

 ijl, (which control the right cursor) or

 d (forward left cursor = negward on Z)

 or D (backward left cursor = posward on Z) or

 k (forward right cursor = negward on Z) or

 K (backward right cursor = posward on Z).


The number of the accursed cell appears in the lower right

 corner of its window.

If you type a number as the argument for a command,

 that number appears at the lower left in the left window.

Backspace can correct a mistyped cell number.

- - - - -


Some of these commands may be used with arguments--

 arrows, numbers or both.

In some cases you may type a number before a key,

 affecting the result.

In other cases typing a number before a key has no result.


 Go Home (right cursor)

# g

 Go to cell of that number (right cursor)


 Go Home (left cursor)

# G

 Go to cell of that number (left cursor)


 Move cursor

# arrow

 Connect specified cell to accursed cell. If nothing is connected

 to the cursor in that direction and the appropriate side

 of the specified cell is free, the connection will take place.

If the cursor already has a neighbor in the specified direction,

 *but* the specified cell is *unconnected on both sides*

 of the specified direction, the cell will be connected between

 the cursor and its present neighbor.

Note that if "# arrow" is one of the following, it may be difficult

 to see the result: # d, # D, # k, # K. These connect the accursed

 cell to the specified cell in the forward or back direction.


 Clone ("transclude"), right window.


 Clone ("transclude"), left window.

 What it does is make a new instance of the left or right

 accursed cell. The new instance becomes accursed,

 but unconnected to anything and alone in its window.

(Since it is easy to lose this cell, you may want to

 write down its cell number before doing anything else.)

- - - - -


The "delete" key deletes a cell, as does the delete cell

 on the menu. However, deleted cells are not actually

 annihilated; they become stored +d.2ward from the "Midden" cell.

 ("Midden" is a name still used in Australia for "trashheap".)

- - - - -


Structure dimensions d.1, d.2 and d.3 have no assigned

 functions. Think of d.1 as useful for headings, d.2 as useful

 for virtual lists, d.1 and d.2 together for ordinary tables

 and very interesting basket-weave structures, and d.3

 as a third dimension.

The "Cursor" dimension, d.cursor, is the dimension

 on which a cursor (actually a cell) is connected to

 the cell it's on (the accursed cell); the user cannot change

 connections on the cursor dimension, except by explicitly

 moving the cursor, but the cursor dimension can be viewed

 like any other dimension.

The "Clone" dimension, d.clone,

 is the dimension on which a cloned cell

 is always connected to its original; this connection is

 enforced by the system, so you cannot disconnect a clone

 from its master, though you can rearrange clones on the

 clone dimension. NOTE THAT EDITING ANY


 OF ITS CHAIN-- i.e., any clones of that same master,

 and the master itself, all are changed identically if any

 is changed.

The "Mark" dimension (not implemented) will be for

 marking cells, especially strips and groups of cells, in

 preparation for some operation. The marked cells will

 have other cells (marking cells) connected to them on the

 Mark dimension.

The "Contain" dimension, d.contain, is the dimension

 representing containment: we represent cell A as being

 inside cell B by connecting it posward from B on the Contain

 dimension. (In the next version it will be called d.inside.)

The "Contain2" dimension (which willl be called "d.contents"

 in tne next version) allows a given cell to contain more than one thing.

 Anything contained after the first cell contained is posward on

 d.contain2 from the first cell contained.

By looking at these specific connections, the system quickly

 determines what a cell contains or is contained by.


NOTE: you can see the contents of all the cells inside a cell

 when you look at it in a quad window.

BUG: currently subcell contents are not shown correctly

  in quad windows.





It is easy to mauipulate the dimensions. Go to the dimension list,

 which is negward from the home cell on d.1 and begins with "d.1".

To add a dimension: create a new cell with the dimension

 name you choose. We recommend beginning it with "d.".

To rearrange the dimensions (the order in which they will

 cycle when you hit keys xyzXYZ: simply rearrange the

 dimension list using the "hop"command.

To delete a dimension: put the righthand cursor on a

 particular cursor name and hit "delete."

WARNING: deleting d.1, d.2, d.cursor or d.clone will

 probably have disagreeable results.

Note that the connections of a cell in a particular dimension

 remain, whether that dimension is deleted or not. It is possible

 to delete a dimension and restore it later with a dimension

 of the same name, rendering those same connections operative







There are no documents that refer to this sourcedoc.