From: Eli Zaretskii <eliz@gnu.org>
To: Alan Mackenzie <acm@muc.de>
Cc: monnier@IRO.UMontreal.CA, emacs-devel@gnu.org
Subject: Re: Unfreezing the display during auto-repeated scrolling. [ Was: Aborting display. Is this possible? ]
Date: Sun, 26 Oct 2014 22:20:46 +0200 [thread overview]
Message-ID: <83a94i4m75.fsf@gnu.org> (raw)
In-Reply-To: <20141026200313.GE4397@acm.acm>
> Date: Sun, 26 Oct 2014 20:03:13 +0000
> Cc: monnier@IRO.UMontreal.CA, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
>
> > You cannot possibly know, on this low level, which code will use the
> > "not for display" functions, even if today they are only used in a
> > context where ignoring font-lock faces might be OK.
>
> The contract of xdisp.c says explicitly that the only visible display
> function is redisplay, and this has no IT parameters. So any IT with
> not_for_display set should be "safe" if it is defined outside of xdisp.c
No, that's wrong, because subroutines of redisplay_internal call the
"not-for-display" functions in many places, and they certainly do NOT
expect that those function behave differently, in terms of pixel
metrics and coordinates, from the "real" display. E.g., if a series
of move_it_* calls with a certain goal winds up at some pixel
coordinates within the current window, the code expects to find itself
at the same place when it actually displays the text. If this
condition is violated (because move_it_* functions ignore font-lock
faces), then all kinds of subtle breakage will ensue.
> > You already marked as "not for display" line-pixel-height, which must
> > be accurate in the results it returns, since otherwise it will violate
> > its contract. Likewise in resize_mini_window (which is definitely "for
> > display"), redisplay_internal (likewise), etc. OTOH, displaying
> > strings (e.g., as part of mode-line display) will never bump into
> > font-lock faces, so setting this flag there is not useful.
>
> Sorry, I'd left unnecessary not_for_display's set. I've cleared out
> xdisp.c, such that the only function which sets not_for_display is
> pos_visible_p.
That's also wrong: that function is a base for many APIs, specifically
the posn-at-* functions, that many features use and depend on. You
cannot violate their accuracy.
> The other functions which set not_for_display are
> (i) window_scroll_pixel_based (window.c);
> (ii) Fvertical_motion (indent.c).
Fvertical_motion is called in many places. Martin worked very hard to
make window and frame redisplay be accurate to a single pixel; you are
now going to ruin all that.
> > So if we go this way, we are digging a hole for ourselves -- it is an
> > impossible maintenance burden to have functions that don't exactly do
> > what they say they do under some circumstances.
>
> Yes. But the current implementation doesn't work very well. I'm trying
> to fix it, because it's irritating. I think I've made good progress. I
> can't see any other approach to fixing it at the moment.
I do, at least two of them, and I pointed them out. In any case, if
there's no good solution for a problem, it certainly doesn't mean we
should compromise with a not-so-good one.
> > You should only make changes in window_scroll_* functions, ...
>
> I honestly can't see how I could achieve what's wanted if I restrict
> myself to window.c.
Please tell what prevents you from doing that.
> > And I still don't understand why writing a simple "fast-scroll"
> > function in Lisp, which just moves point N lines forward or backward,
> > is not a better solution. It's certainly easier and has exactly zero
> > impact on our infrastructure.
>
> That's precisely how Fscroll_up and Fscroll_down work.
No, they don't. If they did, you wouldn't need to disable
fontification, because moving point doesn't need it.
What Fscroll_down and Fscroll_up do is move the _window_start_, and
then figure out whether point is still visible after that. When you
move point first, all this is not needed, especially if you don't care
that point will move slightly less or more than a screenful.
next prev parent reply other threads:[~2014-10-26 20:20 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-19 14:17 Aborting display. Is this possible? Alan Mackenzie
2014-10-19 14:32 ` David Kastrup
2014-10-19 14:54 ` Eli Zaretskii
2014-10-19 14:50 ` Eli Zaretskii
2014-10-19 15:42 ` Alan Mackenzie
2014-10-19 18:09 ` Eli Zaretskii
2014-10-20 11:09 ` Alan Mackenzie
2014-10-20 11:30 ` David Kastrup
2014-10-20 12:00 ` Alan Mackenzie
2014-10-20 15:15 ` Eli Zaretskii
2014-10-20 15:12 ` Eli Zaretskii
2014-10-20 16:56 ` Stefan Monnier
2014-10-20 17:10 ` Eli Zaretskii
2014-10-20 17:40 ` Eli Zaretskii
2014-10-20 18:57 ` Alan Mackenzie
2014-10-20 19:24 ` Eli Zaretskii
2014-10-20 21:08 ` Alan Mackenzie
2014-10-21 8:09 ` David Kastrup
2014-10-21 10:58 ` Alan Mackenzie
2014-10-21 11:04 ` David Kastrup
2014-10-21 14:25 ` Stefan Monnier
2014-10-21 14:01 ` Stefan Monnier
2014-10-21 15:35 ` Eli Zaretskii
2014-10-21 16:27 ` Stefan Monnier
2014-10-22 18:28 ` Stephen Leake
2014-10-22 20:10 ` Stefan Monnier
2014-10-21 17:14 ` Alan Mackenzie
2014-10-21 18:00 ` Eli Zaretskii
2014-10-21 18:38 ` Alan Mackenzie
2014-10-21 18:43 ` Eli Zaretskii
2014-10-21 19:42 ` Eli Zaretskii
2014-10-26 12:43 ` Unfreezing the display during auto-repeated scrolling. [ Was: Aborting display. Is this possible? ] Alan Mackenzie
2014-10-26 16:45 ` Eli Zaretskii
2014-10-26 20:03 ` Alan Mackenzie
2014-10-26 20:20 ` Eli Zaretskii [this message]
2014-10-26 20:42 ` Stefan Monnier
2014-10-26 22:15 ` Unfreezing the display during auto-repeated scrolling Alan Mackenzie
2014-10-27 1:03 ` Stefan Monnier
2014-10-27 14:28 ` Unfreezing the display during auto-repeated scrolling. Simpler approach Alan Mackenzie
2014-10-27 16:51 ` Eli Zaretskii
2014-10-27 19:13 ` David Engster
2014-10-27 19:26 ` Eli Zaretskii
2014-10-27 19:36 ` David Engster
2014-10-27 19:38 ` Alan Mackenzie
2014-10-27 21:38 ` Stefan Monnier
2014-10-28 18:10 ` Alan Mackenzie
2014-10-29 0:57 ` Stefan Monnier
2014-10-29 14:14 ` Eli Zaretskii
2014-10-29 14:52 ` Alan Mackenzie
2014-10-29 15:37 ` Eli Zaretskii
2014-10-29 16:59 ` Stefan Monnier
2014-10-29 21:25 ` Alan Mackenzie
2014-10-30 1:49 ` Stefan Monnier
2014-10-30 22:09 ` Alan Mackenzie
2014-10-31 3:06 ` Stefan Monnier
2014-10-31 7:55 ` Eli Zaretskii
2014-10-31 14:04 ` Stefan Monnier
2014-11-21 15:44 ` Alan Mackenzie
2014-11-23 9:51 ` Tassilo Horn
2014-11-23 10:40 ` Alan Mackenzie
2014-11-23 19:44 ` Tassilo Horn
2014-11-23 22:04 ` Alan Mackenzie
2014-11-24 11:34 ` Tassilo Horn
2014-11-24 11:53 ` David Kastrup
2014-11-24 16:00 ` Alan Mackenzie
2014-11-24 14:37 ` Stefan Monnier
2014-11-24 16:08 ` Alan Mackenzie
2014-11-24 17:44 ` Stefan Monnier
2014-10-27 3:36 ` Unfreezing the display during auto-repeated scrolling Eli Zaretskii
2014-10-27 10:05 ` Alan Mackenzie
2014-10-27 16:48 ` Eli Zaretskii
2014-10-27 22:46 ` Alan Mackenzie
2014-10-28 0:22 ` Stefan Monnier
2014-10-27 3:33 ` Unfreezing the display during auto-repeated scrolling. [ Was: Aborting display. Is this possible? ] Eli Zaretskii
2014-10-21 18:01 ` Aborting display. Is this possible? Stefan Monnier
2014-10-21 15:40 ` Eli Zaretskii
2014-10-21 17:00 ` Michael Welsh Duggan
2014-10-21 18:25 ` Alan Mackenzie
2014-10-20 1:59 ` Stefan Monnier
2014-10-20 2:45 ` Eli Zaretskii
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=83a94i4m75.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=acm@muc.de \
--cc=emacs-devel@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.