From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Making Emacs Lisp easier to debug Date: Sat, 11 Nov 2023 18:01:08 +0200 Message-ID: <831qcwwa7v.fsf@gnu.org> References: <838r74ye77.fsf@gnu.org> <83fs1cwnnv.fsf@gnu.org> <83edgwwge0.fsf@gnu.org> Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22946"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Alan Mackenzie Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Nov 11 17:02:24 2023 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 1r1qRE-0005kk-D2 for ged-emacs-devel@m.gmane-mx.org; Sat, 11 Nov 2023 17:02:24 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r1qQR-0001gA-OD; Sat, 11 Nov 2023 11:01:35 -0500 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 1r1qQG-0001eJ-L8 for emacs-devel@gnu.org; Sat, 11 Nov 2023 11:01:31 -0500 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r1qQF-0006I3-NI; Sat, 11 Nov 2023 11:01:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=v/mteSnKvSRaetY9KJGqDTguRNm1KhuvGeZ1JHiCVtU=; b=S9B14lzShi+U cxlJ2MkExYF88LSaeRrZwtK9KmDViquY8E2hVRMezqNhfgHxio3kNkcKD8Xh/PwIPvTh/6FnFIK9J 7VvKEC0uqH94AnWbOccTcokQ4n9vFD0WtNeSQAf0TRVmgCvfmz2zFZRQU8BqxP7qYYDrOdcmxZdGf lpbNVGtu9VppPXNmGC3KJVuFS5JwajHOSdeR/EXxvVUIaGsf7KhYwzDEquDBrEBQwe8fFlP0rcV43 AxHDeJmVLP0PIqx2wstCqQmpnSUMHuURlVSs4bgGwsYApvbajaI+RCVPkEVpPccO3O3+YjVKVLygA oOc4oWu2kjPsZdi1EQYpqQ==; In-Reply-To: (message from Alan Mackenzie on Sat, 11 Nov 2023 14:56:17 +0000) 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: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:312587 Archived-At: > Date: Sat, 11 Nov 2023 14:56:17 +0000 > Cc: emacs-devel@gnu.org > From: Alan Mackenzie > > > > With font lock, or any other Lisp hook called from redisplay, it should > > > be possible, in a recursive-edit loop, to run edebug, displaying on a > > > different frame. That different frame would be running in the inner > > > redisplay while the outer redisplay would be suspended. > > > Why do you need an inner redisplay for that? > > Because the outer redisplay would be the thing being debugged, and hence > not in a position to display the progress of edebug. But you don't want to debug redisplay, you want to debug the font-lock code called by redisplay. > > And what will that frame show, given that the outer redisplay is > > halfway through fontifying the text? what do you expect to see there, > > and why? > > I think the scope of a redisplay operation could change from everything > to a single frame. Not really, not with the current code design. And you don't want a separate frame, you want a separate window. > While stepping through a hook in edebug in the inner redisplay, the > outer redisplay would (I think) carry on looking like it did before the > outer redisplay started. Or, possibly, it might look like a bare frame, > I'm not sure. So basically, the outer redisplay doesn't exist. All you need is for it to call the font-lock code. Which once again brings me to the question: why isn't jit-lock-debug-mode not what you want? > > > > Re-entering redisplay in the middle of a redisplay cycle means that > > > > the outer redisplay didn't finish preparing the glyph matrices, and > > > > what do you want the inner redisplay to do in such a case? > > > > Work with the glyph matrices belonging to the inner redisplay whilst the > > > outer one is suspended. > > > But that will immediately get you into the same problem, since the > > offending window will get redisplayed by the inner redisplay, and will > > again cause Edebug, etc., ad nauseam. > > We could put a limit on the nesting depth of redisplay nesting that > edebug would cope with, a small integer (2 or 3, probably). That will prevent infinite recursion, but it won't solve your problem, because you do want the "inner" redisplay to finish, so it shows the window where you are running the debugger. > > .... and what you call "inner redisplay" is not what you want at all. > > I don't understand why you say this. I'm saying that what you seem to want is an ability to display a single window, the one where you run the debugger. All the rest is of no interest to you, and can, for example, be stopped in its tracks. The solution to that is not a reentrant redisplay, it's something else.