elisp: Not Intervals
31.19.10 Why Text Properties are not Intervals
----------------------------------------------
Some editors that support adding attributes to text in the buffer do so
by letting the user specify intervals within the text, and adding the
properties to the intervals. Those editors permit the user or the
programmer to determine where individual intervals start and end. We
deliberately provided a different sort of interface in Emacs Lisp to
avoid certain paradoxical behavior associated with text modification.
If the actual subdivision into intervals is meaningful, that means
you can distinguish between a buffer that is just one interval with a
certain property, and a buffer containing the same text subdivided into
two intervals, both of which have that property.
Suppose you take the buffer with just one interval and kill part of
the text. The text remaining in the buffer is one interval, and the
copy in the kill ring (and the undo list) becomes a separate interval.
Then if you yank back the killed text, you get two intervals with the
same properties. Thus, editing does not preserve the distinction
between one interval and two.
Suppose we attempt to fix this problem by coalescing the two
intervals when the text is inserted. That works fine if the buffer
originally was a single interval. But suppose instead that we have two
adjacent intervals with the same properties, and we kill the text of one
interval and yank it back. The same interval-coalescence feature that
rescues the other case causes trouble in this one: after yanking, we
have just one interval. Once again, editing does not preserve the
distinction between one interval and two.
Insertion of text at the border between intervals also raises
questions that have no satisfactory answer.
However, it is easy to arrange for editing to behave consistently for
questions of the form, “What are the properties of text at this buffer
or string position?” So we have decided these are the only questions
that make sense; we have not implemented asking questions about where
intervals start or end.
In practice, you can usually use the text property search functions
in place of explicit interval boundaries. You can think of them as
finding the boundaries of intervals, assuming that intervals are always
coalesced whenever possible. Property Search.
Emacs also provides explicit intervals as a presentation feature; see
Overlays.