diff options
author | Luuk van Baal <luukvbaal@gmail.com> | 2023-05-24 20:41:58 +0200 |
---|---|---|
committer | Luuk van Baal <luukvbaal@gmail.com> | 2023-05-25 11:24:22 +0200 |
commit | 50efdd6ccf1891392c048b92da5e5d123a30ff26 (patch) | |
tree | 7ad36d584cf0a1f6b6b28e04e60d916b91be4782 | |
parent | d2dc7cfa5b930a1ff68426f3d47809508ac7d392 (diff) | |
download | rneovim-50efdd6ccf1891392c048b92da5e5d123a30ff26.tar.gz rneovim-50efdd6ccf1891392c048b92da5e5d123a30ff26.tar.bz2 rneovim-50efdd6ccf1891392c048b92da5e5d123a30ff26.zip |
vim-patch:9.0.0664: bad redrawing with spell checking, using "C" and "$" in 'cpo'
Problem: Bad redrawing with spell checking, using "C" and "$" in 'cpo'.
Solution: Do not redraw the next line when "$" is in 'cpo'. (closes vim/vim#11285)
https://github.com/vim/vim/commit/f3ef026c9897f1d2e3fba47166a4771d507dae91
Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r-- | src/nvim/change.c | 5 | ||||
-rw-r--r-- | src/nvim/edit.c | 4 | ||||
-rw-r--r-- | test/functional/ui/spell_spec.lua | 35 | ||||
-rw-r--r-- | test/old/testdir/test_spell.vim | 45 |
4 files changed, 67 insertions, 22 deletions
diff --git a/src/nvim/change.c b/src/nvim/change.c index ebbb0d4db6..9e1767c2f3 100644 --- a/src/nvim/change.c +++ b/src/nvim/change.c @@ -397,7 +397,10 @@ void changed_bytes(linenr_T lnum, colnr_T col) // When text has been changed at the end of the line, possibly the start of // the next line may have SpellCap that should be removed or it needs to be // displayed. Schedule the next line for redrawing just in case. - if (spell_check_window(curwin) && lnum < curbuf->b_ml.ml_line_count) { + // Don't do this when displaying '$' at the end of changed text. + if (spell_check_window(curwin) + && lnum < curbuf->b_ml.ml_line_count + && vim_strchr(p_cpo, CPO_DOLLAR) == NULL) { redrawWinline(curwin, lnum + 1); } // notify any channels that are watching diff --git a/src/nvim/edit.c b/src/nvim/edit.c index c0f094453d..d6d5ff8ac7 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -1527,8 +1527,8 @@ void edit_unputchar(void) } } -// Called when p_dollar is set: display a '$' at the end of the changed text -// Only works when cursor is in the line that changes. +/// Called when "$" is in 'cpoptions': display a '$' at the end of the changed +/// text. Only works when cursor is in the line that changes. void display_dollar(colnr_T col_arg) { colnr_T col = col_arg < 0 ? 0 : col_arg; diff --git a/test/functional/ui/spell_spec.lua b/test/functional/ui/spell_spec.lua index 800043b169..7f11b06f78 100644 --- a/test/functional/ui/spell_spec.lua +++ b/test/functional/ui/spell_spec.lua @@ -27,6 +27,7 @@ describe("'spell'", function() [6] = {foreground = Screen.colors.Red}, [7] = {foreground = Screen.colors.Blue}, [8] = {foreground = Screen.colors.Blue, special = Screen.colors.Red, undercurl = true}, + [9] = {bold = true}, }) end) @@ -141,6 +142,40 @@ describe("'spell'", function() ]]) end) + -- oldtest: Test_spell_compatible() + it([[redraws properly when using "C" and "$" is in 'cpo']], function() + exec([=[ + call setline(1, [ + \ "test "->repeat(20), + \ "", + \ "end", + \ ]) + set spell cpo+=$ + ]=]) + feed('51|C') + screen:expect([[ + {2:test} test test test test test test test test test ^test test test test test test | + test test test test$ | + | + {2:end} | + {0:~ }| + {0:~ }| + {0:~ }| + {9:-- INSERT --} | + ]]) + feed('x') + screen:expect([[ + {2:test} test test test test test test test test test x^est test test test test test | + test test test test$ | + | + {2:end} | + {0:~ }| + {0:~ }| + {0:~ }| + {9:-- INSERT --} | + ]]) + end) + it('extmarks, "noplainbuffer" and syntax #20385 #23398', function() exec('set filetype=c') exec('syntax on') diff --git a/test/old/testdir/test_spell.vim b/test/old/testdir/test_spell.vim index c959e199d9..14d6ce30c4 100644 --- a/test/old/testdir/test_spell.vim +++ b/test/old/testdir/test_spell.vim @@ -972,28 +972,12 @@ func Test_spell_screendump() \ ]) set spell spelllang=en_nz END - call writefile(lines, 'XtestSpell') - let buf = RunVimInTerminal('-S XtestSpell', {'rows': 8}) - call VerifyScreenDump(buf, 'Test_spell_1', {}) - - let lines =<< trim END - call setline(1, [ - \ "This is some text without any spell errors. Everything", - \ "should just be black, nothing wrong here.", - \ "", - \ "This line has a sepll error. and missing caps.", - \ "And and this is the the duplication.", - \ "with missing caps here.", - \ ]) - set spell spelllang=en_nz - END - call writefile(lines, 'XtestSpell') + call writefile(lines, 'XtestSpell', 'D') let buf = RunVimInTerminal('-S XtestSpell', {'rows': 8}) call VerifyScreenDump(buf, 'Test_spell_1', {}) " clean up call StopVimInTerminal(buf) - call delete('XtestSpell') endfunc func Test_spell_screendump_spellcap() @@ -1010,7 +994,7 @@ func Test_spell_screendump_spellcap() \ ]) set spell spelllang=en END - call writefile(lines, 'XtestSpellCap') + call writefile(lines, 'XtestSpellCap', 'D') let buf = RunVimInTerminal('-S XtestSpellCap', {'rows': 8}) call VerifyScreenDump(buf, 'Test_spell_2', {}) @@ -1028,7 +1012,30 @@ func Test_spell_screendump_spellcap() " clean up call StopVimInTerminal(buf) - call delete('XtestSpellCap') +endfunc + +func Test_spell_compatible() + CheckScreendump + + let lines =<< trim END + call setline(1, [ + \ "test "->repeat(20), + \ "", + \ "end", + \ ]) + set spell cpo+=$ + END + call writefile(lines, 'XtestSpellComp', 'D') + let buf = RunVimInTerminal('-S XtestSpellComp', {'rows': 8}) + + call term_sendkeys(buf, "51|C") + call VerifyScreenDump(buf, 'Test_spell_compatible_1', {}) + + call term_sendkeys(buf, "x") + call VerifyScreenDump(buf, 'Test_spell_compatible_2', {}) + + " clean up + call StopVimInTerminal(buf) endfunc let g:test_data_aff1 = [ |