diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-04-01 20:37:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-01 20:37:45 +0800 |
commit | fce0d54eb2bcfff6903649ab093603dcd8f21f23 (patch) | |
tree | 2367f938b1e7efea4850f4dea8dbb4ca6ef6192e /src | |
parent | 377e87521157947c384d470a63927719b8c73ad7 (diff) | |
parent | ef595e9b93c3841511d8511e11b001e4162a2998 (diff) | |
download | rneovim-fce0d54eb2bcfff6903649ab093603dcd8f21f23.tar.gz rneovim-fce0d54eb2bcfff6903649ab093603dcd8f21f23.tar.bz2 rneovim-fce0d54eb2bcfff6903649ab093603dcd8f21f23.zip |
Merge pull request #17953 from zeertzjq/vim-8.2.4660
vim-patch:8.2.4660: cursorcolumn is sometimes not correct
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/edit.c | 10 | ||||
-rw-r--r-- | src/nvim/testdir/test_highlight.vim | 22 |
2 files changed, 29 insertions, 3 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index a2687ada73..da0b577056 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -390,9 +390,13 @@ static void insert_enter(InsertState *s) trigger_modechanged(); stop_insert_mode = false; - // Need to recompute the cursor position, it might move when the cursor is - // on a TAB or special character. - curs_columns(curwin, true); + // 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(get_cursor_pos_ptr()) > 1) { + curwin->w_valid &= ~VALID_VIRTCOL; + curs_columns(curwin, true); + } // Enable langmap or IME, indicated by 'iminsert'. // Note that IME may enabled/disabled without us noticing here, thus the diff --git a/src/nvim/testdir/test_highlight.vim b/src/nvim/testdir/test_highlight.vim index 6387ec62af..5588e515e1 100644 --- a/src/nvim/testdir/test_highlight.vim +++ b/src/nvim/testdir/test_highlight.vim @@ -597,6 +597,28 @@ func Test_cursorline_with_visualmode() call delete('Xtest_cursorline_with_visualmode') endfunc +func Test_cursorcolumn_insert_on_tab() + CheckScreendump + + let lines =<< trim END + call setline(1, ['123456789', "a\tb"]) + set cursorcolumn + call cursor(2, 2) + END + call writefile(lines, 'Xcuc_insert_on_tab') + + let buf = RunVimInTerminal('-S Xcuc_insert_on_tab', #{rows: 8}) + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_cursorcolumn_insert_on_tab_1', {}) + + 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 + func Test_cursorcolumn_callback() CheckScreendump CheckFeature timers |