[Date Prev][Date Next][Thread Prev][Thread Next][Author Index][Date Index][Thread Index]

:zz: THE ZIGZAG COMMANDS for Version 0.49 (zzDirex0629d6.html

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 www.xanadu.net/zigzag.) 

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 (zigzag.data) 
 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 (zigzag.data) 
 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 

Theodor Holm Nelson, Visiting Professor of Environmental Information
 Keio University, Shonan Fujisawa Campus, Fujisawa, Japan
http://www.sfc.keio.ac.jp/~ted/    PERMANENT E-MAIL: ted@xxxxxxxxxx
 Home Fax: 0466-46-7368  From USA: 011-81-466-46-7368
Project Xanadu (Permanent)
 3020 Bridgeway #295, Sausalito CA 94965
 Tel. 415/ 331-4422, fax 415/ 332-0136
Quotation of the day:
"There are no foxholes in atheists, either."  Ted Nelson, 1960s.