summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-01-11 20:45:36 +0100
committerBram Moolenaar <Bram@vim.org>2019-01-11 20:45:36 +0100
commit535d5b653a1eddf49ee11dc9639c5355ef023301 (patch)
tree108a023a948f57b7620d2cad3c4931c58f21706c
parent465e8b5985908596261cef9d671024ed8ded1ce3 (diff)
downloadvim-git-535d5b653a1eddf49ee11dc9639c5355ef023301.tar.gz
patch 8.1.0726: redrawing specifically for conceal featurev8.1.0726
Problem: Redrawing specifically for conceal feature. Solution: Use generic redrawing methods.
-rw-r--r--src/edit.c19
-rw-r--r--src/gui.c9
-rw-r--r--src/main.c32
-rw-r--r--src/normal.c2
-rw-r--r--src/proto/screen.pro1
-rw-r--r--src/screen.c49
-rw-r--r--src/version.c2
-rw-r--r--src/window.c4
8 files changed, 36 insertions, 82 deletions
diff --git a/src/edit.c b/src/edit.c
index bd6f606bb..33e0e6708 100644
--- 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;
+ need_cursor_line_redraw = FALSE;
}
-# endif
+#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 */
diff --git a/src/gui.c b/src/gui.c
index 0b911b314..8c35119b4 100644
--- 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
diff --git a/src/main.c b/src/main.c
index 2f8f0523f..7c8014c83 100644
--- 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();
diff --git a/src/normal.c b/src/normal.c
index 9ee0eeffb..c973fa12e 100644
--- 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)
diff --git a/src/proto/screen.pro b/src/proto/screen.pro
index 2e5f2e0be..b78796e74 100644
--- 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);
diff --git a/src/screen.c b/src/screen.c
index 926a09083..9b976ffaf 100644
--- 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)
diff --git a/src/version.c b/src/version.c
index 743712d02..c7d63f194 100644
--- 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,
diff --git a/src/window.c b/src/window.c
index e67aeeabd..5989aed4b 100644
--- 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