emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Overlay boundaries and undo


From: Eli Zaretskii
Subject: Re: Overlay boundaries and undo
Date: Fri, 08 Nov 2024 09:22:21 +0200

> From: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
> 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?

In what version of Emacs do you see this?  The implementation of
overlays was fundamentally changed in Emacs 29, and one of the aspects
of that change was that overlays are not based on markers anymore.

> 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?

Please show a reproducible recipe for investigating the issue you are
describing, and please do that in a bug report submitted via
"M-x report-emacs-bug" (which will collect important data about your
build and OS).

Thanks.



reply via email to

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