From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.bugs Subject: bug#32874: Unwanted scrolling in edebug `f' command when follow-mode is active Date: Sun, 30 Sep 2018 15:36:46 +0000 Message-ID: <20180930153646.GF6305@ACM> References: <20180929140957.GB5008@ACM> <83lg7k5q2o.fsf@gnu.org> <20180929153729.GD5008@ACM> <83h8i85lr7.fsf@gnu.org> <20180929204113.GF5008@ACM> <837ej35tex.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: blaine.gmane.org 1538322092 23069 195.159.176.226 (30 Sep 2018 15:41:32 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 30 Sep 2018 15:41:32 +0000 (UTC) User-Agent: Mutt/1.10.1 (2018-07-13) Cc: 32874@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Sep 30 17:41:28 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1g6dqZ-0005v9-F3 for geb-bug-gnu-emacs@m.gmane.org; Sun, 30 Sep 2018 17:41:27 +0200 Original-Received: from localhost ([::1]:55902 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g6dsf-00005l-Th for geb-bug-gnu-emacs@m.gmane.org; Sun, 30 Sep 2018 11:43:37 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:58909) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g6dsB-0008Nq-Ns for bug-gnu-emacs@gnu.org; Sun, 30 Sep 2018 11:43:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g6ds6-0007u8-Jd for bug-gnu-emacs@gnu.org; Sun, 30 Sep 2018 11:43:07 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:55873) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1g6ds6-0007tu-Cs for bug-gnu-emacs@gnu.org; Sun, 30 Sep 2018 11:43:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1g6ds6-00064k-7v for bug-gnu-emacs@gnu.org; Sun, 30 Sep 2018 11:43:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 30 Sep 2018 15:43:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 32874 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 32874-submit@debbugs.gnu.org id=B32874.153832214923295 (code B ref 32874); Sun, 30 Sep 2018 15:43:02 +0000 Original-Received: (at 32874) by debbugs.gnu.org; 30 Sep 2018 15:42:29 +0000 Original-Received: from localhost ([127.0.0.1]:60130 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1g6drZ-00063f-9k for submit@debbugs.gnu.org; Sun, 30 Sep 2018 11:42:29 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:31272 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1g6drX-00063X-P7 for 32874@debbugs.gnu.org; Sun, 30 Sep 2018 11:42:28 -0400 Original-Received: (qmail 80435 invoked by uid 3782); 30 Sep 2018 15:42:26 -0000 Original-Received: from acm.muc.de (p5B14620D.dip0.t-ipconnect.de [91.20.98.13]) by colin.muc.de (tmda-ofmipd) with ESMTP; Sun, 30 Sep 2018 17:42:25 +0200 Original-Received: (qmail 8767 invoked by uid 1000); 30 Sep 2018 15:36:46 -0000 Content-Disposition: inline In-Reply-To: <837ej35tex.fsf@gnu.org> X-Delivery-Agent: TMDA/1.1.12 (Macallan) X-Primary-Address: acm@muc.de X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:150824 Archived-At: Hello, Eli. On Sun, Sep 30, 2018 at 10:35:50 +0300, Eli Zaretskii wrote: > > Date: Sat, 29 Sep 2018 20:41:13 +0000 > > Cc: 32874@debbugs.gnu.org > > From: Alan Mackenzie > > > I'd actually urge you to have a good look at > > > window-scroll-functions as well. (Follow mode already uses it, but > > > I think it could use it for quite a lot more.) This hook is called > > > when Emacs concludes that a window may need to be scrolled to bring > > > point into view. This is exactly where Follow mode wants to be > > > able to affect the decision of the display engine, right? I think > > > by making a few simple changes/extensions where this hook is > > > called, we could make the work of Follow mode quite a lot easier, > > > by letting it rely on the display engine instead of trying to > > > maneuver the display engine to do what it wants. > > I've had a look at window-scroll-functions, but I can't see what you > > must be seeing. Currently, the documentation warns against trying to > > influence the scrolling, saying "it probably won't work anyway". > But you don't want to scroll yourself, you just want to switch the > selected window and move point so that Emacs won't need to scroll. > AFAIU, follow-mode wants to kick in when point goes off the selected > window. And the call to window-scroll-functions is exactly the place > where the display engine decides it needs to scroll the window, but > didn't actually scroll it yet. So that looks like a good place to have > follow-mode do its thing. We might need to add some simple facility > for follow-mode to use, so that it could signal the display engine not > to scroll the window. Other than that, I think this possibility is > worth exploring. Follow-mode also needs to be active on explicit scrolling commands such as C-v. Also, after inserting a newline, subsequent windows need to be scrolled down. After either of these, follow-mode laboriously starts determining where all its windows have to start and end. There's nothing in the display engine to help in this process. > The advantage of using window-scroll-functions is that > pre-redisplay-function is called much more frequently, in most cases > follow-mode will need to do nothing at all. You probably already have > a logic for detecting when it should do something, but if you are > invoked from window-scroll-functions, most if not all of that logic > will be redundant. > > Maybe it would be relatively simple to introduce new functionality. > > Something like "scroll window so that window-end gets the given value". > I'm not sure I understand how this could help follow-mode. Please > elaborate. Currently when a middle or right hand window gets scrolled for any reason, follow-mode has to determine how to scroll windows to the left of it. It does this by making a first guess at a window-start, does set-window-start, then moves forward through the window to see how close window-end is to where it needs to be. If it's a line off, a different starting position is chosen, and so on, until window-start gets correctly placed. If there were a function set-window-end, the display engine itself could move back over the text lines to find window-start far more efficiently and directly than follow-mode can. -- Alan Mackenzie (Nuremberg, Germany).