[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Overlay boundaries and undo
From: |
Karthik Chikmagalur |
Subject: |
Overlay boundaries and undo |
Date: |
Thu, 07 Nov 2024 14:48:27 -0800 |
I'm trying to understand how overlay boundaries interact with undo. The
reason is that I'm tracking a region of a buffer with an overlay, and
would like to be able to restore overlay boundaries when text deleted at
the overlay boundary is reinserted via undo.
- When I delete some text in a range that includes an overlay boundary,
the overlay boundary is moved. This works as expected. In the
example below I deleted one character, ".", at the end of an overlay,
and the overlay boundary moved one character to the left.
- If I then undo, the deleted text is reinserted but the overlay
boundary is not moved back to its original position.
- Checking `buffer-undo-list', I see entries that look like this:
("." . -18)
(#<marker at 18 in *Scratch for fundamental-mode*> . -1)
(#<marker at 18 in *Scratch for fundamental-mode*> . -1)
(#<marker at 18 in *Scratch for fundamental-mode*> . -1)
(#<marker at 18 in *Scratch for fundamental-mode*> . -1)
(#<marker at 18 in *Scratch for fundamental-mode*> . -1)
(#<marker at 18 in *Scratch for fundamental-mode*> . -1)
(#<marker at 18 in *Scratch for fundamental-mode*> . -1)
[Several more duplicate entries of this type]
- From (info "(elisp) Undo"), it looks like these entries are of the
types
(TEXT . POSITION)
(MARKER . ADJUSTMENT)
1. Are the markers being adjusted above the overlay boundary markers?
If so, why are there so many marker adjustment entries for a one
character deletion?
2. The manual seems to suggest that when undoing, markers are moved back
to their original positions if the adjustments are compatible with the
corresponding text:
If the marker's location is consistent with the (TEXT . POSITION)
element preceding it in the undo list, then undoing this element
moves MARKER − ADJUSTMENT characters.
However this doesn't seem to happen. Is there some way to restore
overlay boundaries when undoing text deletions?
Thanks,
Karthik
- Overlay boundaries and undo,
Karthik Chikmagalur <=