emacs-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]