patch 8.1.1838: there is :spellwrong and :spellgood but not :spellrare
Problem: There is :spellwrong and :spellgood but not :spellrare.
Solution: Add :spellrare. (Martin Tournoij, closes #4291)
diff --git a/src/spellfile.c b/src/spellfile.c
index 778a4b2..f34d9ba 100644
--- a/src/spellfile.c
+++ b/src/spellfile.c
@@ -6125,28 +6125,31 @@
/*
* ":[count]spellgood {word}"
- * ":[count]spellwrong {word}"
+ * ":[count]spellwrong {word}"
* ":[count]spellundo {word}"
+ * ":[count]spellrare {word}"
*/
void
ex_spell(exarg_T *eap)
{
- spell_add_word(eap->arg, (int)STRLEN(eap->arg), eap->cmdidx == CMD_spellwrong,
+ spell_add_word(eap->arg, (int)STRLEN(eap->arg),
+ eap->cmdidx == CMD_spellwrong ? SPELL_ADD_BAD :
+ eap->cmdidx == CMD_spellrare ? SPELL_ADD_RARE : SPELL_ADD_GOOD,
eap->forceit ? 0 : (int)eap->line2,
eap->cmdidx == CMD_spellundo);
}
/*
- * Add "word[len]" to 'spellfile' as a good or bad word.
+ * Add "word[len]" to 'spellfile' as a good, rare or bad word.
*/
void
spell_add_word(
char_u *word,
int len,
- int bad,
- int idx, /* "zG" and "zW": zero, otherwise index in
- 'spellfile' */
- int undo) /* TRUE for "zug", "zuG", "zuw" and "zuW" */
+ int what, // SPELL_ADD_ values
+ int idx, // "zG" and "zW": zero, otherwise index in
+ // 'spellfile'
+ int undo) // TRUE for "zug", "zuG", "zuw" and "zuW"
{
FILE *fd = NULL;
buf_T *buf = NULL;
@@ -6213,7 +6216,7 @@
fname = fnamebuf;
}
- if (bad || undo)
+ if (what == SPELL_ADD_BAD || undo)
{
/* When the word appears as good word we need to remove that one,
* since its flags sort before the one with WF_BANNED. */
@@ -6280,8 +6283,10 @@
semsg(_(e_notopen), fname);
else
{
- if (bad)
+ if (what == SPELL_ADD_BAD)
fprintf(fd, "%.*s/!\n", len, word);
+ else if (what == SPELL_ADD_RARE)
+ fprintf(fd, "%.*s/?\n", len, word);
else
fprintf(fd, "%.*s\n", len, word);
fclose(fd);