mirror of
https://github.com/neovim/neovim.git
synced 2025-10-05 09:26:30 +00:00
perf: only redraw concealed line if cursor has moved horizontally
Building upon #17889, this moves conceal redrawing logic into move.c, so that concealed line is only redrawn if cursor has moved horizontally.
This commit is contained in:
@@ -1480,8 +1480,6 @@ bool edit(int cmdchar, bool startln, long count)
|
||||
/// @param ready not busy with something
|
||||
static void ins_redraw(bool ready)
|
||||
{
|
||||
bool conceal_cursor_moved = false;
|
||||
|
||||
if (char_avail()) {
|
||||
return;
|
||||
}
|
||||
@@ -1504,7 +1502,6 @@ static void ins_redraw(bool ready)
|
||||
update_curswant();
|
||||
ins_apply_autocmds(EVENT_CURSORMOVEDI);
|
||||
}
|
||||
conceal_cursor_moved = true;
|
||||
curwin->w_last_cursormoved = curwin->w_cursor;
|
||||
}
|
||||
|
||||
@@ -1560,11 +1557,6 @@ static void ins_redraw(bool ready)
|
||||
curbuf->b_changed_invalid = false;
|
||||
}
|
||||
|
||||
if (curwin->w_p_cole > 0 && conceal_cursor_line(curwin)
|
||||
&& conceal_cursor_moved) {
|
||||
redrawWinline(curwin, curwin->w_cursor.lnum);
|
||||
}
|
||||
|
||||
pum_check_clear();
|
||||
if (must_redraw) {
|
||||
update_screen(0);
|
||||
|
@@ -96,12 +96,12 @@ static void comp_botline(win_T *wp)
|
||||
}
|
||||
|
||||
/// Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is set.
|
||||
/// Also when concealing is on and 'concealcursor' is not active.
|
||||
void redraw_for_cursorline(win_T *wp)
|
||||
FUNC_ATTR_NONNULL_ALL
|
||||
{
|
||||
if ((wp->w_p_rnu || win_cursorline_standout(wp))
|
||||
&& (wp->w_valid & VALID_CROW) == 0
|
||||
&& !pum_visible()) {
|
||||
if ((wp->w_valid & VALID_CROW) == 0 && !pum_visible()
|
||||
&& (wp->w_p_rnu || win_cursorline_standout(wp))) {
|
||||
// win_line() will redraw the number column and cursorline only.
|
||||
redraw_later(wp, VALID);
|
||||
}
|
||||
@@ -109,6 +109,7 @@ void redraw_for_cursorline(win_T *wp)
|
||||
|
||||
/// Redraw when w_virtcol changes and 'cursorcolumn' is set or 'cursorlineopt'
|
||||
/// contains "screenline".
|
||||
/// Also when concealing is on and 'concealcursor' is active.
|
||||
static void redraw_for_cursorcolumn(win_T *wp)
|
||||
FUNC_ATTR_NONNULL_ALL
|
||||
{
|
||||
@@ -121,6 +122,12 @@ static void redraw_for_cursorcolumn(win_T *wp)
|
||||
redraw_later(wp, VALID);
|
||||
}
|
||||
}
|
||||
// If the cursor moves horizontally when 'concealcursor' is active, then the
|
||||
// current line needs to be redrawn in order to calculate the correct
|
||||
// cursor position.
|
||||
if ((wp->w_valid & VALID_VIRTCOL) == 0 && wp->w_p_cole > 0 && conceal_cursor_line(wp)) {
|
||||
redrawWinline(wp, wp->w_cursor.lnum);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1288,13 +1288,6 @@ static void normal_redraw(NormalState *s)
|
||||
update_topline(curwin);
|
||||
validate_cursor();
|
||||
|
||||
// If the cursor moves horizontally when 'concealcursor' is active, then the
|
||||
// current line needs to be redrawn in order to calculate the correct
|
||||
// cursor position.
|
||||
if (curwin->w_p_cole > 0 && conceal_cursor_line(curwin)) {
|
||||
redrawWinline(curwin, curwin->w_cursor.lnum);
|
||||
}
|
||||
|
||||
if (VIsual_active) {
|
||||
update_curbuf(INVERTED); // update inverted part
|
||||
} else if (must_redraw) {
|
||||
|
Reference in New Issue
Block a user