changeset 15436:29f3d59bb6f0 v8.1.0726

patch 8.1.0726: redrawing specifically for conceal feature commit https://github.com/vim/vim/commit/535d5b653a1eddf49ee11dc9639c5355ef023301 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jan 11 20:45:36 2019 +0100 patch 8.1.0726: redrawing specifically for conceal feature Problem: Redrawing specifically for conceal feature. Solution: Use generic redrawing methods.
author Bram Moolenaar <Bram@vim.org>
date Fri, 11 Jan 2019 21:00:06 +0100
parents 739e0917d0b6
children 77349932500a
files src/edit.c src/gui.c src/main.c src/normal.c src/proto/screen.pro src/screen.c src/version.c src/window.c
diffstat 8 files changed, 37 insertions(+), 83 deletions(-) [+]
line wrap: on
line diff
--- a/src/edit.c
+++ b/src/edit.c
@@ -1745,23 +1745,24 @@ ins_redraw(
     }
 #endif
 
-    if (must_redraw)
-	update_screen(0);
-    else if (clear_cmdline || redraw_cmdline)
-	showmode();		/* clear cmdline and show mode */
-# if defined(FEAT_CONCEAL)
+#if defined(FEAT_CONCEAL)
     if ((conceal_update_lines
 	    && (conceal_old_cursor_line != conceal_new_cursor_line
 		|| conceal_cursor_line(curwin)))
 	    || need_cursor_line_redraw)
     {
 	if (conceal_old_cursor_line != conceal_new_cursor_line)
-	    update_single_line(curwin, conceal_old_cursor_line);
-	update_single_line(curwin, conceal_new_cursor_line == 0
-		       ? curwin->w_cursor.lnum : conceal_new_cursor_line);
+	    redrawWinline(curwin, conceal_old_cursor_line);
+	redrawWinline(curwin, conceal_new_cursor_line == 0
+			    ? curwin->w_cursor.lnum : conceal_new_cursor_line);
 	curwin->w_valid &= ~VALID_CROW;
-    }
-# endif
+	need_cursor_line_redraw = FALSE;
+    }
+#endif
+    if (must_redraw)
+	update_screen(0);
+    else if (clear_cmdline || redraw_cmdline)
+	showmode();		/* clear cmdline and show mode */
     showruler(FALSE);
     setcursor();
     emsg_on_display = FALSE;	/* may remove error message now */
--- a/src/gui.c
+++ b/src/gui.c
@@ -5166,8 +5166,6 @@ gui_update_screen(void)
 	last_cursormoved = curwin->w_cursor;
     }
 
-    update_screen(0);	/* may need to update the screen */
-    setcursor();
 # ifdef FEAT_CONCEAL
     if (conceal_update_lines
 	    && (conceal_old_cursor_line != conceal_new_cursor_line
@@ -5175,11 +5173,14 @@ gui_update_screen(void)
 		|| need_cursor_line_redraw))
     {
 	if (conceal_old_cursor_line != conceal_new_cursor_line)
-	    update_single_line(curwin, conceal_old_cursor_line);
-	update_single_line(curwin, conceal_new_cursor_line);
+	    redrawWinline(curwin, conceal_old_cursor_line);
+	redrawWinline(curwin, conceal_new_cursor_line);
 	curwin->w_valid &= ~VALID_CROW;
+	need_cursor_line_redraw = FALSE;
     }
 # endif
+    update_screen(0);	/* may need to update the screen */
+    setcursor();
     out_flush_cursor(TRUE, FALSE);
 }
 #endif
--- a/src/main.c
+++ b/src/main.c
@@ -1194,6 +1194,22 @@ main_loop(
 		last_cursormoved = curwin->w_cursor;
 	    }
 
+#if defined(FEAT_CONCEAL)
+	    if (conceal_update_lines
+		    && (conceal_old_cursor_line != conceal_new_cursor_line
+			|| conceal_cursor_line(curwin)
+			|| need_cursor_line_redraw))
+	    {
+		if (conceal_old_cursor_line != conceal_new_cursor_line
+			&& conceal_old_cursor_line
+						<= curbuf->b_ml.ml_line_count)
+		    redrawWinline(curwin, conceal_old_cursor_line);
+		redrawWinline(curwin, conceal_new_cursor_line);
+		curwin->w_valid &= ~VALID_CROW;
+		need_cursor_line_redraw = FALSE;
+	    }
+#endif
+
 	    /* Trigger TextChanged if b:changedtick differs. */
 	    if (!finish_op && has_textchanged()
 		    && curbuf->b_last_changedtick != CHANGEDTICK(curbuf))
