aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-05-24 20:41:58 +0200
committerLuuk van Baal <luukvbaal@gmail.com>2023-05-25 11:24:22 +0200
commit50efdd6ccf1891392c048b92da5e5d123a30ff26 (patch)
tree7ad36d584cf0a1f6b6b28e04e60d916b91be4782
parentd2dc7cfa5b930a1ff68426f3d47809508ac7d392 (diff)
downloadrneovim-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.c5
-rw-r--r--src/nvim/edit.c4
-rw-r--r--test/functional/ui/spell_spec.lua35
-rw-r--r--test/old/testdir/test_spell.vim45
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 = [