From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: Edebug corrupting point in buffers. Date: Wed, 2 Nov 2022 16:18:24 +0000 Message-ID: References: <83iljydh7e.fsf@gnu.org> <838rkud9d5.fsf@gnu.org> <83v8nybnuk.fsf@gnu.org> <83pme6bls8.fsf@gnu.org> <83mt99a223.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36280"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Nov 02 17:22:39 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oqGVj-0009F9-EC for ged-emacs-devel@m.gmane-mx.org; Wed, 02 Nov 2022 17:22:39 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oqGS4-0001Qt-Ix; Wed, 02 Nov 2022 12:18:54 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oqGRw-000105-Av for emacs-devel@gnu.org; Wed, 02 Nov 2022 12:18:49 -0400 Original-Received: from mx3.muc.de ([193.149.48.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oqGRt-0007nW-PG for emacs-devel@gnu.org; Wed, 02 Nov 2022 12:18:43 -0400 Original-Received: (qmail 91718 invoked by uid 3782); 2 Nov 2022 17:18:26 +0100 Original-Received: from acm.muc.de (p4fe15d2a.dip0.t-ipconnect.de [79.225.93.42]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Wed, 02 Nov 2022 17:18:25 +0100 Original-Received: (qmail 1149 invoked by uid 1000); 2 Nov 2022 16:18:24 -0000 Content-Disposition: inline In-Reply-To: <83mt99a223.fsf@gnu.org> X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.5; envelope-from=acm@muc.de; helo=mx3.muc.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: "Emacs-devel" Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:299027 Archived-At: Hello, Eli. On Wed, Nov 02, 2022 at 16:00:52 +0200, Eli Zaretskii wrote: > > Date: Wed, 2 Nov 2022 11:34:37 +0000 > > Cc: emacs-devel@gnu.org > > From: Alan Mackenzie > > (i) Emacs -Q. > > (ii) On a single frame, arrange buffers *scratch*, test-edebug.el, and > > some other substantial buffer, that I call emacs.README. > > (iii) Put point in emacs.README somewhere other than point-max. > > (iv) Instrument test-edebug for edebug with C-u C-M-x. > > (iv)a Put point into window *scratch*. > > (v) M-: (test-edebug). > > (vi) Step through test-edebug using the space key. > > (vii) Note that the second text insertion happens where point was in the > > window, not at point-max. This is the bug. > 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: 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 @@ -1100,6 +1101,41 @@ 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 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 + +@noindent +``foo'' gets inserted at @code{point-max} as intended, but ``bar'' +sometimes gets wrongly inserted at the window point of the window +displaying buffer B. + +The only known workaround for this problem is to disable +@code{edebug-save-windows}, for example with the command @kbd{W} +(@pxref{Edebug Options}). + @node Edebug Recursive Edit @subsubsection Edebug Recursive Edit 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).