Most buffers have an undo list, which records all changes made
to the buffer's text so that they can be undone. (The buffers that
don't have one are usually special-purpose buffers for which Emacs
assumes that undoing is not useful.) All the primitives that modify the
text in the buffer automatically add elements to the front of the undo
list, which is in the variable buffer-undo-list
.
t
disables the recording of undo information.
Here are the kinds of elements an undo list can have:
position
(beg . end)
(text . position)
(abs position)
.
(t high . low)
primitive-undo
uses those
values to determine whether to mark the buffer as unmodified once again;
it does so only if the file's modification time matches those numbers.
(nil property value beg . end)
(put-text-property beg end property value)
(marker . adjustment)
nil
nil
.
The editor command loop automatically creates an undo boundary before each key sequence is executed. Thus, each undo normally undoes the effects of one command. Self-inserting input characters are an exception. The command loop makes a boundary for the first such character; the next 19 consecutive self-inserting input characters do not make boundaries, and then the 20th does, and so on as long as self-inserting characters continue.
All buffer modifications add a boundary whenever the previous undoable change was made in some other buffer. This is to ensure that each command makes a boundary in each buffer where it makes changes.
Calling this function explicitly is useful for splitting the effects of
a command into more than one unit. For example, query-replace
calls undo-boundary
after each replacement, so that the user can
undo individual replacements one by one.
primitive-undo
adds elements to the buffer's undo list when it
changes the buffer. Undo commands avoid confusion by saving the undo
list value at the beginning of a sequence of undo operations. Then the
undo operations use and update the saved value. The new elements added
by undoing are not part of this saved value, so they don't interfere with
continuing to undo.
Go to the first, previous, next, last section, table of contents.