forked from aniani/vim
patch 8.2.0945: cannot use "z=" when 'spell' is off
Problem: Cannot use "z=" when 'spell' is off. Solution: Make "z=" work even when 'spell' is off. (Christian Brabandt, Gary Johnson, closes #6227)
This commit is contained in:
parent
253ea9fa42
commit
152e79e94b
@ -9537,9 +9537,8 @@ spellbadword([{sentence}])
|
||||
echo spellbadword("the quik brown fox")
|
||||
< ['quik', 'bad'] ~
|
||||
|
||||
The spelling information for the current window is used. The
|
||||
'spell' option must be set and the value of 'spelllang' is
|
||||
used.
|
||||
The spelling information for the current window and the value
|
||||
of 'spelllang' are used.
|
||||
|
||||
Can also be used as a |method|: >
|
||||
GetText()->spellbadword()
|
||||
@ -9564,8 +9563,7 @@ spellsuggest({word} [, {max} [, {capital}]])
|
||||
although it may appear capitalized.
|
||||
|
||||
The spelling information for the current window is used. The
|
||||
'spell' option must be set and the values of 'spelllang' and
|
||||
'spellsuggest' are used.
|
||||
values of 'spelllang' and 'spellsuggest' are used.
|
||||
|
||||
Can also be used as a |method|: >
|
||||
GetWord()->spellsuggest()
|
||||
|
@ -7596,9 +7596,30 @@ f_spellbadword(typval_T *argvars UNUSED, typval_T *rettv)
|
||||
char_u *word = (char_u *)"";
|
||||
hlf_T attr = HLF_COUNT;
|
||||
int len = 0;
|
||||
#ifdef FEAT_SPELL
|
||||
int wo_spell_save = curwin->w_p_spell;
|
||||
|
||||
if (!curwin->w_p_spell)
|
||||
{
|
||||
did_set_spelllang(curwin);
|
||||
curwin->w_p_spell = TRUE;
|
||||
}
|
||||
|
||||
if (*curwin->w_s->b_p_spl == NUL)
|
||||
{
|
||||
emsg(_(e_no_spell));
|
||||
curwin->w_p_spell = wo_spell_save;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
{
|
||||
#ifdef FEAT_SPELL
|
||||
curwin->w_p_spell = wo_spell_save;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef FEAT_SPELL
|
||||
if (argvars[0].v_type == VAR_UNKNOWN)
|
||||
@ -7611,7 +7632,7 @@ f_spellbadword(typval_T *argvars UNUSED, typval_T *rettv)
|
||||
curwin->w_set_curswant = TRUE;
|
||||
}
|
||||
}
|
||||
else if (curwin->w_p_spell && *curbuf->b_s.b_p_spl != NUL)
|
||||
else if (*curbuf->b_s.b_p_spl != NUL)
|
||||
{
|
||||
char_u *str = tv_get_string_chk(&argvars[0]);
|
||||
int capcol = -1;
|
||||
@ -7633,6 +7654,7 @@ f_spellbadword(typval_T *argvars UNUSED, typval_T *rettv)
|
||||
}
|
||||
}
|
||||
}
|
||||
curwin->w_p_spell = wo_spell_save;
|
||||
#endif
|
||||
|
||||
list_append_string(rettv->vval.v_list, word, len);
|
||||
@ -7658,13 +7680,32 @@ f_spellsuggest(typval_T *argvars UNUSED, typval_T *rettv)
|
||||
int i;
|
||||
listitem_T *li;
|
||||
int need_capital = FALSE;
|
||||
int wo_spell_save = curwin->w_p_spell;
|
||||
|
||||
if (!curwin->w_p_spell)
|
||||
{
|
||||
did_set_spelllang(curwin);
|
||||
curwin->w_p_spell = TRUE;
|
||||
}
|
||||
|
||||
if (*curwin->w_s->b_p_spl == NUL)
|
||||
{
|
||||
emsg(_(e_no_spell));
|
||||
curwin->w_p_spell = wo_spell_save;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
{
|
||||
#ifdef FEAT_SPELL
|
||||
curwin->w_p_spell = wo_spell_save;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef FEAT_SPELL
|
||||
if (curwin->w_p_spell && *curwin->w_s->b_p_spl != NUL)
|
||||
if (*curwin->w_s->b_p_spl != NUL)
|
||||
{
|
||||
str = tv_get_string(&argvars[0]);
|
||||
if (argvars[1].v_type != VAR_UNKNOWN)
|
||||
@ -7701,6 +7742,7 @@ f_spellsuggest(typval_T *argvars UNUSED, typval_T *rettv)
|
||||
}
|
||||
ga_clear(&ga);
|
||||
}
|
||||
curwin->w_p_spell = wo_spell_save;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1581,6 +1581,9 @@ EXTERN char e_invcmd[] INIT(= N_("E476: Invalid command"));
|
||||
#if defined(UNIX) || defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
|
||||
EXTERN char e_isadir2[] INIT(= N_("E17: \"%s\" is a directory"));
|
||||
#endif
|
||||
#ifdef FEAT_SPELL
|
||||
EXTERN char e_no_spell[] INIT(= N_("E756: Spell checking is not possible"));
|
||||
#endif
|
||||
#ifdef FEAT_LIBCALL
|
||||
EXTERN char e_libcall[] INIT(= N_("E364: Library call failed for \"%s()\""));
|
||||
#endif
|
||||
|
@ -1225,7 +1225,7 @@ no_spell_checking(win_T *wp)
|
||||
if (!wp->w_p_spell || *wp->w_s->b_p_spl == NUL
|
||||
|| wp->w_s->b_langp.ga_len == 0)
|
||||
{
|
||||
emsg(_("E756: Spell checking is not enabled"));
|
||||
emsg(_(e_no_spell));
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
@ -471,9 +471,19 @@ spell_suggest(int count)
|
||||
int selected = count;
|
||||
int badlen = 0;
|
||||
int msg_scroll_save = msg_scroll;
|
||||
int wo_spell_save = curwin->w_p_spell;
|
||||
|
||||
if (no_spell_checking(curwin))
|
||||
if (!curwin->w_p_spell)
|
||||
{
|
||||
did_set_spelllang(curwin);
|
||||
curwin->w_p_spell = TRUE;
|
||||
}
|
||||
|
||||
if (*curwin->w_s->b_p_spl == NUL)
|
||||
{
|
||||
emsg(_(e_no_spell));
|
||||
return;
|
||||
}
|
||||
|
||||
if (VIsual_active)
|
||||
{
|
||||
@ -686,6 +696,7 @@ spell_suggest(int count)
|
||||
spell_find_cleanup(&sug);
|
||||
skip:
|
||||
vim_free(line);
|
||||
curwin->w_p_spell = wo_spell_save;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -99,11 +99,14 @@ foobar/?
|
||||
set spelllang=Xwords.spl
|
||||
call assert_equal(['foobar', 'rare'], spellbadword('foo foobar'))
|
||||
|
||||
" Typo should not be detected without the 'spell' option.
|
||||
" Typo should be detected even without the 'spell' option.
|
||||
set spelllang=en_gb nospell
|
||||
call assert_equal(['', ''], spellbadword('centre'))
|
||||
call assert_equal(['', ''], spellbadword('My bycycle.'))
|
||||
call assert_equal(['', ''], spellbadword('A sentence. another sentence'))
|
||||
call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.'))
|
||||
call assert_equal(['another', 'caps'], spellbadword('A sentence. another sentence'))
|
||||
|
||||
set spelllang=
|
||||
call assert_fails("call spellbadword('maxch')", 'E756:')
|
||||
|
||||
call delete('Xwords.spl')
|
||||
call delete('Xwords')
|
||||
@ -130,9 +133,9 @@ endfunc
|
||||
|
||||
" Test spellsuggest({word} [, {max} [, {capital}]])
|
||||
func Test_spellsuggest()
|
||||
" No suggestions when spell checking is not enabled.
|
||||
" Verify suggestions are given even when spell checking is not enabled.
|
||||
set nospell
|
||||
call assert_equal([], spellsuggest('marrch'))
|
||||
call assert_equal(['march', 'March'], spellsuggest('marrch', 2))
|
||||
|
||||
set spell
|
||||
|
||||
@ -163,6 +166,10 @@ func Test_spellsuggest()
|
||||
call assert_fails("call spellsuggest('maxch', [])", 'E745:')
|
||||
call assert_fails("call spellsuggest('maxch', 2, [])", 'E745:')
|
||||
|
||||
set spelllang=
|
||||
call assert_fails("call spellsuggest('maxch')", 'E756:')
|
||||
set spelllang&
|
||||
|
||||
set spell&
|
||||
endfunc
|
||||
|
||||
@ -617,6 +624,34 @@ func Test_zeq_crash()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" Check that z= works even when 'nospell' is set. This test uses one of the
|
||||
" tests in Test_spellsuggest_option_number() just to verify that z= basically
|
||||
" works and that "E756: Spell checking is not enabled" is not generated.
|
||||
func Test_zeq_nospell()
|
||||
new
|
||||
set nospell spellsuggest=1,best
|
||||
call setline(1, 'A baord')
|
||||
try
|
||||
norm $1z=
|
||||
call assert_equal('A board', getline(1))
|
||||
catch
|
||||
call assert_report("Caught exception: " . v:exception)
|
||||
endtry
|
||||
set spell& spellsuggest&
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" Check that "E756: Spell checking is not possible" is reported when z= is
|
||||
" executed and 'spelllang' is empty.
|
||||
func Test_zeq_no_spelllang()
|
||||
new
|
||||
set spelllang= spellsuggest=1,best
|
||||
call setline(1, 'A baord')
|
||||
call assert_fails('normal $1z=', 'E756:')
|
||||
set spelllang& spellsuggest&
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" Check handling a word longer than MAXWLEN.
|
||||
func Test_spell_long_word()
|
||||
set enc=utf-8
|
||||
|
@ -754,6 +754,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
945,
|
||||
/**/
|
||||
944,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user