mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.1.0726: redrawing specifically for conceal feature
Problem: Redrawing specifically for conceal feature. Solution: Use generic redrawing methods.
This commit is contained in:
19
src/edit.c
19
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 */
|
||||
|
@@ -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
|
||||
|
32
src/main.c
32
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();
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
|
49
src/screen.c
49
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)
|
||||
|
@@ -795,6 +795,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
726,
|
||||
/**/
|
||||
725,
|
||||
/**/
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user