In window_update (dispnew.c), overlapping/overlapped rows are redrawn
if `changed_p' is non-zero.

          if (changed_p && rif->fix_overlapping_area)
            {
              redraw_overlapped_rows (w, yb);
              redraw_overlapping_rows (w, yb);
            }

but this variable is set when either the mode line or the header line
is updated.

      if (mode_line_row->mode_line_p && mode_line_row->enabled_p)
        {
          mode_line_row->y = yb;
          update_window_line (w, MATRIX_ROW_VPOS (mode_line_row,
                                                  desired_matrix),
                              &mouse_face_overwritten_p);
          changed_p = 1;
        }

So when a user moves the cursor vertically and the line number
displayed in the mode line is changed, the whole
overlapping/overlapped rows get redrawn.  It significantly degrades
performance of cursor movement for such an environment that text
drawing is not so fast.

Is it OK to not set `changed_p' for the case of mode/header line
updates?

                                     YAMAMOTO Mitsuharu
                                [EMAIL PROTECTED]


_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel

Reply via email to