diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-04-07 15:08:01 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-04-07 15:08:01 +0100 |
commit | 8c9796085071950f9a03ca0fe116608e4f86aac2 (patch) | |
tree | 0a7ccec814f261a3ee1a30d6ab4ff67fda734d57 | |
parent | 6a06940f8ae7283999c83ccdf268540220573105 (diff) | |
download | vim-git-8c9796085071950f9a03ca0fe116608e4f86aac2.tar.gz |
patch 8.2.4707: redrawing could be a bit more efficientv8.2.4707
Problem: Redrawing could be a bit more efficient.
Solution: Optimize redrawing. (closes #10105)
-rw-r--r-- | src/change.c | 8 | ||||
-rw-r--r-- | src/edit.c | 39 | ||||
-rw-r--r-- | src/testdir/dumps/Test_cursorcolumn_insert_on_tab_3.dump | 8 | ||||
-rw-r--r-- | src/testdir/test_highlight.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 41 insertions, 24 deletions
diff --git a/src/change.c b/src/change.c index afc32b724..bc9195be4 100644 --- a/src/change.c +++ b/src/change.c @@ -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. diff --git a/src/edit.c b/src/edit.c index c52583a8b..53e86ff18 100644 --- a/src/edit.c +++ b/src/edit.c @@ -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'. @@ -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; } + } } @@ -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 diff --git a/src/testdir/dumps/Test_cursorcolumn_insert_on_tab_3.dump b/src/testdir/dumps/Test_cursorcolumn_insert_on_tab_3.dump new file mode 100644 index 000000000..9d0cbed96 --- /dev/null +++ b/src/testdir/dumps/Test_cursorcolumn_insert_on_tab_3.dump @@ -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| diff --git a/src/testdir/test_highlight.vim b/src/testdir/test_highlight.vim index 51a25242f..3400052a7 100644 --- a/src/testdir/test_highlight.vim +++ b/src/testdir/test_highlight.vim @@ -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 diff --git a/src/version.c b/src/version.c index d0205d7e3..bd63e9317 100644 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4707, +/**/ 4706, /**/ 4705, |