108
out disruption is determined by the data dependencies reflected in the causal ordering of
changes, not by their temporal order of creation.
It is, of course, possible to remove any change from a change set, but if the result is to
be minimally consistent, other changes may also need to be removed. In general, undoing a
change also requires undoing all causally greater changes, so that the result will also be
minimally consistent. Just as maintaining minimal consistency imposes some limitations on
merge, this imposes some limitations on undo. The removal of changes also removes ad-
dresses from the address space of a P-sequence, and this is a rather worse problem, because
it affects Palimpsest’s ability to handle hypertext links and other persistent selections. Per-
sistent selections should not be invalidated by the remove of a change (even one that it is
casually dependent on).
This is one case where the notion of a total change set comes in handy, as discussed at
the beginning of this chapter. In essence, persistent selections, such as hypertext anchors,
should be modeled as ranges in the P-sequence corresponding to all known changes. It is
then possible to trace the positions and sources of ranges in the global address space in any
versions of interest, simply by finding the positions of the endpoints of the selection in each
of the relevant versions. The stability of the Palimpsest address ordering allows a corre-
sponding position to be found, by comparing (in the global change set) the persistent ad-
dresses of the selection, with the addresses in the P-sequences of interest.
Most theoretical work on undo has considered the meaning of the user interface action
“undo.” This has tended to keep the focus directly on what happens in a linear sequence of
actions that includes operations like undo and redo. In (Dix, Mancini et al. 1997)the
authors observe that much of the confusion that surrounds undo is a consequence of the
fact that it is a meta-command. It does not have a single direct effect within an application,
but only indirect one that changes the command history in a particular way. In this user-
interface sense, Palimpsest does not actually provide or model an undo facility, since the
out disruption is determined by the data dependencies reflected in the causal ordering of
changes, not by their temporal order of creation.
It is, of course, possible to remove any change from a change set, but if the result is to
be minimally consistent, other changes may also need to be removed. In general, undoing a
change also requires undoing all causally greater changes, so that the result will also be
minimally consistent. Just as maintaining minimal consistency imposes some limitations on
merge, this imposes some limitations on undo. The removal of changes also removes ad-
dresses from the address space of a P-sequence, and this is a rather worse problem, because
it affects Palimpsest’s ability to handle hypertext links and other persistent selections. Per-
sistent selections should not be invalidated by the remove of a change (even one that it is
casually dependent on).
This is one case where the notion of a total change set comes in handy, as discussed at
the beginning of this chapter. In essence, persistent selections, such as hypertext anchors,
should be modeled as ranges in the P-sequence corresponding to all known changes. It is
then possible to trace the positions and sources of ranges in the global address space in any
versions of interest, simply by finding the positions of the endpoints of the selection in each
of the relevant versions. The stability of the Palimpsest address ordering allows a corre-
sponding position to be found, by comparing (in the global change set) the persistent ad-
dresses of the selection, with the addresses in the P-sequences of interest.
Most theoretical work on undo has considered the meaning of the user interface action
“undo.” This has tended to keep the focus directly on what happens in a linear sequence of
actions that includes operations like undo and redo. In (Dix, Mancini et al. 1997)the
authors observe that much of the confusion that surrounds undo is a consequence of the
fact that it is a meta-command. It does not have a single direct effect within an application,
but only indirect one that changes the command history in a particular way. In this user-
interface sense, Palimpsest does not actually provide or model an undo facility, since the