From: Alan Mackenzie <acm@muc.de>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Edebug corrupting point in buffers.
Date: Thu, 3 Nov 2022 11:32:29 +0000 [thread overview]
Message-ID: <Y2OmzWP/2rMmCvyB@ACM> (raw)
In-Reply-To: <83cza59tvg.fsf@gnu.org>
Hello, Eli.
On Wed, Nov 02, 2022 at 18:57:39 +0200, Eli Zaretskii wrote:
> > Date: Wed, 2 Nov 2022 16:18:24 +0000
> > Cc: emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>
> > > Yes, I see the problem, but setting edebug-save-windows to nil
> > > eliminates it. So I think we already have a solution for the rare
> > > situations where this is an issue.
> > It remains a perplexing problem for those who stumble into it. How about
> > instead of patching the code, adding some documentation clarifying the
> > problem?
> > I would propose the following:
> Fine by me, but...
> > diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
> > index 6a51489d8a..b4f680fe86 100644
> > --- a/doc/lispref/edebug.texi
> > +++ b/doc/lispref/edebug.texi
> > @@ -1019,6 +1019,7 @@ The Outside Context
> > @menu
> > * Checking Whether to Stop:: When Edebug decides what to do.
> > * Edebug Display Update:: When Edebug updates the display.
> > +* Edebug Buffer Points:: When @code{point} gets corrupted.
> > * Edebug Recursive Edit:: When Edebug stops execution.
> > @end menu
> ...please document this in the same place where the variables we
> discussed are described. It is not a good idea from the didactic POV
> to have this described separately.
The place I put it, under "The Outside Context" has as its purpose
"Edebug tries to be transparent to the program you are debugging, but it
does not succeed completely. ..... This section explains precisely what
context Edebug restores, and how Edebug fails to be completely
transparent."
The current phenomenon fits precisely into that category. Surely we need
to describe it there, otherwise the section will be incomplete.
I envisage the main purpose of this new documentation is not for somebody
calmly reading through the manual learning about edebug-save-windows.
Rather it's for somebody in a highly emotional state, who's just had
edebug corrupt his buffers due to an apparent bug in edebug. I think
this user is more likely to find the new doc quickly where my patch puts
it.
On the other hand, as you say, we do need a description in the list item
for edebug-save-windows in "Edebug Options" too.
> > +This can be a problem when your program itself sets point in a buffer,
> > +intending later to use that value of point. For example, suppose you
> > +have buffer B displayed in your selected frame, and you step through
> > +the following Lisp fragment:
> > +
> > +@example
> > +(set-buffer A)
> > +(set-buffer B)
> > +(goto-char (point-max))
> > +(insert "foo")
> > +(set-buffer A)
> > +(set-buffer B)
> > +(insert "bar")
> > +@end example
> I very much doubt that showing this example will help. It just
> muddies the water, b y forcing users to try to understand what the
> example does, which is completely irrelevant to what we want to
> convey.
OK, I'll take it out, together with the description. Instead I'll insert
something vague about switching buffers and moving point in them.
> Just say that if point gets reset in non-selected windows during
> Edebug stepping, users should try customizing that variable.
I'll do that.
Here's an amended patch, somewhat shorter than yesterday's:
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 6a51489d8a..aab8db989a 100644
--- a/doc/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
@@ -1019,6 +1019,7 @@ The Outside Context
@menu
* Checking Whether to Stop:: When Edebug decides what to do.
* Edebug Display Update:: When Edebug updates the display.
+* Edebug Buffer Points:: When @code{point} gets corrupted.
* Edebug Recursive Edit:: When Edebug stops execution.
@end menu
@@ -1100,6 +1101,22 @@ Edebug Display Update
the cursor shows up in the window.
@end itemize
+@node Edebug Buffer Points
+@subsubsection Edebug's handling of buffer points
+
+When Edebug enters its recursive edit to get a command from the user,
+by default it saves the window points of each window in the selected
+frame (@pxref{Edebug Display Update}). These are usually, but not
+always, the same as the values of point in the buffers displayed by
+these windows (@pxref{Window Point}). On leaving the recursive edit,
+these window points get restored, but sometimes buffer points get
+overwritten by them too.
+
+This can occasionally be a problem when your program switches buffers
+and sets point in them. The recommended workaround is to disable the
+option @code{edebug-save-windows}, for example with the command
+@kbd{W} (@pxref{Edebug Options}).
+
@node Edebug Recursive Edit
@subsubsection Edebug Recursive Edit
@@ -1657,6 +1674,11 @@ Edebug Options
what happens to the window configurations, it is better to set this
variable to @code{nil}.
+Saving the window configuration can sometimes corrupt the values of
+point in buffers displayed by these windows. If this happens, you are
+recommended to set @code{edebug-save-windos} to @code{nil}.
+@xref{Edebug Buffer Points}.
+
If the value is a list, only the listed windows are saved and
restored.
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index a3d1d80408..b07b1e28cd 100644
--- a/doc/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -714,6 +714,7 @@ Top
* Checking Whether to Stop::When Edebug decides what to do.
* Edebug Display Update:: When Edebug updates the display.
+* Edebug Buffer Points:: When @code{point} gets corrupted.
* Edebug Recursive Edit:: When Edebug stops execution.
Edebug and Macros
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2022-11-03 11:32 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-31 11:43 Edebug corrupting point in buffers; we need buffer-point and set-buffer-point, perhaps Alan Mackenzie
2022-10-31 13:16 ` Eli Zaretskii
2022-10-31 14:32 ` Alan Mackenzie
2022-10-31 14:50 ` Eli Zaretskii
2022-10-31 15:46 ` Alan Mackenzie
2022-10-31 17:33 ` Stefan Monnier
2022-10-31 17:55 ` Eli Zaretskii
2022-10-31 20:46 ` Alan Mackenzie
2022-11-01 6:21 ` Eli Zaretskii
2022-10-31 17:19 ` Stefan Monnier
2022-10-31 18:09 ` Eli Zaretskii
2022-10-31 20:35 ` Stefan Monnier
2022-10-31 17:21 ` Stefan Monnier
2022-10-31 18:10 ` Eli Zaretskii
2022-10-31 23:14 ` Stefan Monnier
2022-11-01 7:06 ` Eli Zaretskii
2022-10-31 21:25 ` Alan Mackenzie
2022-11-01 6:45 ` Eli Zaretskii
2022-11-01 11:41 ` Edebug corrupting point in buffers Alan Mackenzie
2022-11-01 11:53 ` Eli Zaretskii
2022-11-01 13:42 ` Alan Mackenzie
2022-11-01 14:42 ` Eli Zaretskii
2022-11-01 17:06 ` Alan Mackenzie
2022-11-01 17:12 ` Eli Zaretskii
2022-11-01 17:24 ` Alan Mackenzie
2022-11-01 17:57 ` Eli Zaretskii
2022-11-01 19:02 ` Alan Mackenzie
2022-11-01 19:47 ` Stefan Monnier
2022-11-01 20:53 ` Alan Mackenzie
2022-11-01 21:51 ` Stefan Monnier
2022-11-02 10:40 ` Alan Mackenzie
2022-11-02 13:12 ` Stefan Monnier
2022-11-02 13:28 ` Eli Zaretskii
2022-11-02 3:28 ` Eli Zaretskii
2022-11-02 12:53 ` Stefan Monnier
2022-11-02 17:40 ` Juri Linkov
2022-11-02 18:26 ` Eli Zaretskii
2022-11-02 18:36 ` Juri Linkov
2022-11-02 18:52 ` Eli Zaretskii
2022-11-03 17:25 ` Juri Linkov
2022-11-03 18:06 ` Eli Zaretskii
2022-11-03 18:31 ` Juri Linkov
2022-11-02 11:34 ` Alan Mackenzie
2022-11-02 14:00 ` Eli Zaretskii
2022-11-02 16:18 ` Alan Mackenzie
2022-11-02 16:57 ` Eli Zaretskii
2022-11-03 11:32 ` Alan Mackenzie [this message]
2022-11-03 13:29 ` Eli Zaretskii
2022-11-03 18:07 ` Alan Mackenzie
2022-11-03 18:15 ` Eli Zaretskii
2022-11-03 20:25 ` Alan Mackenzie
2022-11-05 11:24 ` Eli Zaretskii
2022-11-05 16:50 ` Alan Mackenzie
2022-11-06 8:10 ` Eli Zaretskii
2022-11-06 14:40 ` Alan Mackenzie
2022-11-03 19:29 ` Stefan Monnier
2022-11-03 19:36 ` Eli Zaretskii
2022-11-03 20:39 ` Stefan Monnier
2022-11-04 6:34 ` Eli Zaretskii
2022-11-04 6:37 ` Eli Zaretskii
2022-11-03 19:57 ` Alan Mackenzie
2022-11-03 20:35 ` Stefan Monnier
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=Y2OmzWP/2rMmCvyB@ACM \
--to=acm@muc.de \
--cc=eliz@gnu.org \
--cc=emacs-devel@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.
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).