mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:9.0.0590: after exiting Insert mode spelling not checked in next line
Problem: After exiting Insert mode spelling is not checked in the next
line.
Solution: When spelling is enabled redraw the next line after exiting Insert
mode in case the spell highlight needs updating.
ee09fcc9b6
Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
parent
bff67c9fbe
commit
ad7cded1f3
@ -1203,12 +1203,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
|
||||
draw_color_col = advance_color_col(VCOL_HLC, &color_cols);
|
||||
}
|
||||
|
||||
if (wp->w_p_spell
|
||||
&& !has_fold
|
||||
&& !end_fill
|
||||
&& *wp->w_s->b_p_spl != NUL
|
||||
&& !GA_EMPTY(&wp->w_s->b_langp)
|
||||
&& *(char **)(wp->w_s->b_langp.ga_data) != NULL) {
|
||||
if (!has_fold && !end_fill && spell_check_window(wp)) {
|
||||
// Prepare for spell checking.
|
||||
has_spell = true;
|
||||
extra_check = true;
|
||||
|
@ -53,6 +53,7 @@
|
||||
#include "nvim/popupmenu.h"
|
||||
#include "nvim/pos.h"
|
||||
#include "nvim/search.h"
|
||||
#include "nvim/spell.h"
|
||||
#include "nvim/state.h"
|
||||
#include "nvim/strings.h"
|
||||
#include "nvim/syntax.h"
|
||||
@ -3394,6 +3395,14 @@ 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--;
|
||||
|
@ -1189,11 +1189,19 @@ bool spell_valid_case(int wordflags, int treeflags)
|
||||
|| (wordflags & WF_ONECAP) != 0));
|
||||
}
|
||||
|
||||
// Returns true if spell checking is not enabled.
|
||||
/// Return true if spell checking is enabled for "wp".
|
||||
bool spell_check_window(win_T *wp)
|
||||
{
|
||||
return wp->w_p_spell
|
||||
&& *wp->w_s->b_p_spl != NUL
|
||||
&& wp->w_s->b_langp.ga_len > 0
|
||||
&& *(char **)(wp->w_s->b_langp.ga_data) != NULL;
|
||||
}
|
||||
|
||||
/// Return true and give an error if spell checking is not enabled.
|
||||
bool no_spell_checking(win_T *wp)
|
||||
{
|
||||
if (!wp->w_p_spell || *wp->w_s->b_p_spl == NUL
|
||||
|| GA_EMPTY(&wp->w_s->b_langp)) {
|
||||
if (!wp->w_p_spell || *wp->w_s->b_p_spl == NUL || GA_EMPTY(&wp->w_s->b_langp)) {
|
||||
emsg(_(e_no_spell));
|
||||
return true;
|
||||
}
|
||||
|
@ -103,6 +103,18 @@ describe("'spell'", function()
|
||||
{0:~ }|
|
||||
|
|
||||
]])
|
||||
-- After adding word missing Cap in next line is updated
|
||||
feed('3GANot<Esc>')
|
||||
screen:expect([[
|
||||
This line has a {1:sepll} error. {2:and} missing caps and trailing spaces. |
|
||||
{2:another} missing cap here. |
|
||||
No^t |
|
||||
and here. |
|
||||
|
|
||||
{2:and} here. |
|
||||
{0:~ }|
|
||||
|
|
||||
]])
|
||||
end)
|
||||
|
||||
it('extmarks, "noplainbuffer" and syntax #20385 #23398', function()
|
||||
|
@ -1014,6 +1014,10 @@ func Test_spell_screendump_spellcap()
|
||||
let buf = RunVimInTerminal('-S XtestSpellCap', {'rows': 8})
|
||||
call VerifyScreenDump(buf, 'Test_spell_2', {})
|
||||
|
||||
" After adding word missing Cap in next line is updated
|
||||
call term_sendkeys(buf, "3GANot\<Esc>")
|
||||
call VerifyScreenDump(buf, 'Test_spell_3', {})
|
||||
|
||||
" clean up
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('XtestSpellCap')
|
||||
|
Loading…
Reference in New Issue
Block a user