Skip to content

Commit

Permalink
patch 8.2.4707: redrawing could be a bit more efficient
Browse files Browse the repository at this point in the history
Problem:    Redrawing could be a bit more efficient.
Solution:   Optimize redrawing. (closes #10105)
  • Loading branch information
zeertzjq authored and brammool committed Apr 7, 2022
1 parent 6a06940 commit 8c97960
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 24 deletions.
8 changes: 6 additions & 2 deletions src/change.c
Original file line number Diff line number Diff line change
Expand Up @@ -640,9 +640,13 @@ changed_common(
if (hasAnyFolding(wp))
set_topline(wp, wp->w_topline);
#endif
// Relative numbering may require updating more.
// If lines have been added or removed, relative numbering always
// requires a redraw.
if (wp->w_p_rnu && xtra != 0)
redraw_win_later(wp, SOME_VALID);
{
wp->w_last_cursor_lnum_rnu = 0;
redraw_win_later(wp, VALID);
}
#ifdef FEAT_SYN_HL
// Cursor line highlighting probably need to be updated with
// "VALID" if it's below the change.
Expand Down
39 changes: 17 additions & 22 deletions src/edit.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,14 +293,9 @@ edit(
conceal_check_cursor_line(cursor_line_was_concealed);
#endif

// Need to recompute the cursor position, it might move when the cursor
// is on a TAB or special character.
// ptr2cells() treats a TAB character as double-width.
if (ptr2cells(ml_get_cursor()) > 1)
{
curwin->w_valid &= ~VALID_VIRTCOL;
curs_columns(TRUE);
}
// need to position cursor again when on a TAB
if (gchar_cursor() == TAB)
curwin->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL);

/*
* Enable langmap or IME, indicated by 'iminsert'.
Expand Down Expand Up @@ -3149,21 +3144,20 @@ mb_replace_pop_ins(int cc)
replace_push(c);
break;
}

buf[0] = c;
for (i = 1; i < n; ++i)
buf[i] = replace_pop();
if (utf_iscomposing(utf_ptr2char(buf)))
ins_bytes_len(buf, n);
else
{
buf[0] = c;
for (i = 1; i < n; ++i)
buf[i] = replace_pop();
if (utf_iscomposing(utf_ptr2char(buf)))
ins_bytes_len(buf, n);
else
{
// Not a composing char, put it back.
for (i = n - 1; i >= 0; --i)
replace_push(buf[i]);
break;
}
// Not a composing char, put it back.
for (i = n - 1; i >= 0; --i)
replace_push(buf[i]);
break;
}

}
}

Expand Down Expand Up @@ -3702,8 +3696,9 @@ ins_esc(

State = NORMAL;
trigger_modechanged();
// need to position cursor again (e.g. when on a TAB )
changed_cline_bef_curs();
// need to position cursor again when on a TAB
if (gchar_cursor() == TAB)
curwin->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL);

setmouse();
#ifdef CURSOR_SHAPE
Expand Down
8 changes: 8 additions & 0 deletions src/testdir/dumps/Test_cursorcolumn_insert_on_tab_3.dump
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
|1+0&#ffffff0|2|3|4|5|6|7|8+0&#e0e0e08|9+0&#ffffff0| @65
|a| @5> |b| @65
|~+0#4040ff13&| @73
|~| @73
|~| @73
|~| @73
|~| @73
|-+2#0000000&@1| |(|i|n|s|e|r|t|)| |-@1| +0&&@42|2|,|2|-|8| @8|A|l@1|
8 changes: 8 additions & 0 deletions src/testdir/test_highlight.vim
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,14 @@ func Test_cursorcolumn_insert_on_tab()
call TermWait(buf)
call VerifyScreenDump(buf, 'Test_cursorcolumn_insert_on_tab_2', {})

call term_sendkeys(buf, "\<C-O>")
call TermWait(buf)
call VerifyScreenDump(buf, 'Test_cursorcolumn_insert_on_tab_3', {})

call term_sendkeys(buf, 'i')
call TermWait(buf)
call VerifyScreenDump(buf, 'Test_cursorcolumn_insert_on_tab_2', {})

call StopVimInTerminal(buf)
call delete('Xcuc_insert_on_tab')
endfunc
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -746,6 +746,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4707,
/**/
4706,
/**/
Expand Down

0 comments on commit 8c97960

Please sign in to comment.