Subject: bug#18545: 24.4.50: Bug - forward-line inside with-selected-window

From: martin rudalics <[email-masked]>
Date: Sun, 28 Sep 2014 11:33:36 +0200

>> But after 28 times point moves which is even less understandable.
 >
 > I don't think this is relevant.  It could be related to
 > blink-cursor-mode

... always turned off here ...

 > or some other feature that triggers a more thorough
 > redisplay.  (Try typing "M-x", for example.)  The code part that seems
 > to be involved in this is an optimization, so when it is not taken,
 > you don't see the problem.

OK.  But the only thing I do here is leaning on the <down> button.

 > Can you show all the values of MATRIX_ROW_BOTTOM_Y that are examined
 > in this loop, after we determine that new_vpos should be 426:
 >
 > 	  row = MATRIX_FIRST_TEXT_ROW (w->desired_matrix);
 > 	  while (MATRIX_ROW_BOTTOM_Y (row) < new_vpos)
 > 	    ++row;

Using

	  while (MATRIX_ROW_BOTTOM_Y (row) < new_vpos)
	    {
	      ++row;
	      Vdebug_on_message = Fcons (Fcons (make_number (row->y), make_number (new_vpos)),
					 Vdebug_on_message);
	    }

and nreverse on the value of Vdebug_on_message gets me a repeated
pattern of

(32 . 426) (48 . 426) (64 . 426) (80 . 426) (96 . 426) (112 . 426) (128
. 426) (144 . 426) (160 . 426) (176 . 426) (192 . 426) (208 . 426) (224
. 426) (240 . 426) (256 . 426) (272 . 426) (288 . 426) (304 . 426) (320
. 426) (336 . 426) (352 . 426) (368 . 426) (384 . 426) (400 . 426) (416
. 426)

 >> I don't
 >> understand cursor_row_fully_visible_p much.
 >
 > Which part of it do you not understand?

Why it should return 1 in these two cases

   if (!MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row))
     return 1;

and

   if (row->height >= window_height)
     {
       if (!force_p || MINI_WINDOW_P (w)
	  || w->vscroll || w->cursor.vpos == 0)
	return 1;
     }

martin