From: Eli Zaretskii <eliz@gnu.org>
To: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: Overlay boundaries and undo
Date: Fri, 08 Nov 2024 09:22:21 +0200 [thread overview]
Message-ID: <86h68ip4uq.fsf@gnu.org> (raw)
In-Reply-To: <87wmhemzic.fsf@gmail.com> (message from Karthik Chikmagalur on Thu, 07 Nov 2024 14:48:27 -0800)
> 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.
next prev parent reply other threads:[~2024-11-08 7:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-07 22:48 Overlay boundaries and undo Karthik Chikmagalur
2024-11-08 4:23 ` James Thomas
2024-11-08 7:22 ` Eli Zaretskii [this message]
2024-11-09 5:45 ` James Thomas
2024-11-09 6:48 ` James Thomas
2024-11-09 8:14 ` Eli Zaretskii
2024-11-10 0:37 ` Karthik Chikmagalur
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=86h68ip4uq.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=karthikchikmagalur@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).