@@ -1288,22 +1304,6 @@ main_loop(
 	    may_clear_sb_text();	/* clear scroll-back text on next msg */
 	    showruler(FALSE);
 
-#if defined(FEAT_CONCEAL)
-	    if (conceal_update_lines
-		    && (conceal_old_cursor_line != conceal_new_cursor_line
-			|| conceal_cursor_line(curwin)
-			|| need_cursor_line_redraw))
-	    {
-		mch_disable_flush();	/* Stop issuing gui_mch_flush(). */
-		if (conceal_old_cursor_line != conceal_new_cursor_line
-			&& conceal_old_cursor_line
-						<= curbuf->b_ml.ml_line_count)
-		    update_single_line(curwin, conceal_old_cursor_line);
-		update_single_line(curwin, conceal_new_cursor_line);
-		mch_enable_flush();
-		curwin->w_valid &= ~VALID_CROW;
-	    }
-#endif
 	    setcursor();
 	    cursor_on();
 
--- a/src/normal.c
+++ b/src/normal.c
@@ -8512,7 +8512,7 @@ n_opencmd(cmdarg_T *cap)
 	{
 #ifdef FEAT_CONCEAL
 	    if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum)
-		update_single_line(curwin, oldline);
+		redrawWinline(curwin, oldline);
 #endif
 	    /* When '#' is in 'cpoptions' ignore the count. */
 	    if (vim_strchr(p_cpo, CPO_HASH) != NULL)
--- a/src/proto/screen.pro
+++ b/src/proto/screen.pro
@@ -15,7 +15,6 @@ void update_curbuf(int type);
 int update_screen(int type_arg);
 int conceal_cursor_line(win_T *wp);
 void conceal_check_cursor_line(void);
-void update_single_line(win_T *wp, linenr_T lnum);
 void update_debug_sign(buf_T *buf, linenr_T lnum);
 void updateWindow(win_T *wp);
 int screen_get_current_line_off(void);
--- a/src/screen.c
+++ b/src/screen.c
@@ -927,55 +927,6 @@ conceal_check_cursor_line(void)
 	curs_columns(TRUE);
     }
 }
-
-    void
-update_single_line(win_T *wp, linenr_T lnum)
-{
-    int		row;
-    int		j;
-#ifdef SYN_TIME_LIMIT
-    proftime_T	syntax_tm;
-#endif
-
-    /* Don't do anything if the screen structures are (not yet) valid. */
-    if (!screen_valid(TRUE) || updating_screen)
-	return;
-
-    if (lnum >= wp->w_topline && lnum < wp->w_botline
-				 && foldedCount(wp, lnum, &win_foldinfo) == 0)
-    {
-#ifdef SYN_TIME_LIMIT
-	/* Set the time limit to 'redrawtime'. */
-	profile_setlimit(p_rdt, &syntax_tm);
-	syn_set_timeout(&syntax_tm);
-#endif
-	update_prepare();
-
-	row = 0;
-	for (j = 0; j < wp->w_lines_valid; ++j)
-	{
-	    if (lnum == wp->w_lines[j].wl_lnum)
-	    {
-		screen_start();	/* not sure of screen cursor */
-# ifdef FEAT_SEARCH_EXTRA
-		init_search_hl(wp);
-		prepare_search_hl(wp, lnum);
-# endif
-		win_line(wp, lnum, row, row + wp->w_lines[j].wl_size,
-								 FALSE, FALSE);
-		break;
-	    }
-	    row += wp->w_lines[j].wl_size;
-	}
-
-	update_finish();
-
-#ifdef SYN_TIME_LIMIT
-	syn_set_timeout(NULL);
-#endif
-    }
-    need_cursor_line_redraw = FALSE;
-}
 #endif
 
 #if defined(FEAT_SIGNS) || defined(PROTO)
--- a/src/version.c
+++ b/src/version.c
@@ -796,6 +796,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    726,
+/**/
     725,
 /**/
     724,
--- a/src/window.c
+++ b/src/window.c
@@ -4177,9 +4177,9 @@ win_goto(win_T *wp)
     win_enter(wp, TRUE);
 
 #ifdef FEAT_CONCEAL
-    /* Conceal cursor line in previous window, unconceal in current window. */
+    // Conceal cursor line in previous window, unconceal in current window.
     if (win_valid(owp) && owp->w_p_cole > 0 && !msg_scrolled)
-	update_single_line(owp, owp->w_cursor.lnum);
+	redrawWinline(owp, owp->w_cursor.lnum);
     if (curwin->w_p_cole > 0 && !msg_scrolled)
 	need_cursor_line_redraw = TRUE;
 #endif