emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Truncating scroll runs that copy to where we copied to


From: YAMAMOTO Mitsuharu
Subject: Re: Truncating scroll runs that copy to where we copied to
Date: Tue, 22 Nov 2011 15:22:48 +0900
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)

>>>>> On Tue, 22 Nov 2011 01:04:45 -0500, Eli Zaretskii <address@hidden> said:

> FWIW, this code was not touched since Emacs 21.1 was released.  So
> evidently the effects of this issue are quite subtle in practice.

That code had not taken effect for most cases (especially when there's
no partially visible row at the bottom) until I made the following
fix:

2011-05-21  YAMAMOTO Mitsuharu  <address@hidden>

        * dispnew.c (scrolling_window): Don't exclude the case that the
        last enabled row in the desired matrix touches the bottom boundary.

=== modified file 'src/dispnew.c'
*** src/dispnew.c       2011-05-12 07:07:06 +0000
--- src/dispnew.c       2011-05-21 02:15:34 +0000
***************
*** 4330,4352 ****
  
    first_old = first_new = i;
  
!   /* Set last_new to the index + 1 of the last enabled row in the
!      desired matrix.  */
    i = first_new + 1;
!   while (i < desired_matrix->nrows - 1
!        && MATRIX_ROW (desired_matrix, i)->enabled_p
!        && MATRIX_ROW_BOTTOM_Y (MATRIX_ROW (desired_matrix, i)) <= yb)
!     ++i;
  
!   if (!MATRIX_ROW (desired_matrix, i)->enabled_p)
!     return 0;
  
    last_new = i;
  
!   /* Set last_old to the index + 1 of the last enabled row in the
!      current matrix.  We don't look at the enabled flag here because
!      we plan to reuse part of the display even if other parts are
!      disabled.  */
    i = first_old + 1;
    while (i < current_matrix->nrows - 1)
      {
--- 4330,4358 ----
  
    first_old = first_new = i;
  
!   /* Set last_new to the index + 1 of the row that reaches the
!      bottom boundary in the desired matrix.  Give up if we find a
!      disabled row before we reach the bottom boundary.  */
    i = first_new + 1;
!   while (i < desired_matrix->nrows - 1)
!     {
!       int bottom;
  
!       if (!MATRIX_ROW (desired_matrix, i)->enabled_p)
!       return 0;
!       bottom = MATRIX_ROW_BOTTOM_Y (MATRIX_ROW (desired_matrix, i));
!       if (bottom <= yb)
!       ++i;
!       if (bottom >= yb)
!       break;
!     }
  
    last_new = i;
  
!   /* Set last_old to the index + 1 of the row that reaches the bottom
!      boundary in the current matrix.  We don't look at the enabled
!      flag here because we plan to reuse part of the display even if
!      other parts are disabled.  */
    i = first_old + 1;
    while (i < current_matrix->nrows - 1)
      {

That explains people (including I) did not notice the problem for a
long time.

                                     YAMAMOTO Mitsuharu
                                address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]