aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-05-24 20:26:03 +0200
committerLuuk van Baal <luukvbaal@gmail.com>2023-05-25 11:24:22 +0200
commitd2dc7cfa5b930a1ff68426f3d47809508ac7d392 (patch)
tree468b4ada8e8ece847155fdbf97fa0bb4df9e3db8
parentad7cded1f3f40912d962796d6965dac17ecb97f0 (diff)
downloadrneovim-d2dc7cfa5b930a1ff68426f3d47809508ac7d392.tar.gz
rneovim-d2dc7cfa5b930a1ff68426f3d47809508ac7d392.tar.bz2
rneovim-d2dc7cfa5b930a1ff68426f3d47809508ac7d392.zip
vim-patch:9.0.0608: with spelling, deleting a full stop does not update next line
Problem: With spell checking, deleting a full stop at the end of a line does not update SpellCap at the start of the next line. Solution: Update the next line when characters have been deleted. Also when using undo. https://github.com/vim/vim/commit/26f09ea54b2c60abf21df42c60bdfc60eca17b0d Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r--src/nvim/change.c7
-rw-r--r--src/nvim/edit.c8
-rw-r--r--src/nvim/undo.c7
-rw-r--r--test/functional/ui/spell_spec.lua24
-rw-r--r--test/old/testdir/test_spell.vim8
5 files changed, 46 insertions, 8 deletions
diff --git a/src/nvim/change.c b/src/nvim/change.c
index f4969d0ca9..ebbb0d4db6 100644
--- a/src/nvim/change.c
+++ b/src/nvim/change.c
@@ -43,6 +43,7 @@
#include "nvim/plines.h"
#include "nvim/pos.h"
#include "nvim/search.h"
+#include "nvim/spell.h"
#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/textformat.h"
@@ -393,6 +394,12 @@ void changed_bytes(linenr_T lnum, colnr_T col)
{
changedOneline(curbuf, lnum);
changed_common(lnum, col, lnum + 1, 0);
+ // 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) {
+ redrawWinline(curwin, lnum + 1);
+ }
// notify any channels that are watching
buf_updates_send_changes(curbuf, lnum, 1, 1);
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index 612a1a1bda..c0f094453d 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -3395,14 +3395,6 @@ static bool ins_esc(long *count, int cmdchar, bool nomove)
check_spell_redraw();
- // When text has been changed in this 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)
- && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count) {
- redrawWinline(curwin, curwin->w_cursor.lnum + 1);
- }
-
int temp = curwin->w_cursor.col;
if (disabled_redraw) {
RedrawingDisabled--;
diff --git a/src/nvim/undo.c b/src/nvim/undo.c
index 00a3922a5b..1eb73d85d7 100644
--- a/src/nvim/undo.c
+++ b/src/nvim/undo.c
@@ -120,6 +120,7 @@
#include "nvim/path.h"
#include "nvim/pos.h"
#include "nvim/sha256.h"
+#include "nvim/spell.h"
#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/types.h"
@@ -2372,6 +2373,12 @@ static void u_undoredo(int undo, bool do_buf_event)
}
changed_lines(top + 1, 0, bot, newsize - oldsize, do_buf_event);
+ // When text has been changed, 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) && bot <= curbuf->b_ml.ml_line_count) {
+ redrawWinline(curwin, bot);
+ }
// Set the '[ mark.
if (top + 1 < curbuf->b_op_start.lnum) {
diff --git a/test/functional/ui/spell_spec.lua b/test/functional/ui/spell_spec.lua
index 5cfb85e431..800043b169 100644
--- a/test/functional/ui/spell_spec.lua
+++ b/test/functional/ui/spell_spec.lua
@@ -115,6 +115,30 @@ describe("'spell'", function()
{0:~ }|
|
]])
+ -- Deleting a full stop removes missing Cap in next line
+ feed('5Gddk$x')
+ screen:expect([[
+ This line has a {1:sepll} error. {2:and} missing caps and trailing spaces. |
+ {2:another} missing cap here. |
+ Not |
+ and her^e |
+ and here. |
+ {0:~ }|
+ {0:~ }|
+ |
+ ]])
+ -- Undo also updates the next line (go to command line to remove message)
+ feed('u:<Esc>')
+ screen:expect([[
+ This line has a {1:sepll} error. {2:and} missing caps and trailing spaces. |
+ {2:another} missing cap here. |
+ Not |
+ and here^. |
+ {2:and} here. |
+ {0:~ }|
+ {0:~ }|
+ |
+ ]])
end)
it('extmarks, "noplainbuffer" and syntax #20385 #23398', function()
diff --git a/test/old/testdir/test_spell.vim b/test/old/testdir/test_spell.vim
index 15c47881a9..c959e199d9 100644
--- a/test/old/testdir/test_spell.vim
+++ b/test/old/testdir/test_spell.vim
@@ -1018,6 +1018,14 @@ func Test_spell_screendump_spellcap()
call term_sendkeys(buf, "3GANot\<Esc>")
call VerifyScreenDump(buf, 'Test_spell_3', {})
+ " Deleting a full stop removes missing Cap in next line
+ call term_sendkeys(buf, "5Gddk$x")
+ call VerifyScreenDump(buf, 'Test_spell_4', {})
+
+ " Undo also updates the next line (go to command line to remove message)
+ call term_sendkeys(buf, "u:\<Esc>")
+ call VerifyScreenDump(buf, 'Test_spell_5', {})
+
" clean up
call StopVimInTerminal(buf)
call delete('XtestSpellCap')