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

User representation of orgls & berts



Hugh and MarcS (and for the last little while, myself) were talking about
how to represent historical trace and berts and such in a way that most
users would be able to understand. Before y'all start warming up the
flamethrowers, let me give you the constraints on the design:

-- first and foremost, it has to be close enough to the the way that
things are done now (Save, Save As, Revert, Undo, Redo, etc.) that users
don't need decades of indoctrination to understand it

-- it doesn't need to provide the entire functionality of the Xanadu
backend, but only enough to make it clear we're a lot better than
anything else

-- it shouldn't require a lot of extra programming (tree browsers &c)

THE SOLUTION:

All the itty bitty edit operations back to the last Save/Save As/Revert
are kept as a series of stamps in the historical trace for the usual
editor-type Undo operations. They are all thrown away on a Save/SaveAs/Revert
(at least from the trace).

A Save marks a checkpoint, i.e. a node in the version tree of the document.
For simplicity at the moment, we will suppose that these are kept in a
separate trace from the edit operations. These nodes are put on the
historical trace in a linear sequence in the real-time order of creation.
This becomes important when looking at forking versions:

A Revert walks back on the timeline to the most recent node. An UnRevert
(Cancel Revert? Revert Forward? Prevert? ;-) goes to the node after
the current one in the trace. Starting to edit after a sequence of
Reverts/UnReverts puts another copy of the node at the end of the
historical trace. Thus Revert/Unvert will visit all checkpoints in
the document at least once, and once more for each branch if the document
branches into several versions at that point. A sample session:
(The "current" version is parenthesized)

Version Tree		Historical Trace	Command

(A)			A
						...edit...
						Save
A-(B)			A,B
			  			...edit...
						Save
A-B-(C)			A,B,C
						...edit...
						Save
A-B-C-(D)		A,B,C,D
						Revert
						Revert
A-(B)-C-D		A,B,C,D
						...edit...
						Save
A-B-C-D			A,B,C,D,B,E
   \
    (E)

A sequence of Reverts at this point would visit versions E,B,D,C,B,A
in that order. This flattens out the tree but at least it flattens
out the tree along a dimension that the user has some experience
with: real time.

Save As starts a completely independent version tree, making a copy 
of the current bert and other document-level information.

	--ravi