[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling dow
From: |
npostavs |
Subject: |
bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t |
Date: |
Mon, 20 Feb 2017 12:42:58 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) |
Eli Zaretskii <eliz@gnu.org> writes:
>> Date: Sun, 19 Feb 2017 19:20:40 +0200
>> From: Eli Zaretskii <eliz@gnu.org>
>> Cc: alexanderm@web.de, 25792@debbugs.gnu.org
>>
>> > From: npostavs@users.sourceforge.net
>> > Date: Sun, 19 Feb 2017 11:59:22 -0500
>> > Cc: 25792@debbugs.gnu.org
>> >
>> > > Only scrolling down is affected. The issue first appeared when I
>> > > recompiled emacs roughly 1 week ago and has persisted over multiple
>> > > recompilations on 2 different laptops (both running Antergos & Xfce), so
>> > > my guess is that it's an issue in the current emacs master.
>> >
>> > This seems to be caused by [1: b9be4c14e8], it only happens when the
>> > window has partial lines (i.e., (zerop (cadr (cl-floor
>> > (window-screen-lines)))) is non-nil). Not sure how
>> > show-trailing-whitespace affects this, but it does.
>>
>> My guess would be that show-trailing-whitespace causes an additional
>> redisplay cycle, due to its post-command-hook.
>
> If you invoke trace-redisplay and then run the recipe, you will see
> that there are two kinds of redisplay cycles: one that calls
> try_scrolling, the other that doesn't. So there are 2 different paths
> through redisplay, and they don't behave the same under these
> conditions.
The difference seems to be that try_window returns -1 in the case where
we correctly stay out of the margin, but 1 in the case where we cross
into it. I tried adding a partial_line_height call, but it's not giving
the right answer. The move_it_to (&it, ZV, -1, it.last_visible_y, -1,
MOVE_TO_POS | MOVE_TO_Y) call doesn't stop at last_visible_y, it goes to
the end of buffer, so the returned partial height is a very large number
(approx 6500 in my test).
modified src/xdisp.c
@@ -17389,9 +17389,10 @@ try_window (Lisp_Object window, struct text_pos pos,
int flags)
/* rms: considering make_cursor_line_fully_visible_p here
seems to give wrong results. We don't want to recenter
when the last line is partly visible, we want to allow
that case to be handled in the usual way. */
- || w->cursor.y > it.last_visible_y - this_scroll_margin - 1)
+ || w->cursor.y > (it.last_visible_y - partial_line_height (&it)
+ - this_scroll_margin - 1))
{
w->cursor.vpos = -1;
clear_glyph_matrix (w->desired_matrix);
return -1;
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t, Alexander Miller, 2017/02/19
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t, npostavs, 2017/02/19
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t, Eli Zaretskii, 2017/02/19
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t, Eli Zaretskii, 2017/02/19
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t,
npostavs <=
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t, Eli Zaretskii, 2017/02/20
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t, npostavs, 2017/02/20
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t, Eli Zaretskii, 2017/02/20
- bug#25792: 26.0.50; Scroll-margin working incorrectly when scrolling down if show-trailing-whitespace is t, npostavs, 2017/02/24