From: Anders Lindgren <andlind@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>, Eli Zaretskii <eliz@gnu.org>
Cc: 16129@debbugs.gnu.org
Subject: bug#16129: 24.3.50; Emacs slow with follow-mode when buffer ends before last window
Date: Thu, 2 Jan 2014 14:55:59 +0100 [thread overview]
Message-ID: <CABr8ebaOj992z1tg_taR0=MmieoTRcTq9cEwogs9xtKM1t1Q1A@mail.gmail.com> (raw)
In-Reply-To: <CABr8ebZjVTg=v-T_NK=1gzahBC=yi+b+mT8wP28ndiPyLbUuhw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3897 bytes --]
Hi again!
In addition to the problems I originally reported, I realized today that
the modification also made follow-mode place windows incorrectly, which
indicates that some primitive display-related function returns incorrect
values.
Do you want me to report a new bug, or should we see this as a second
symptom?
You can verify this by doing the following steps:
emacs -Q
C-h t
M->
M-x follow-delete-other-windows-and-split RET
C-p
C-p
After the second C-p, the left window is recentered, which is shouldn't.
This typically occurs when follow-mode thinks the point is not visible in
any window, which probably is due to incorrect values being reported from
primitive functions. (For example, in bug #15957 `window-end' didn't honour
it's FORCE argument, since some display functions didn't mark the end value
as being dirty.)
I will try to track this down in more detail. However, I wanted to give you
a heads up since it's appears as though you are close to a release -- it
might take me a couple of days to find the problem, as I have very limited
time to spend on Emacs-related things.
Sincerely,
Anders Lindgren
On Fri, Dec 13, 2013 at 6:55 PM, Anders Lindgren <andlind@gmail.com> wrote:
> Hi!
>
> I agree that we would need to find out why the patch makes Emacs slow. (In
> fact, I only supplied the information about the internals of follow-mode to
> help you track down the problems with the slowdown.)
>
> However, I don't agree with Eli -- it is possible to place window-start at
> point-max! However, there is code in the display engine that explicitly
> recenters such windows, after a while, or when something happens. For
> example:
>
> emacs -Q
> C-x 3
> C-x o
> M-: (set-window-start (selected-window) (point-max)) RET
> C-x o
> M-<
> blablabla (type some text)
>
> As you type text in the left window at the beginning of the scratch
> buffer, the right window is recentered. Follow-mode needs its windows to
> stay put (even the empty ones), as this is essential in creating the
> illusion that a number of windows make up a very tall virtual window.
>
> When I originally wrote follow-mode (some 18 years ago), I suggested to
> the Emacs maintainers to add a feature to make the recentering of empty
> windows conditional, so that follow-mode could control this. However, at
> the time they were not interested so I continued with the current system,
> which has worked flawlessly since then.
>
> If you are interested in making the change in the display engine,
> follow-mode should of course be rewritten to use it. Otherwise, I suggest
> that we keep it as it is today -- solutions using overlays etc. don't
> appeal to me at all.
>
> -- Anders
>
>
>
> On Fri, Dec 13, 2013 at 5:38 PM, Stefan Monnier <monnier@iro.umontreal.ca>wrote:
>
>> > I am the original author of follow-mode, so I can share one interesting
>> > implementation detail. When the viewed buffer ends before the last
>> window,
>> > follow-mode tries to display this window without any content (by setting
>> > the window start to point-max). Unfortunately, the Emacs display engine
>> > always tries ensure that windows are not empty so it repositions it...
>> So,
>> > follow-mode hammers in its view of the world every chance it gets,
>> > currrently in post-command hook and window-scroll-functions.
>>
>> Hmm.. so we have 2 things to do:
>> 1- figure out why my patch slowed things down so much.
>> 2- change follow-mode to use a different approach. Maybe a good way is
>> to do the following: put window-point at point-max, and add an overlay
>> on window-start...point-max that makes the text invisible (with
>> a `window' property, so it's only invisible in that window).
>> Of course, maybe that won't work either. But hooking everywhere
>> doesn't sound like a good idea.
>>
>>
>> -- Stefab
>>
>
>
[-- Attachment #2: Type: text/html, Size: 5171 bytes --]
next prev parent reply other threads:[~2014-01-02 13:55 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-13 14:34 bug#16129: 24.3.50; Emacs slow with follow-mode when buffer ends before last window Anders Lindgren
2013-12-13 15:32 ` Eli Zaretskii
2013-12-13 15:36 ` Eli Zaretskii
2013-12-13 16:38 ` Stefan Monnier
2013-12-13 17:55 ` Anders Lindgren
2014-01-02 13:55 ` Anders Lindgren [this message]
2014-01-02 18:39 ` Anders Lindgren
2014-01-05 23:13 ` Anders Lindgren
2014-01-06 3:45 ` Eli Zaretskii
2014-01-06 8:20 ` Anders Lindgren
2014-01-06 16:33 ` Eli Zaretskii
2014-01-07 8:13 ` Anders Lindgren
2014-01-10 9:31 ` Eli Zaretskii
2014-01-10 18:52 ` Anders Lindgren
2014-01-10 19:00 ` Eli Zaretskii
2014-01-13 11:41 ` Anders Lindgren
2014-01-13 14:47 ` Stefan Monnier
2014-01-13 16:16 ` Eli Zaretskii
2014-01-14 12:34 ` Anders Lindgren
2014-01-14 16:25 ` Eli Zaretskii
2014-01-16 12:24 ` Anders Lindgren
2014-01-16 14:42 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CABr8ebaOj992z1tg_taR0=MmieoTRcTq9cEwogs9xtKM1t1Q1A@mail.gmail.com' \
--to=andlind@gmail.com \
--cc=16129@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=monnier@iro.umontreal.ca \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.