Patch 8.1.0372
Problem:    Screen updating slow when 'cursorline' is set.
Solution:   Only redraw the old and new cursor line, not all lines.
Files:      src/edit.c, src/move.c, src/screen.c, src/proto/screen.pro


*** ../vim-8.1.0371/src/edit.c  2018-08-08 22:08:28.326846653 +0200
--- src/edit.c  2018-09-12 21:39:50.838327555 +0200
***************
*** 1966,1972 ****
        if (pc_status == PC_STATUS_RIGHT)
            ++curwin->w_wcol;
        if (pc_status == PC_STATUS_RIGHT || pc_status == PC_STATUS_LEFT)
!           redrawWinline(curwin->w_cursor.lnum, FALSE);
        else
  #endif
            screen_puts(pc_bytes, pc_row - msg_scrolled, pc_col, pc_attr);
--- 1966,1972 ----
        if (pc_status == PC_STATUS_RIGHT)
            ++curwin->w_wcol;
        if (pc_status == PC_STATUS_RIGHT || pc_status == PC_STATUS_LEFT)
!           redrawWinline(curwin, curwin->w_cursor.lnum, FALSE);
        else
  #endif
            screen_puts(pc_bytes, pc_row - msg_scrolled, pc_col, pc_attr);
***************
*** 2017,2023 ****
      if (dollar_vcol >= 0)
      {
        dollar_vcol = -1;
!       redrawWinline(curwin->w_cursor.lnum, FALSE);
      }
  }
  
--- 2017,2023 ----
      if (dollar_vcol >= 0)
      {
        dollar_vcol = -1;
!       redrawWinline(curwin, curwin->w_cursor.lnum, FALSE);
      }
  }
  
***************
*** 7079,7085 ****
        linenr_T        lnum = spell_redraw_lnum;
  
        spell_redraw_lnum = 0;
!       redrawWinline(lnum, FALSE);
      }
  }
  
--- 7079,7085 ----
        linenr_T        lnum = spell_redraw_lnum;
  
        spell_redraw_lnum = 0;
!       redrawWinline(curwin, lnum, FALSE);
      }
  }
  
*** ../vim-8.1.0371/src/move.c  2018-07-10 15:07:11.779668824 +0200
--- src/move.c  2018-09-12 21:43:54.096174935 +0200
***************
*** 123,128 ****
--- 123,132 ----
      set_empty_rows(wp, done);
  }
  
+ #ifdef FEAT_SYN_HL
+ static linenr_T       last_cursorline = 0;
+ #endif
+ 
  /*
   * Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is
   * set.
***************
*** 140,146 ****
            && !pum_visible()
  # endif
            )
!       redraw_win_later(wp, SOME_VALID);
  }
  
  /*
--- 144,165 ----
            && !pum_visible()
  # endif
            )
!     {
! #ifdef FEAT_SYN_HL
!       if (!wp->w_p_rnu && wp->w_redr_type <= VALID && last_cursorline != 0)
!       {
!           // "last_cursorline" may be set for another window, worst case we
!           // redraw too much.  This is optimized for moving the cursor around
!           // in the same window.
!           redrawWinline(wp, last_cursorline, FALSE);
!           redrawWinline(wp, wp->w_cursor.lnum, FALSE);
!           last_cursorline = wp->w_cursor.lnum;
!           redraw_win_later(wp, VALID);
!       }
!       else
! #endif
!           redraw_win_later(wp, SOME_VALID);
!     }
  }
  
  /*
*** ../vim-8.1.0371/src/screen.c        2018-09-06 13:14:39.144722527 +0200
--- src/screen.c        2018-09-12 21:41:32.553424559 +0200
***************
*** 496,501 ****
--- 496,502 ----
   */
      void
  redrawWinline(
+     win_T     *wp,
      linenr_T  lnum,
      int               invalid UNUSED) /* window line height is invalid now */
  {
***************
*** 503,521 ****
      int               i;
  #endif
  
!     if (curwin->w_redraw_top == 0 || curwin->w_redraw_top > lnum)
!       curwin->w_redraw_top = lnum;
!     if (curwin->w_redraw_bot == 0 || curwin->w_redraw_bot < lnum)
!       curwin->w_redraw_bot = lnum;
!     redraw_later(VALID);
  
  #ifdef FEAT_FOLDING
      if (invalid)
      {
        /* A w_lines[] entry for this lnum has become invalid. */
!       i = find_wl_entry(curwin, lnum);
        if (i >= 0)
!           curwin->w_lines[i].wl_valid = FALSE;
      }
  #endif
  }
--- 504,522 ----
      int               i;
  #endif
  
!     if (wp->w_redraw_top == 0 || wp->w_redraw_top > lnum)
!       wp->w_redraw_top = lnum;
!     if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < lnum)
!       wp->w_redraw_bot = lnum;
!     redraw_win_later(wp, VALID);
  
  #ifdef FEAT_FOLDING
      if (invalid)
      {
        /* A w_lines[] entry for this lnum has become invalid. */
!       i = find_wl_entry(wp, lnum);
        if (i >= 0)
!           wp->w_lines[i].wl_valid = FALSE;
      }
  #endif
  }
*** ../vim-8.1.0371/src/proto/screen.pro        2018-06-16 15:32:34.460024472 
+0200
--- src/proto/screen.pro        2018-09-12 21:41:33.929412376 +0200
***************
*** 8,14 ****
  void redraw_buf_and_status_later(buf_T *buf, int type);
  int redraw_asap(int type);
  void redraw_after_callback(int call_update_screen);
! void redrawWinline(linenr_T lnum, int invalid);
  void reset_updating_screen(int may_resize_shell);
  void update_curbuf(int type);
  int update_screen(int type_arg);
--- 8,14 ----
  void redraw_buf_and_status_later(buf_T *buf, int type);
  int redraw_asap(int type);
  void redraw_after_callback(int call_update_screen);
! void redrawWinline(win_T *wp, linenr_T lnum, int invalid);
  void reset_updating_screen(int may_resize_shell);
  void update_curbuf(int type);
  int update_screen(int type_arg);
*** ../vim-8.1.0371/src/version.c       2018-09-12 20:29:05.479670601 +0200
--- src/version.c       2018-09-12 21:51:28.616197716 +0200
***************
*** 796,797 ****
--- 796,799 ----
  {   /* Add new patch number below this line */
+ /**/
+     372,
  /**/

-- 
Despite the cost of living, have you noticed how it remains so popular?

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui