]> granicus.if.org Git - vim/commitdiff
patch 8.0.0938: scrolling in terminal window is inefficient v8.0.0938
authorBram Moolenaar <Bram@vim.org>
Sun, 13 Aug 2017 20:14:17 +0000 (22:14 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 13 Aug 2017 20:14:17 +0000 (22:14 +0200)
Problem:    Scrolling in terminal window is inefficient.
Solution:   Use win_del_lines().

src/terminal.c
src/version.c

index 3171936b1968eb83753b1c4eda9729c0601d5b52..d4a45fb8cb6c2c8588854eae39c29d239e151c1c 100644 (file)
  * in tl_scrollback are no longer used.
  *
  * TODO:
- * - add a character in :ls output
- * - add 't' to mode()
- * - use win_del_lines() to make scroll-up efficient.
- * - Make StatusLineTerm adjust UserN highlighting like StatusLineNC does, see
- *   use of hightlight_stlnc[].
  * - implement term_setsize()
  * - add test for giving error for invalid 'termsize' value.
  * - support minimal size when 'termsize' is "rows*cols".
@@ -1495,11 +1490,21 @@ handle_damage(VTermRect rect, void *user)
 }
 
     static int
-handle_moverect(VTermRect dest UNUSED, VTermRect src UNUSED, void *user)
+handle_moverect(VTermRect dest, VTermRect src, void *user)
 {
     term_T     *term = (term_T *)user;
+    win_T      *wp;
 
-    /* TODO */
+    if (dest.start_col == src.start_col
+           && dest.end_col == src.end_col
+           && dest.start_row < src.start_row)
+       FOR_ALL_WINDOWS(wp)
+       {
+           if (wp->w_buffer == term->tl_buffer)
+               /* scrolling up is much more efficient when deleting lines */
+               win_del_lines(wp, dest.start_row,
+                                src.start_row - dest.start_row, FALSE, FALSE);
+       }
     redraw_buf_later(term->tl_buffer, NOT_VALID);
     return 1;
 }
index 36075d90d99cad3a574d03ff1c470f86fd8a49ee..a8b07dcbed01f5b65d0c5bd164352d51429b5aa7 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    938,
 /**/
     937,
 /**/