# HG changeset patch # User Bram Moolenaar # Date 1547236806 -3600 # Node ID 29f3d59bb6f0bbc1f3e7a94a301eb46391c24636 # Parent 739e0917d0b6406cac9ecc3a27de9867611de322 patch 8.1.0726: redrawing specifically for conceal feature commit https://github.com/vim/vim/commit/535d5b653a1eddf49ee11dc9639c5355ef023301 Author: Bram Moolenaar 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. diff --git a/src/edit.c b/src/edit.c --- 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 */ diff --git a/src/gui.c b/src/gui.c --- 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 --- 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 --- 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 --- 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 --- 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 --- 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 --- 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