[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:1179]resize error of ediff frame



もりさん、ありがとうございます。

mouse faceの扱いは、確かに少し変わっていたみたいです。
xterm.cからsync upして、以下のように変更しました。

## mergin分のはみ出しが起きたときに発生するんですな。

from himi

Index: mw32term.c
===================================================================
RCS file: g:/repdev/Meadow/src/mw32term.c,v
retrieving revision 1.6
diff -c -r1.6 mw32term.c
*** mw32term.c	1999/04/30 19:01:31	1.6
--- mw32term.c	1999/05/12 00:28:01
***************
*** 2266,2277 ****
    FRAME_PTR f = XFRAME (WINDOW_FRAME (w));
    int i;
    int row = 0;
!   int left = w->left;
    int top = XFASTINT (w->top);
    int height = XFASTINT (w->height) - ! MINI_WINDOW_P (w);
    int width = window_internal_width (w);
    int *charstarts;
    int lastcol;
  
    /* Find the right row.  */
    for (i = 0;
--- 2266,2278 ----
    FRAME_PTR f = XFRAME (WINDOW_FRAME (w));
    int i;
    int row = 0;
!   int left = WINDOW_LEFT_MARGIN (w);
    int top = XFASTINT (w->top);
    int height = XFASTINT (w->height) - ! MINI_WINDOW_P (w);
    int width = window_internal_width (w);
    int *charstarts;
    int lastcol;
+   int maybe_next_line = 0;
  
    /* Find the right row.  */
    for (i = 0;
***************
*** 2281,2286 ****
--- 2282,2294 ----
        int linestart = FRAME_CURRENT_GLYPHS (f)->charstarts[top + i][left];
        if (linestart > pos)
  	break;
+       /* If the position sought is the end of the buffer,
+ 	 don't include the blank lines at the bottom of the window.  */
+       if (linestart == pos && pos == BUF_ZV (XBUFFER (w->buffer)))
+ 	{
+ 	  maybe_next_line = 1;
+ 	  break;
+ 	}
        if (linestart > 0)
  	row = i;
      }
***************
*** 2299,2305 ****
        else if (charstarts[left + i] > pos)
  	break;
        else if (charstarts[left + i] > 0)
! 	lastcol = left + i;
      }
  
    *rowp = row + top;
--- 2307,2322 ----
        else if (charstarts[left + i] > pos)
  	break;
        else if (charstarts[left + i] > 0)
! 	lastcol = left + i + 1;
!     }
! 
!   /* If we're looking for the end of the buffer,
!      and we didn't find it in the line we scanned,
!      use the start of the following line.  */
!   if (maybe_next_line)
!     {
!       row++;
!       lastcol = left;
      }
  
    *rowp = row + top;
***************
*** 2330,2343 ****
  
    for (i = mouse_face_beg_row; i <= mouse_face_end_row; i++)
      {
!       int column = (i == mouse_face_beg_row ? mouse_face_beg_col : w->left);
!       int endcolumn = (i == mouse_face_end_row ? mouse_face_end_col : w->left + width);
        endcolumn = min (endcolumn, FRAME_CURRENT_GLYPHS (f)->used[i]);
  
        /* If the cursor's in the text we are about to rewrite,
  	 turn the cursor off.  */
        if (i == curs_y
! 	  && curs_x >= mouse_face_beg_col - 1 && curs_x <= mouse_face_end_col)
  	{
  	  w32_display_cursor (f, 0);
  	  cursor_off = 1;
--- 2347,2363 ----
  
    for (i = mouse_face_beg_row; i <= mouse_face_end_row; i++)
      {
!       int column = (i == mouse_face_beg_row ? mouse_face_beg_col
! 		    : WINDOW_LEFT_MARGIN (w));
!       int endcolumn = (i == mouse_face_end_row ? mouse_face_end_col
! 		       : WINDOW_LEFT_MARGIN (w) + width);
        endcolumn = min (endcolumn, FRAME_CURRENT_GLYPHS (f)->used[i]);
  
        /* If the cursor's in the text we are about to rewrite,
  	 turn the cursor off.  */
        if (i == curs_y
! 	  && curs_x >= column - 1
! 	  && curs_x <= endcolumn)
  	{
  	  w32_display_cursor (f, 0);
  	  cursor_off = 1;