From: Yuri Khan <yurivkhan@gmail.com>
To: galex-713@galex-713.eu
Cc: help-gnu-emacs <help-gnu-emacs@gnu.org>
Subject: Re: point moved despite save-excursion, after deleting/reinserting region
Date: Thu, 18 Oct 2018 18:32:24 +0700 [thread overview]
Message-ID: <CAP_d_8UjAT-g_=M49rimxM3qY2Ef86A5MebvHgTcsC91dUykng@mail.gmail.com> (raw)
In-Reply-To: <87efcnziq7.fsf@portable.galex-713.eu>
On Thu, Oct 18, 2018 at 4:51 PM Garreau, Alexandre
<galex-713@galex-713.eu> wrote:
> > When you delete text, markers pointing into that text cannot follow,
> > they get relocated to the beginning/end of the deletion/insertion.
> > What else can Emacs do, given that it doesn't know your future
> > intentions?
>
> I thought something such as `save-excursion' would do that, or that it
> would be saved with the string, or something alike.
Imagine if that was true: that save-excursion could somehow magically
restore point across deletion of a fragment of text and subsequent
re-insertion of the same fragment.
Now comes the next guy (me!) and says, what if I re-insert not the
same fragment but a slight modification of it? Maybe I wrapped it in a
pair of XML tags. Or removed a pair of XML tags. Anyway, plz restore
the point Doing The Right Thing, kthx.
How would the hypothetical implementation of save-excursion do that?
…
You’d probably want to make buffer-substring to return not only the
buffer substring but also a representation of all markers within. You
can’t put them into the string itself because that will confuse the
algorithms that do the modification. You could probably put it into
properties, but then those who use buffer-substring-no-properties
lose. Further, insert would scan the inserted fragment and restore
markers.
The practical answer to my position-preserving modifications is, do
them directly in the buffer. If the modifications do not span the
point, point will be preserved by save-excursion.
Now returning to your modify-evaluate-undo scenario. How important is
it to you that the evaluation happens in the original buffer? Maybe
you could copy the fragment to a temporary buffer, modify and evaluate
it there, have the temporary buffer killed for you? This way, the
original buffer content is unmodified and the point is unmoved.
Moreover, the undo history is untouched.
next prev parent reply other threads:[~2018-10-18 11:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-17 1:43 point moved despite save-excursion, after deleting/reinserting region Garreau, Alexandre
2018-10-17 16:12 ` Eli Zaretskii
2018-10-17 20:13 ` Garreau, Alexandre
2018-10-18 2:38 ` Eli Zaretskii
2018-10-18 9:50 ` Garreau, Alexandre
2018-10-18 11:32 ` Yuri Khan [this message]
2018-10-18 11:45 ` Garreau, Alexandre
2018-10-18 13:16 ` Eli Zaretskii
2018-10-18 18:08 ` Saving (and finding) markers (Was: Re: point moved despite save-excursion, after deleting/reinserting region) Garreau, Alexandre
2018-10-18 18:32 ` Eli Zaretskii
2018-10-18 19:36 ` Saving (and finding) markers Garreau, Alexandre
2018-10-18 20:11 ` Eli Zaretskii
2018-10-19 1:15 ` Stefan Monnier
2018-10-19 6:38 ` Eli Zaretskii
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='CAP_d_8UjAT-g_=M49rimxM3qY2Ef86A5MebvHgTcsC91dUykng@mail.gmail.com' \
--to=yurivkhan@gmail.com \
--cc=galex-713@galex-713.eu \
--cc=help-gnu-emacs@gnu.org \
/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.
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).