bug-gnu-emacs
[Top][All Lists]
Advanced

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

Re: Emacs21 display bug in text mode: "flashing window"


From: Gerd Moellmann
Subject: Re: Emacs21 display bug in text mode: "flashing window"
Date: 23 Oct 2001 17:19:22 +0200
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1.50

"Stefan Monnier" <monnier+gnu.emacs.bug/news/@RUM.cs.yale.edu> writes:

> as soon as I do the C-x ^ Emacs crashes on an assertion failure.

Good hint.

The patch below fixes the assertion failure.  Does it also fix
the other problem?

*** dispnew.c   2001/10/23 14:49:24     1.289
--- dispnew.c   2001/10/23 15:09:14
***************
*** 3005,3012 ****
  
  
  /* Synchronize glyph pointers in the current matrix of window W with
!    the current frame matrix.  W must be full-width, and be on a tty
!    frame.  */
  
  static void
  sync_window_with_frame_matrix_rows (w)
--- 3005,3011 ----
  
  
  /* Synchronize glyph pointers in the current matrix of window W with
!    the current frame matrix.  */
  
  static void
  sync_window_with_frame_matrix_rows (w)
***************
*** 3014,3040 ****
  {
    struct frame *f = XFRAME (w->frame);
    struct glyph_row *window_row, *window_row_end, *frame_row;
  
!   /* Preconditions: W must be a leaf window and full-width.  Its frame
!      must have a frame matrix.  */
    xassert (NILP (w->hchild) && NILP (w->vchild));
-   xassert (WINDOW_FULL_WIDTH_P (w));
    xassert (!FRAME_WINDOW_P (f));
  
!   /* If W is a full-width window, glyph pointers in W's current matrix
!      have, by definition, to be the same as glyph pointers in the
!      corresponding frame matrix.  */
    window_row = w->current_matrix->rows;
    window_row_end = window_row + w->current_matrix->nrows;
    frame_row = f->current_matrix->rows + XFASTINT (w->top);
!   while (window_row < window_row_end)
      {
!       int area;
!       
!       for (area = LEFT_MARGIN_AREA; area <= LAST_AREA; ++area)
!       window_row->glyphs[area] = frame_row->glyphs[area];
! 
!       ++window_row, ++frame_row;
      }
  }
  
--- 3013,3043 ----
  {
    struct frame *f = XFRAME (w->frame);
    struct glyph_row *window_row, *window_row_end, *frame_row;
+   int area, left, right, x, width;
  
!   /* Preconditions: W must be a leaf window on a tty frame.  */
    xassert (NILP (w->hchild) && NILP (w->vchild));
    xassert (!FRAME_WINDOW_P (f));
  
!   left = margin_glyphs_to_reserve (w, 1, w->left_margin_width);
!   right = margin_glyphs_to_reserve (w, 1, w->right_margin_width);
!   x = w->current_matrix->matrix_x;
!   width = w->current_matrix->matrix_w;
! 
    window_row = w->current_matrix->rows;
    window_row_end = window_row + w->current_matrix->nrows;
    frame_row = f->current_matrix->rows + XFASTINT (w->top);
!   
!   for (; window_row < window_row_end; ++window_row, ++frame_row)
      {
!       window_row->glyphs[LEFT_MARGIN_AREA]
!       = frame_row->glyphs[0] + x;
!       window_row->glyphs[TEXT_AREA]
!       = window_row->glyphs[LEFT_MARGIN_AREA] + left;
!       window_row->glyphs[LAST_AREA]
!       = window_row->glyphs[LEFT_MARGIN_AREA] + width;
!       window_row->glyphs[RIGHT_MARGIN_AREA]
!       = window_row->glyphs[LAST_AREA] - right;
      }
  }
  




reply via email to

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