forked from aniani/vim
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
|
#endif
|
||||||
|
|
||||||
if (must_redraw)
|
#if defined(FEAT_CONCEAL)
|
||||||
update_screen(0);
|
|
||||||
else if (clear_cmdline || redraw_cmdline)
|
|
||||||
showmode(); /* clear cmdline and show mode */
|
|
||||||
# if defined(FEAT_CONCEAL)
|
|
||||||
if ((conceal_update_lines
|
if ((conceal_update_lines
|
||||||
&& (conceal_old_cursor_line != conceal_new_cursor_line
|
&& (conceal_old_cursor_line != conceal_new_cursor_line
|
||||||
|| conceal_cursor_line(curwin)))
|
|| conceal_cursor_line(curwin)))
|
||||||
|| need_cursor_line_redraw)
|
|| need_cursor_line_redraw)
|
||||||
{
|
{
|
||||||
if (conceal_old_cursor_line != conceal_new_cursor_line)
|
if (conceal_old_cursor_line != conceal_new_cursor_line)
|
||||||
update_single_line(curwin, conceal_old_cursor_line);
|
redrawWinline(curwin, conceal_old_cursor_line);
|
||||||
update_single_line(curwin, conceal_new_cursor_line == 0
|
redrawWinline(curwin, conceal_new_cursor_line == 0
|
||||||
? curwin->w_cursor.lnum : conceal_new_cursor_line);
|
? curwin->w_cursor.lnum : conceal_new_cursor_line);
|
||||||
curwin->w_valid &= ~VALID_CROW;
|
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);
|
showruler(FALSE);
|
||||||
setcursor();
|
setcursor();
|
||||||
emsg_on_display = FALSE; /* may remove error message now */
|
emsg_on_display = FALSE; /* may remove error message now */
|
||||||
|
@@ -5166,8 +5166,6 @@ gui_update_screen(void)
|
|||||||
last_cursormoved = curwin->w_cursor;
|
last_cursormoved = curwin->w_cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
update_screen(0); /* may need to update the screen */
|
|
||||||
setcursor();
|
|
||||||
# ifdef FEAT_CONCEAL
|
# ifdef FEAT_CONCEAL
|
||||||
if (conceal_update_lines
|
if (conceal_update_lines
|
||||||
&& (conceal_old_cursor_line != conceal_new_cursor_line
|
&& (conceal_old_cursor_line != conceal_new_cursor_line
|
||||||
@@ -5175,11 +5173,14 @@ gui_update_screen(void)
|
|||||||
|| need_cursor_line_redraw))
|
|| need_cursor_line_redraw))
|
||||||
{
|
{
|
||||||
if (conceal_old_cursor_line != conceal_new_cursor_line)
|
if (conceal_old_cursor_line != conceal_new_cursor_line)
|
||||||
update_single_line(curwin, conceal_old_cursor_line);
|
redrawWinline(curwin, conceal_old_cursor_line);
|
||||||
update_single_line(curwin, conceal_new_cursor_line);
|
redrawWinline(curwin, conceal_new_cursor_line);
|
||||||
curwin->w_valid &= ~VALID_CROW;
|
curwin->w_valid &= ~VALID_CROW;
|
||||||
|
need_cursor_line_redraw = FALSE;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
update_screen(0); /* may need to update the screen */
|
||||||
|
setcursor();
|
||||||
out_flush_cursor(TRUE, FALSE);
|
out_flush_cursor(TRUE, FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
32
src/main.c
32
src/main.c
@@ -1194,6 +1194,22 @@ main_loop(
|
|||||||
last_cursormoved = curwin->w_cursor;
|
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. */
|
/* Trigger TextChanged if b:changedtick differs. */
|
||||||
if (!finish_op && has_textchanged()
|
if (!finish_op && has_textchanged()
|
||||||
&& curbuf->b_last_changedtick != CHANGEDTICK(curbuf))
|
&& curbuf->b_last_changedtick != CHANGEDTICK(curbuf))
|
||||||
@@ -1288,22 +1304,6 @@ main_loop(
|
|||||||
may_clear_sb_text(); /* clear scroll-back text on next msg */
|
may_clear_sb_text(); /* clear scroll-back text on next msg */
|
||||||
showruler(FALSE);
|
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();
|
setcursor();
|
||||||
cursor_on();
|
cursor_on();
|
||||||
|
|
||||||
|
@@ -8512,7 +8512,7 @@ n_opencmd(cmdarg_T *cap)
|
|||||||
{
|
{
|
||||||
#ifdef FEAT_CONCEAL
|
#ifdef FEAT_CONCEAL
|
||||||
if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum)
|
if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum)
|
||||||
update_single_line(curwin, oldline);
|
redrawWinline(curwin, oldline);
|
||||||
#endif
|
#endif
|
||||||
/* When '#' is in 'cpoptions' ignore the count. */
|
/* When '#' is in 'cpoptions' ignore the count. */
|
||||||
if (vim_strchr(p_cpo, CPO_HASH) != NULL)
|
if (vim_strchr(p_cpo, CPO_HASH) != NULL)
|
||||||
|
@@ -15,7 +15,6 @@ void update_curbuf(int type);
|
|||||||
int update_screen(int type_arg);
|
int update_screen(int type_arg);
|
||||||
int conceal_cursor_line(win_T *wp);
|
int conceal_cursor_line(win_T *wp);
|
||||||
void conceal_check_cursor_line(void);
|
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 update_debug_sign(buf_T *buf, linenr_T lnum);
|
||||||
void updateWindow(win_T *wp);
|
void updateWindow(win_T *wp);
|
||||||
int screen_get_current_line_off(void);
|
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);
|
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
|
#endif
|
||||||
|
|
||||||
#if defined(FEAT_SIGNS) || defined(PROTO)
|
#if defined(FEAT_SIGNS) || defined(PROTO)
|
||||||
|
@@ -795,6 +795,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
726,
|
||||||
/**/
|
/**/
|
||||||
725,
|
725,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -4177,9 +4177,9 @@ win_goto(win_T *wp)
|
|||||||
win_enter(wp, TRUE);
|
win_enter(wp, TRUE);
|
||||||
|
|
||||||
#ifdef FEAT_CONCEAL
|
#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)
|
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)
|
if (curwin->w_p_cole > 0 && !msg_scrolled)
|
||||||
need_cursor_line_redraw = TRUE;
|
need_cursor_line_redraw = TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user