aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/buffer.c32
-rw-r--r--src/nvim/eval.c20
-rw-r--r--src/nvim/ex_cmds.c10
-rw-r--r--src/nvim/ex_cmds2.c76
-rw-r--r--src/nvim/ex_docmd.c18
-rw-r--r--src/nvim/ex_getln.c4
-rw-r--r--src/nvim/fileio.c32
-rw-r--r--src/nvim/hardcopy.c24
-rw-r--r--src/nvim/indent.c4
-rw-r--r--src/nvim/indent_c.c302
-rw-r--r--src/nvim/keymap.c3
-rw-r--r--src/nvim/macros.h8
-rw-r--r--src/nvim/main.c15
-rw-r--r--src/nvim/mbyte.c37
-rw-r--r--src/nvim/normal.c2
-rw-r--r--src/nvim/ops.c6
-rw-r--r--src/nvim/option.c23
-rw-r--r--src/nvim/option_defs.h4
-rw-r--r--src/nvim/os_unix.c9
-rw-r--r--src/nvim/path.c4
-rw-r--r--src/nvim/path.h1
-rw-r--r--src/nvim/regexp.c2
-rw-r--r--src/nvim/regexp_defs.h2
-rw-r--r--src/nvim/syntax.c35
-rw-r--r--src/nvim/tempfile.c2
-rw-r--r--src/nvim/term.c2
-rw-r--r--src/nvim/testdir/Makefile2
-rw-r--r--src/nvim/testdir/test100.in2
-rw-r--r--src/nvim/testdir/test12.in1
-rw-r--r--src/nvim/testdir/test15.in1
-rw-r--r--src/nvim/testdir/test17.in4
-rw-r--r--src/nvim/testdir/test24.inbin1301 -> 1265 bytes
-rw-r--r--src/nvim/testdir/test29.in1
-rw-r--r--src/nvim/testdir/test3.in64
-rw-r--r--src/nvim/testdir/test3.ok50
-rw-r--r--src/nvim/testdir/test30.in7
-rw-r--r--src/nvim/testdir/test32.in2
-rw-r--r--src/nvim/testdir/test44.in2
-rw-r--r--src/nvim/testdir/test49.in2
-rw-r--r--src/nvim/testdir/test61.in1
-rw-r--r--src/nvim/testdir/test70.in1
-rw-r--r--src/nvim/testdir/test72.in2
-rw-r--r--src/nvim/testdir/test73.in1
-rw-r--r--src/nvim/testdir/test74.in2
-rw-r--r--src/nvim/testdir/test78.in2
-rw-r--r--src/nvim/testdir/test8.in2
-rw-r--r--src/nvim/testdir/test85.in1
-rw-r--r--src/nvim/testdir/test89.in2
-rw-r--r--src/nvim/testdir/test91.in1
-rw-r--r--src/nvim/testdir/test91.ok4
-rw-r--r--src/nvim/testdir/test94.in1
-rw-r--r--src/nvim/testdir/test95.in2
-rw-r--r--src/nvim/testdir/test99.in2
-rw-r--r--src/nvim/testdir/test_breakindent.in2
-rw-r--r--src/nvim/undo.c2
-rw-r--r--src/nvim/version.c26
-rw-r--r--src/nvim/window.c1
57 files changed, 535 insertions, 335 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index f84e25cdfb..8327f3c836 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -1758,7 +1758,7 @@ buflist_findpat (
FOR_ALL_BUFFERS(buf) {
if (buf->b_p_bl == find_listed
&& (!diffmode || diff_mode_buf(buf))
- && buflist_match(prog, buf) != NULL) {
+ && buflist_match(prog, buf, false) != NULL) {
if (curtab_only) {
/* Ignore the match if the buffer is not open in
* the current tab. */
@@ -1852,7 +1852,7 @@ int ExpandBufnames(char_u *pat, int *num_file, char_u ***file, int options)
FOR_ALL_BUFFERS(buf) {
if (!buf->b_p_bl) /* skip unlisted buffers */
continue;
- p = buflist_match(prog, buf);
+ p = buflist_match(prog, buf, p_wic);
if (p != NULL) {
if (round == 1)
++count;
@@ -1885,26 +1885,27 @@ int ExpandBufnames(char_u *pat, int *num_file, char_u ***file, int options)
#ifdef HAVE_BUFLIST_MATCH
-/*
- * Check for a match on the file name for buffer "buf" with regprog "prog".
- */
-static char_u *buflist_match(regprog_T *prog, buf_T *buf)
+/// Check for a match on the file name for buffer "buf" with regprog "prog".
+///
+/// @param ignore_case When TRUE, ignore case. Use 'fic' otherwise.
+static char_u *buflist_match(regprog_T *prog, buf_T *buf, bool ignore_case)
{
char_u *match;
/* First try the short file name, then the long file name. */
- match = fname_match(prog, buf->b_sfname);
- if (match == NULL)
- match = fname_match(prog, buf->b_ffname);
+ match = fname_match(prog, buf->b_sfname, ignore_case);
+ if (match == NULL) {
+ match = fname_match(prog, buf->b_ffname, ignore_case);
+ }
return match;
}
-/*
- * Try matching the regexp in "prog" with file name "name".
- * Return "name" when there is a match, NULL when not.
- */
-static char_u *fname_match(regprog_T *prog, char_u *name)
+/// Try matching the regexp in "prog" with file name "name".
+///
+/// @param ignore_case When TRUE, ignore case. Use 'fileignorecase' otherwise.
+/// @return "name" when there is a match, NULL when not.
+static char_u *fname_match(regprog_T *prog, char_u *name, bool ignore_case)
{
char_u *match = NULL;
char_u *p;
@@ -1912,7 +1913,8 @@ static char_u *fname_match(regprog_T *prog, char_u *name)
if (name != NULL) {
regmatch.regprog = prog;
- regmatch.rm_ic = p_fic; /* ignore case when 'fileignorecase' is set */
+ // Ignore case when 'fileignorecase' or the argument is set.
+ regmatch.rm_ic = p_fic || ignore_case;
if (vim_regexec(&regmatch, name, (colnr_T)0))
match = name;
else {
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 71cb83e566..d058e6ccae 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -6652,7 +6652,7 @@ char_u *get_function_name(expand_T *xp, int idx)
if (name != NULL)
return name;
}
- if (++intidx < (int)(sizeof(functions) / sizeof(struct fst))) {
+ if (++intidx < (int)ARRAY_SIZE(functions)) {
STRCPY(IObuff, functions[intidx].f_name);
STRCAT(IObuff, "(");
if (functions[intidx].f_max_argc == 0)
@@ -6695,7 +6695,7 @@ find_internal_func (
)
{
int first = 0;
- int last = (int)(sizeof(functions) / sizeof(struct fst)) - 1;
+ int last = (int)ARRAY_SIZE(functions) - 1;
/*
* Find the function name in the table. Binary search.
@@ -9603,7 +9603,8 @@ static void f_getregtype(typval_T *argvars, typval_T *rettv)
*/
static void f_gettabvar(typval_T *argvars, typval_T *rettv)
{
- tabpage_T *tp;
+ win_T *oldcurwin;
+ tabpage_T *tp, *oldtabpage;
dictitem_T *v;
char_u *varname;
int done = FALSE;
@@ -9614,16 +9615,25 @@ static void f_gettabvar(typval_T *argvars, typval_T *rettv)
varname = get_tv_string_chk(&argvars[1]);
tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
if (tp != NULL && varname != NULL) {
+ /* Set tp to be our tabpage, temporarily. Also set the window to the
+ * first window in the tabpage, otherwise the window is not valid. */
+ switch_win(&oldcurwin, &oldtabpage, tp->tp_firstwin, tp, TRUE);
+
/* look up the variable */
- v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE);
+ /* Let gettabvar({nr}, "") return the "t:" dictionary. */
+ v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 't', varname, FALSE);
if (v != NULL) {
copy_tv(&v->di_tv, rettv);
done = TRUE;
}
+
+ /* restore previous notion of curwin */
+ restore_win(oldcurwin, oldtabpage, TRUE);
}
- if (!done && argvars[2].v_type != VAR_UNKNOWN)
+ if (!done && argvars[2].v_type != VAR_UNKNOWN) {
copy_tv(&argvars[2], rettv);
+ }
}
/*
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index 049934d680..a8d2f5589e 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -1294,14 +1294,6 @@ do_shell (
}
starttermcap(); /* start termcap if not done by wait_return() */
-
- /*
- * In an Amiga window redrawing is caused by asking the window size.
- * If we got an interrupt this will not work. The chance that the
- * window size is wrong is very small, but we need to redraw the
- * screen. Don't do this if ':' hit in wait_return(). THIS IS UGLY
- * but it saves an extra redraw.
- */
}
/* display any error messages now */
@@ -4954,7 +4946,7 @@ int find_help_tags(char_u *arg, int *num_matches, char_u ***matches, int keep_la
* Recognize a few exceptions to the rule. Some strings that contain '*'
* with "star". Otherwise '*' is recognized as a wildcard.
*/
- for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; )
+ for (i = (int)ARRAY_SIZE(mtable); --i >= 0; )
if (STRCMP(arg, mtable[i]) == 0) {
STRCPY(d, rtable[i]);
break;
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index fa78047a46..072972d24e 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -3291,3 +3291,79 @@ static void script_host_do_range(char *name, exarg_T *eap)
(void)eval_call_provider(name, "do_range", args);
}
+/*
+ * ":drop"
+ * Opens the first argument in a window. When there are two or more arguments
+ * the argument list is redefined.
+ */
+void ex_drop(exarg_T *eap)
+{
+ int split = FALSE;
+ buf_T *buf;
+
+ /*
+ * Check if the first argument is already being edited in a window. If
+ * so, jump to that window.
+ * We would actually need to check all arguments, but that's complicated
+ * and mostly only one file is dropped.
+ * This also ignores wildcards, since it is very unlikely the user is
+ * editing a file name with a wildcard character.
+ */
+ do_arglist(eap->arg, AL_SET, 0);
+
+ /*
+ * Expanding wildcards may result in an empty argument list. E.g. when
+ * editing "foo.pyc" and ".pyc" is in 'wildignore'. Assume that we
+ * already did an error message for this.
+ */
+ if (ARGCOUNT == 0)
+ return;
+
+ if (cmdmod.tab)
+ {
+ /* ":tab drop file ...": open a tab for each argument that isn't
+ * edited in a window yet. It's like ":tab all" but without closing
+ * windows or tabs. */
+ ex_all(eap);
+ }
+ else
+ {
+ /* ":drop file ...": Edit the first argument. Jump to an existing
+ * window if possible, edit in current window if the current buffer
+ * can be abandoned, otherwise open a new window. */
+ buf = buflist_findnr(ARGLIST[0].ae_fnum);
+
+ FOR_ALL_TAB_WINDOWS(tp, wp)
+ {
+ if (wp->w_buffer == buf)
+ {
+ goto_tabpage_win(tp, wp);
+ curwin->w_arg_idx = 0;
+ return;
+ }
+ }
+
+ /*
+ * Check whether the current buffer is changed. If so, we will need
+ * to split the current window or data could be lost.
+ * Skip the check if the 'hidden' option is set, as in this case the
+ * buffer won't be lost.
+ */
+ if (!P_HID(curbuf))
+ {
+ ++emsg_off;
+ split = check_changed(curbuf, CCGD_AW | CCGD_EXCMD);
+ --emsg_off;
+ }
+
+ /* Fake a ":sfirst" or ":first" command edit the first argument. */
+ if (split)
+ {
+ eap->cmdidx = CMD_sfirst;
+ eap->cmd[0] = 's';
+ }
+ else
+ eap->cmdidx = CMD_first;
+ ex_rewind(eap);
+ }
+}
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 56c8206d2a..f25af3f587 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -135,7 +135,6 @@ struct dbg_stuff {
#endif
# define HAVE_EX_SCRIPT_NI
-# define ex_drop ex_ni
# define ex_gui ex_nogui
# define ex_tearoff ex_ni
# define ex_popup ex_ni
@@ -2281,7 +2280,7 @@ int modifier_len(char_u *cmd)
if (VIM_ISDIGIT(*cmd))
p = skipwhite(skipdigits(cmd));
- for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i) {
+ for (i = 0; i < (int)ARRAY_SIZE(cmdmods); ++i) {
for (j = 0; p[j] != NUL; ++j)
if (p[j] != cmdmods[i].name[j])
break;
@@ -2306,7 +2305,7 @@ int cmd_exists(char_u *name)
char_u *p;
/* Check command modifiers. */
- for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i) {
+ for (i = 0; i < (int)ARRAY_SIZE(cmdmods); ++i) {
for (j = 0; name[j] != NUL; ++j)
if (name[j] != cmdmods[i].name[j])
break;
@@ -4974,7 +4973,7 @@ char_u *get_user_cmd_flags(expand_T *xp, int idx)
{"bang", "bar", "buffer", "complete", "count",
"nargs", "range", "register"};
- if (idx >= (int)(sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0])))
+ if (idx >= (int)ARRAY_SIZE(user_cmd_flags))
return NULL;
return (char_u *)user_cmd_flags[idx];
}
@@ -4986,7 +4985,7 @@ char_u *get_user_cmd_nargs(expand_T *xp, int idx)
{
static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"};
- if (idx >= (int)(sizeof(user_cmd_nargs) / sizeof(user_cmd_nargs[0])))
+ if (idx >= (int)ARRAY_SIZE(user_cmd_nargs))
return NULL;
return (char_u *)user_cmd_nargs[idx];
}
@@ -5142,8 +5141,7 @@ static void ex_quit(exarg_T *eap)
*/
static void ex_cquit(exarg_T *eap)
{
- getout(1); /* this does not always pass on the exit code to the Manx
- compiler. why? */
+ getout(1);
}
/*
@@ -7482,7 +7480,7 @@ int find_cmdline_var(const char_u *src, int *usedlen) FUNC_ATTR_NONNULL_ALL
# define SPEC_AMATCH 9
};
- for (i = 0; i < (int)(sizeof(spec_str) / sizeof(char *)); ++i) {
+ for (i = 0; i < (int)ARRAY_SIZE(spec_str); ++i) {
len = (int)STRLEN(spec_str[i]);
if (STRNCMP(src, spec_str[i], len) == 0) {
*usedlen = len;
@@ -8543,7 +8541,9 @@ static void ex_loadview(exarg_T *eap)
fname = get_view_file(*eap->arg);
if (fname != NULL) {
- do_source(fname, FALSE, DOSO_NONE);
+ if (do_source(fname, FALSE, DOSO_NONE) == FAIL) {
+ EMSG2(_(e_notopen), fname);
+ }
free(fname);
}
}
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index aed0484356..a19cb36d12 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -3715,7 +3715,7 @@ ExpandFromContext (
* right function to do the expansion.
*/
ret = FAIL;
- for (i = 0; i < (int)(sizeof(tab) / sizeof(struct expgen)); ++i)
+ for (i = 0; i < (int)ARRAY_SIZE(tab); ++i)
if (xp->xp_context == tab[i].context) {
if (tab[i].ic) {
regmatch.rm_ic = TRUE;
@@ -4155,7 +4155,7 @@ static char_u *get_history_arg(expand_T *xp, int idx)
static char_u compl[2] = { NUL, NUL };
char *short_names = ":=@>?/";
int short_names_count = (int)STRLEN(short_names);
- int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
+ int history_name_count = ARRAY_SIZE(history_names) - 1;
if (idx < short_names_count) {
compl[0] = (char_u)short_names[idx];
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index 9734ac07f9..9c6d7c96bb 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -2839,27 +2839,25 @@ buf_write (
* Check if backup file already exists.
*/
if (os_fileinfo((char *)backup, &file_info_new)) {
- /*
- * Check if backup file is same as original file.
- * May happen when modname() gave the same file back (e.g. silly
- * link). If we don't check here, we either ruin the file when
- * copying or erase it after writing.
- */
if (os_fileinfo_id_equal(&file_info_new, &file_info_old)) {
+ /*
+ * Backup file is same as original file.
+ * May happen when modname() gave the same file back (e.g. silly
+ * link). If we don't check here, we either ruin the file when
+ * copying or erase it after writing.
+ */
free(backup);
backup = NULL; /* no backup file to delete */
- }
-
- /*
- * If we are not going to keep the backup file, don't
- * delete an existing one, try to use another name.
- * Change one character, just before the extension.
- */
- if (!p_bk) {
- wp = backup + STRLEN(backup) - 1
- - STRLEN(backup_ext);
- if (wp < backup) /* empty file name ??? */
+ } else if (!p_bk) {
+ /*
+ * We are not going to keep the backup file, so don't
+ * delete an existing one, and try to use another name instead.
+ * Change one character, just before the extension.
+ */
+ wp = backup + STRLEN(backup) - 1 - STRLEN(backup_ext);
+ if (wp < backup) { /* empty file name ??? */
wp = backup;
+ }
*wp = 'z';
while (*wp > 'a'
&& os_fileinfo((char *)backup, &file_info_new)) {
diff --git a/src/nvim/hardcopy.c b/src/nvim/hardcopy.c
index 5d9d353fc8..f1f619066a 100644
--- a/src/nvim/hardcopy.c
+++ b/src/nvim/hardcopy.c
@@ -945,8 +945,6 @@ static colnr_T hardcopy_line(prt_settings_T *psettings, int page_line, prt_pos_T
* http://www.adobe.com
*/
-#define NUM_ELEMENTS(arr) (sizeof(arr)/sizeof((arr)[0]))
-
#define PRT_PS_DEFAULT_DPI (72) /* Default user space resolution */
#define PRT_PS_DEFAULT_FONTSIZE (10)
#define PRT_PS_DEFAULT_BUFFER_SIZE (80)
@@ -1139,33 +1137,33 @@ static struct prt_ps_charset_S k_charsets[] =
static struct prt_ps_mbfont_S prt_ps_mbfonts[] =
{
{
- NUM_ELEMENTS(j_encodings),
+ ARRAY_SIZE(j_encodings),
j_encodings,
- NUM_ELEMENTS(j_charsets),
+ ARRAY_SIZE(j_charsets),
j_charsets,
"jis_roman",
"JIS_X_1983"
},
{
- NUM_ELEMENTS(sc_encodings),
+ ARRAY_SIZE(sc_encodings),
sc_encodings,
- NUM_ELEMENTS(sc_charsets),
+ ARRAY_SIZE(sc_charsets),
sc_charsets,
"gb_roman",
"GB_2312-80"
},
{
- NUM_ELEMENTS(tc_encodings),
+ ARRAY_SIZE(tc_encodings),
tc_encodings,
- NUM_ELEMENTS(tc_charsets),
+ ARRAY_SIZE(tc_charsets),
tc_charsets,
"cns_roman",
"BIG5"
},
{
- NUM_ELEMENTS(k_encodings),
+ ARRAY_SIZE(k_encodings),
k_encodings,
- NUM_ELEMENTS(k_charsets),
+ ARRAY_SIZE(k_charsets),
k_charsets,
"ks_roman",
"KS_X_1992"
@@ -1639,12 +1637,12 @@ static int prt_next_dsc(struct prt_dsc_line_S *p_dsc_line)
return FALSE;
/* Find type of DSC comment */
- for (comment = 0; comment < (int)NUM_ELEMENTS(prt_dsc_table); comment++)
+ for (comment = 0; comment < (int)ARRAY_SIZE(prt_dsc_table); comment++)
if (prt_resfile_strncmp(0, prt_dsc_table[comment].string,
prt_dsc_table[comment].len) == 0)
break;
- if (comment != NUM_ELEMENTS(prt_dsc_table)) {
+ if (comment != ARRAY_SIZE(prt_dsc_table)) {
/* Return type of comment */
p_dsc_line->type = prt_dsc_table[comment].type;
offset = prt_dsc_table[comment].len;
@@ -2135,7 +2133,7 @@ int mch_print_init(prt_settings_T *psettings, char_u *jobname, int forceit)
props = enc_canon_props(p_encoding);
if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE))) {
p_mbenc_first = NULL;
- for (cmap = 0; cmap < (int)NUM_ELEMENTS(prt_ps_mbfonts); cmap++)
+ for (cmap = 0; cmap < (int)ARRAY_SIZE(prt_ps_mbfonts); cmap++)
if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap],
&p_mbenc)) {
if (p_mbenc_first == NULL)
diff --git a/src/nvim/indent.c b/src/nvim/indent.c
index 7090e007bf..075acc6c13 100644
--- a/src/nvim/indent.c
+++ b/src/nvim/indent.c
@@ -58,8 +58,8 @@ int get_indent_str(char_u *ptr, int ts, int list)
if (!list || lcs_tab1) { // count a tab for what it is worth
count += ts - (count % ts);
} else {
- // in list mode, when tab is not set, count screen char width for Tab:
- // ^I
+ // In list mode, when tab is not set, count screen char width
+ // for Tab, displays: ^I
count += ptr2cells(ptr);
}
} else if (*ptr == ' ') {
diff --git a/src/nvim/indent_c.c b/src/nvim/indent_c.c
index 6648a9f7c6..bbc0b291dc 100644
--- a/src/nvim/indent_c.c
+++ b/src/nvim/indent_c.c
@@ -210,9 +210,36 @@ static pos_T *find_line_comment(void) /* XXX */
return NULL;
}
-/*
- * Check if string matches "label:"; move to character after ':' if true.
- */
+/// Checks if `text` starts with "key:".
+static bool cin_has_js_key(char_u *text)
+{
+ char_u *s = skipwhite(text);
+
+ char_u quote = 0;
+ if (*s == '\'' || *s == '"') {
+ // can be 'key': or "key":
+ quote = *s;
+ ++s;
+ }
+ if (!vim_isIDc(*s)) { // need at least one ID character
+ return FALSE;
+ }
+
+ while (vim_isIDc(*s)) {
+ ++s;
+ }
+ if (*s && *s == quote) {
+ ++s;
+ }
+
+ s = cin_skipcomment(s);
+
+ // "::" is not a label, it's C++
+ return (*s == ':' && s[1] != ':');
+}
+
+/// Checks if string matches "label:"; move to character after ':' if true.
+/// "*s" must point to the start of the label, if there is one.
static int cin_islabel_skip(char_u **s)
{
if (!vim_isIDc(**s)) /* need at least one ID character */
@@ -303,7 +330,7 @@ static int cin_isinit(void)
for (;; ) {
int i, l;
- for (i = 0; i < (int)(sizeof(skip) / sizeof(char *)); ++i) {
+ for (i = 0; i < (int)ARRAY_SIZE(skip); ++i) {
l = (int)strlen(skip[i]);
if (cin_starts_with(s, skip[i])) {
s = cin_skipcomment(s + l);
@@ -1198,21 +1225,21 @@ static pos_T *find_start_brace(void)
return trypos;
}
-/*
- * Find the matching '(', failing if it is in a comment.
- * Return NULL if no match found.
- */
-static pos_T *
-find_match_paren ( /* XXX */
- int ind_maxparen
-)
+/// Find the matching '(', ignoring it if it is in a comment.
+/// @returns NULL or the found match.
+static pos_T *find_match_paren(int ind_maxparen)
+{
+ return find_match_char('(', ind_maxparen);
+}
+
+static pos_T * find_match_char(char_u c, int ind_maxparen)
{
pos_T cursor_save;
pos_T *trypos;
static pos_T pos_copy;
cursor_save = curwin->w_cursor;
- if ((trypos = findmatchlimit(NULL, '(', 0, ind_maxparen)) != NULL) {
+ if ((trypos = findmatchlimit(NULL, c, 0, ind_maxparen)) != NULL) {
/* check if the ( is in a // comment */
if ((colnr_T)cin_skip2pos(trypos) > trypos->col)
trypos = NULL;
@@ -1220,7 +1247,7 @@ find_match_paren ( /* XXX */
pos_copy = *trypos; /* copy trypos, findmatch will change it */
trypos = &pos_copy;
curwin->w_cursor = *trypos;
- if (ind_find_start_comment() != NULL) /* XXX */
+ if (ind_find_start_comment() != NULL)
trypos = NULL;
}
}
@@ -1228,6 +1255,29 @@ find_match_paren ( /* XXX */
return trypos;
}
+/// Find the matching '(', ignoring it if it is in a comment or before an
+/// unmatched {.
+/// @returns NULL or the found match.
+static pos_T *find_match_paren_after_brace(int ind_maxparen)
+{
+ pos_T *trypos = find_match_paren(ind_maxparen);
+ if (trypos == NULL) {
+ return NULL;
+ }
+
+ pos_T *tryposBrace = find_start_brace();
+ // If both an unmatched '(' and '{' is found. Ignore the '('
+ // position if the '{' is further down.
+ if (tryposBrace != NULL
+ && (trypos->lnum != tryposBrace->lnum
+ ? trypos->lnum < tryposBrace->lnum
+ : trypos->col < tryposBrace->col)) {
+ trypos = NULL;
+ }
+ return trypos;
+}
+
+
/*
* Return ind_maxparen corrected for the difference in line number between the
* cursor position and "startpos". This makes sure that searching for a
@@ -1517,6 +1567,8 @@ int get_c_indent(void)
#define LOOKFOR_NOBREAK 8
#define LOOKFOR_CPP_BASECLASS 9
#define LOOKFOR_ENUM_OR_INIT 10
+#define LOOKFOR_JS_KEY 11
+#define LOOKFOR_NO_COMMA 12
int whilelevel;
linenr_T lnum;
@@ -1731,6 +1783,12 @@ int get_c_indent(void)
}
}
}
+ // Are we looking at a ']' that has a match?
+ else if (*skipwhite(theline) == ']'
+ && (trypos = find_match_char('[', curbuf->b_ind_maxparen)) != NULL) {
+ // align with the line containing the '['.
+ amount = get_indent_lnum(trypos->lnum);
+ }
/*
* Are we inside parentheses or braces?
*/ /* XXX */
@@ -1939,13 +1997,14 @@ int get_c_indent(void)
else {
curwin->w_cursor.lnum = our_paren_pos.lnum;
curwin->w_cursor.col = col;
- if (find_match_paren(curbuf->b_ind_maxparen) != NULL)
+ if (find_match_paren_after_brace(curbuf->b_ind_maxparen)) {
amount += curbuf->b_ind_unclosed2;
- else {
- if (is_if_for_while)
+ } else {
+ if (is_if_for_while) {
amount += curbuf->b_ind_if_for_while;
- else
+ } else {
amount += curbuf->b_ind_unclosed;
+ }
}
}
/*
@@ -1964,13 +2023,10 @@ int get_c_indent(void)
/* add extra indent for a comment */
if (cin_iscomment(theline))
amount += curbuf->b_ind_comment;
- }
- /*
- * Are we at least inside braces, then?
- */
- else {
+ } else {
+ // We are inside braces, there is a { before this line at the position
+ // stored in tryposBrace.
trypos = tryposBrace;
-
ourscope = trypos->lnum;
start = ml_get(ourscope);
@@ -1989,28 +2045,22 @@ int get_c_indent(void)
else
start_brace = BRACE_AT_START;
} else {
- /*
- * that opening brace might have been on a continuation
- * line. if so, find the start of the line.
- */
+ // That opening brace might have been on a continuation
+ // line. If so, find the start of the line.
curwin->w_cursor.lnum = ourscope;
- /*
- * position the cursor over the rightmost paren, so that
- * matching it will take us back to the start of the line.
- */
+ // Position the cursor over the rightmost paren, so that
+ // matching it will take us back to the start of the line.
lnum = ourscope;
if (find_last_paren(start, '(', ')')
- && (trypos = find_match_paren(curbuf->b_ind_maxparen))
- != NULL)
+ && (trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL) {
lnum = trypos->lnum;
+ }
- /*
- * It could have been something like
- * case 1: if (asdf &&
- * ldfd) {
- * }
- */
+ // It could have been something like
+ // case 1: if (asdf &&
+ // ldfd) {
+ // }
if ((curbuf->b_ind_js || curbuf->b_ind_keep_case_label)
&& cin_iscase(skipwhite(get_cursor_line_ptr()), FALSE)) {
amount = get_indent();
@@ -2023,11 +2073,12 @@ int get_c_indent(void)
start_brace = BRACE_AT_END;
}
- /*
- * if we're looking at a closing brace, that's where
- * we want to be. otherwise, add the amount of room
- * that an indent is supposed to be.
- */
+ // For Javascript check if the line starts with "key:".
+ bool js_cur_has_key = curbuf->b_ind_js ? cin_has_js_key(theline) : false;
+
+ // If we're looking at a closing brace, that's where
+ // we want to be. Otherwise, add the amount of room
+ // that an indent is supposed to be.
if (theline[0] == '}') {
/*
* they may want closing braces to line up with something
@@ -2109,14 +2160,12 @@ int get_c_indent(void)
scope_amount = amount;
whilelevel = 0;
- /*
- * Search backwards. If we find something we recognize, line up
- * with that.
- *
- * if we're looking at an open brace, indent
- * the usual amount relative to the conditional
- * that opens the block.
- */
+ // Search backwards. If we find something we recognize, line up
+ // with that.
+ //
+ // If we're looking at an open brace, indent
+ // the usual amount relative to the conditional
+ // that opens the block.
curwin->w_cursor = cur_curpos;
for (;; ) {
curwin->w_cursor.lnum--;
@@ -2485,26 +2534,58 @@ int get_c_indent(void)
*/
terminated = cin_isterminated(l, FALSE, TRUE);
+ if (js_cur_has_key) {
+ js_cur_has_key = false; // only check the first line
+ if (curbuf->b_ind_js && terminated == ',') {
+ // For Javascript we might be inside an object:
+ // key: something, <- align with this
+ // key: something
+ // or:
+ // key: something + <- align with this
+ // something,
+ // key: something
+ lookfor = LOOKFOR_JS_KEY;
+ }
+ }
+ if (lookfor == LOOKFOR_JS_KEY && cin_has_js_key(l)) {
+ amount = get_indent();
+ break;
+ }
+ if (lookfor == LOOKFOR_NO_COMMA) {
+ if (terminated != ',') {
+ // Line below current line is the one that starts a
+ // (possibly broken) line ending in a comma.
+ break;
+ }
+ amount = get_indent();
+ if (curwin->w_cursor.lnum - 1 == ourscope) {
+ // line above is start of the scope, thus current line
+ // is the one that stars a (possibly broken) line
+ // ending in a comma.
+ break;
+ }
+ }
+
if (terminated == 0 || (lookfor != LOOKFOR_UNTERM
&& terminated == ',')) {
- /*
- * if we're in the middle of a paren thing,
- * go back to the line that starts it so
- * we can get the right prevailing indent
- * if ( foo &&
- * bar )
- */
- /*
- * position the cursor over the rightmost paren, so that
- * matching it will take us back to the start of the line.
- */
+ // If we're in the middle of a paren thing, Go back to the line
+ // that starts it so we can get the right prevailing indent
+ // if ( foo &&
+ // bar )
+
+ // Position the cursor over the rightmost paren, so that
+ // matching it will take us back to the start of the line.
+ // Ignore a match before the start of the block.
(void)find_last_paren(l, '(', ')');
trypos = find_match_paren(corr_ind_maxparen(&cur_curpos));
+ if (trypos != NULL && (trypos->lnum < tryposBrace->lnum
+ || (trypos->lnum == tryposBrace->lnum
+ && trypos->col < tryposBrace->col))) {
+ trypos = NULL;
+ }
- /*
- * If we are looking for ',', we also look for matching
- * braces.
- */
+ // If we are looking for ',', we also look for matching
+ // braces.
if (trypos == NULL && terminated == ','
&& find_last_paren(l, '{', '}'))
trypos = find_start_brace();
@@ -2546,10 +2627,11 @@ int get_c_indent(void)
* Get indent and pointer to text for current line,
* ignoring any jump label. XXX
*/
- if (!curbuf->b_ind_js)
- cur_amount = skip_label(curwin->w_cursor.lnum, &l);
- else
+ if (curbuf->b_ind_js) {
cur_amount = get_indent();
+ } else {
+ cur_amount = skip_label(curwin->w_cursor.lnum, &l);
+ }
/*
* If this is just above the line we are indenting, and it
* starts with a '{', line it up with this line.
@@ -2570,7 +2652,7 @@ int get_c_indent(void)
if (*skipwhite(l) != '{')
amount += curbuf->b_ind_open_extra;
- if (curbuf->b_ind_cpp_baseclass) {
+ if (curbuf->b_ind_cpp_baseclass && !curbuf->b_ind_js) {
/* have to look back, whether it is a cpp base
* class declaration or initialization */
lookfor = LOOKFOR_CPP_BASECLASS;
@@ -2716,17 +2798,43 @@ int get_c_indent(void)
* yet.
*/
if (lookfor == LOOKFOR_INITIAL && terminated == ',') {
- lookfor = LOOKFOR_ENUM_OR_INIT;
- cont_amount = cin_first_id_amount();
+ if (curbuf->b_ind_js) {
+ // Search for a line ending in a comma
+ // and line up with the line below it
+ // (could be the current line).
+ // some = [
+ // 1, <- line up here
+ // 2,
+ // some = [
+ // 3 + <- line up here
+ // 4 *
+ // 5,
+ // 6,
+ lookfor = LOOKFOR_NO_COMMA;
+ amount = get_indent(); // XXX
+ trypos = find_match_char('[', curbuf->b_ind_maxparen);
+ if (trypos != NULL) {
+ if (trypos->lnum == curwin->w_cursor.lnum - 1) {
+ // Current line is first inside
+ // [], line up with it.
+ break;
+ }
+ ourscope = trypos->lnum;
+ }
+ } else {
+ lookfor = LOOKFOR_ENUM_OR_INIT;
+ cont_amount = cin_first_id_amount();
+ }
} else {
if (lookfor == LOOKFOR_INITIAL
&& *l != NUL
- && l[STRLEN(l) - 1] == '\\')
- /* XXX */
- cont_amount = cin_get_equal_amount(
- curwin->w_cursor.lnum);
- if (lookfor != LOOKFOR_TERM)
+ && l[STRLEN(l) - 1] == '\\') {
+ // XXX
+ cont_amount = cin_get_equal_amount( curwin->w_cursor.lnum);
+ }
+ if (lookfor != LOOKFOR_TERM && lookfor != LOOKFOR_JS_KEY) {
lookfor = LOOKFOR_UNTERM;
+ }
}
}
}
@@ -2735,8 +2843,7 @@ int get_c_indent(void)
* Check if we are after a while (cond);
* If so: Ignore until the matching "do".
*/
- /* XXX */
- else if (cin_iswhileofdo_end(terminated)) {
+ else if (cin_iswhileofdo_end(terminated)) { // XXX
/*
* Found an unterminated line after a while ();, line up
* with the last one.
@@ -2933,21 +3040,17 @@ term_again:
if (curbuf->b_ind_jump_label > 0 && original_line_islabel)
amount -= curbuf->b_ind_jump_label;
}
- /*
- * ok -- we're not inside any sort of structure at all!
- *
- * this means we're at the top level, and everything should
- * basically just match where the previous line is, except
- * for the lines immediately following a function declaration,
- * which are K&R-style parameters and need to be indented.
- */
else {
- /*
- * if our line starts with an open brace, forget about any
- * prevailing indent and make sure it looks like the start
- * of a function
- */
-
+ // Ok -- we're not inside any sort of structure at all!
+ //
+ // this means we're at the top level, and everything should
+ // basically just match where the previous line is, except
+ // for the lines immediately following a function declaration,
+ // which are K&R-style parameters and need to be indented.
+
+ // if our line starts with an open brace, forget about any
+ // prevailing indent and make sure it looks like the start
+ // of a function
if (theline[0] == '{') {
amount = curbuf->b_ind_first_open;
}
@@ -3081,6 +3184,15 @@ term_again:
if (cin_ends_in(l, (char_u *)"};", NULL))
break;
+ // If the previous line ends on '[' we are probably in an
+ // array constant:
+ // something = [
+ // 234, <- extra indent
+ if (cin_ends_in(l, (char_u *)"[", NULL)) {
+ amount = get_indent() + ind_continuation;
+ break;
+ }
+
/*
* Find a line only has a semicolon that belongs to a previous
* line ending in '}', e.g. before an #endif. Don't increase
diff --git a/src/nvim/keymap.c b/src/nvim/keymap.c
index 45977b96ae..9c5160ffb2 100644
--- a/src/nvim/keymap.c
+++ b/src/nvim/keymap.c
@@ -284,8 +284,7 @@ static struct key_name_entry {
{0, NULL}
};
-#define KEY_NAMES_TABLE_LEN (sizeof(key_names_table) / \
- sizeof(struct key_name_entry))
+#define KEY_NAMES_TABLE_LEN ARRAY_SIZE(key_names_table)
static struct mousetable {
int pseudo_code; /* Code for pseudo mouse event */
diff --git a/src/nvim/macros.h b/src/nvim/macros.h
index 215ad3a1f7..7dd8120d09 100644
--- a/src/nvim/macros.h
+++ b/src/nvim/macros.h
@@ -152,4 +152,12 @@
# define RESET_BINDING(wp) (wp)->w_p_scb = FALSE; (wp)->w_p_crb = FALSE
+/// Calculate the length of a C array.
+///
+/// This should be called with a real array. Calling this with a pointer is an
+/// error. A mechanism to detect many (though not all) of those errors at compile
+/// time is implemented. It works by the second division producing a division by
+/// zero in those cases (-Wdiv-by-zero in GCC).
+#define ARRAY_SIZE(arr) ((sizeof(arr)/sizeof((arr)[0])) / ((size_t)(!(sizeof(arr) % sizeof((arr)[0])))))
+
#endif // NVIM_MACROS_H
diff --git a/src/nvim/main.c b/src/nvim/main.c
index 6c2cb2b645..1f6c8ddc81 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -208,9 +208,6 @@ int main(int argc, char **argv)
/*
* Check if we have an interactive window.
- * On the Amiga: If there is no window, we open one with a newcli command
- * (needed for :! to * work). mch_check_win() will also handle the -d or
- * -dev argument.
*/
check_and_set_isatty(&params);
@@ -1087,8 +1084,7 @@ static void command_line_scan(mparm_T *parmp)
exmode_active = EXMODE_VIM;
break;
- case 'f': /* "-f" GUI: run in foreground. Amiga: open
- window directly, not with newcli */
+ case 'f': /* "-f" GUI: run in foreground. */
break;
case 'g': /* "-g" start GUI */
@@ -1489,9 +1485,6 @@ static void init_startuptime(mparm_T *paramp)
/*
* Check if we have an interactive window.
- * On the Amiga: If there is no window, we open one with a newcli command
- * (needed for :! to * work). mch_check_win() will also handle the -d or
- * -dev argument.
*/
static void check_and_set_isatty(mparm_T *paramp)
{
@@ -1957,10 +1950,10 @@ static void source_startup_scripts(mparm_T *parmp)
/*
* Try to read initialization commands from the following places:
* - environment variable VIMINIT
- * - user vimrc file (s:.vimrc for Amiga, ~/.vimrc otherwise)
+ * - user vimrc file (~/.vimrc)
* - second user vimrc file ($VIM/.vimrc for Dos)
* - environment variable EXINIT
- * - user exrc file (s:.exrc for Amiga, ~/.exrc otherwise)
+ * - user exrc file (~/.exrc)
* - second user exrc file ($VIM/.exrc for Dos)
* The first that exists is used, the rest is ignored.
*/
@@ -2168,7 +2161,7 @@ static void usage(void)
for (i = 0;; ++i) {
mch_msg(_(" vim [arguments] "));
mch_msg(_(use[i]));
- if (i == (sizeof(use) / sizeof(char_u *)) - 1)
+ if (i == ARRAY_SIZE(use) - 1)
break;
mch_msg(_("\n or:"));
}
diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c
index db4516527a..26eda01f98 100644
--- a/src/nvim/mbyte.c
+++ b/src/nvim/mbyte.c
@@ -289,11 +289,9 @@ enc_canon_table[] =
#define IDX_MACROMAN 57
{"macroman", ENC_8BIT + ENC_MACROMAN, 0}, /* Mac OS */
-#define IDX_DECMCS 58
- {"dec-mcs", ENC_8BIT, 0}, /* DEC MCS */
-#define IDX_HPROMAN8 59
+#define IDX_HPROMAN8 58
{"hp-roman8", ENC_8BIT, 0}, /* HP Roman8 */
-#define IDX_COUNT 60
+#define IDX_COUNT 59
};
/*
@@ -925,9 +923,9 @@ static int dbcs_ptr2len_len(const char_u *p, int size)
}
/*
- * Return true if "c" is in "table[size / sizeof(struct interval)]".
+ * Return true if "c" is in "table".
*/
-static bool intable(const struct interval *table, size_t size, int c)
+static bool intable(const struct interval *table, size_t n_items, int c)
{
int mid, bot, top;
@@ -937,7 +935,7 @@ static bool intable(const struct interval *table, size_t size, int c)
/* binary search in table */
bot = 0;
- top = (int)(size / sizeof(struct interval) - 1);
+ top = (int)(n_items - 1);
while (top >= bot) {
mid = (bot + top) / 2;
if (table[mid].last < c)
@@ -1204,7 +1202,7 @@ int utf_char2cells(int c)
#else
if (!utf_printable(c))
return 6; /* unprintable, displays <xxxx> */
- if (intable(doublewidth, sizeof(doublewidth), c))
+ if (intable(doublewidth, ARRAY_SIZE(doublewidth), c))
return 2;
#endif
}
@@ -1212,7 +1210,7 @@ int utf_char2cells(int c)
else if (c >= 0x80 && !vim_isprintc(c))
return 4; /* unprintable, displays <xx> */
- if (c >= 0x80 && *p_ambw == 'd' && intable(ambiguous, sizeof(ambiguous), c))
+ if (c >= 0x80 && *p_ambw == 'd' && intable(ambiguous, ARRAY_SIZE(ambiguous), c))
return 2;
return 1;
@@ -2026,7 +2024,7 @@ bool utf_iscomposing(int c)
{0xe0100, 0xe01ef}
};
- return intable(combining, sizeof(combining), c);
+ return intable(combining, ARRAY_SIZE(combining), c);
}
/*
@@ -2050,7 +2048,7 @@ bool utf_printable(int c)
{0xfffe, 0xffff}
};
- return !intable(nonprint, sizeof(nonprint), c);
+ return !intable(nonprint, ARRAY_SIZE(nonprint), c);
#endif
}
@@ -2138,7 +2136,7 @@ int utf_class(int c)
{0x2f800, 0x2fa1f, 0x4e00}, /* CJK Ideographs */
};
int bot = 0;
- int top = sizeof(classes) / sizeof(struct clinterval) - 1;
+ int top = ARRAY_SIZE(classes) - 1;
int mid;
/* First quick check for Latin1 characters, use 'iskeyword'. */
@@ -2346,13 +2344,12 @@ static convertStruct foldCase[] =
* Return the converted equivalent of "a", which is a UCS-4 character. Use
* the given conversion "table". Uses binary search on "table".
*/
-static int utf_convert(int a, convertStruct *table, int tableSize)
+static int utf_convert(int a, convertStruct *table, size_t n_items)
{
- int start, mid, end; /* indices into table */
- int entries = tableSize / sizeof(convertStruct);
+ size_t start, mid, end; /* indices into table */
start = 0;
- end = entries;
+ end = n_items;
while (start < end) {
/* need to search further */
mid = (end + start) / 2;
@@ -2361,7 +2358,7 @@ static int utf_convert(int a, convertStruct *table, int tableSize)
else
end = mid;
}
- if (start < entries
+ if (start < n_items
&& table[start].rangeStart <= a
&& a <= table[start].rangeEnd
&& (a - table[start].rangeStart) % table[start].step == 0)
@@ -2376,7 +2373,7 @@ static int utf_convert(int a, convertStruct *table, int tableSize)
*/
int utf_fold(int a)
{
- return utf_convert(a, foldCase, (int)sizeof(foldCase));
+ return utf_convert(a, foldCase, ARRAY_SIZE(foldCase));
}
static convertStruct toLower[] =
@@ -2702,7 +2699,7 @@ int utf_toupper(int a)
return TOUPPER_LOC(a);
/* For any other characters use the above mapping table. */
- return utf_convert(a, toUpper, (int)sizeof(toUpper));
+ return utf_convert(a, toUpper, ARRAY_SIZE(toUpper));
}
bool utf_islower(int a)
@@ -2732,7 +2729,7 @@ int utf_tolower(int a)
return TOLOWER_LOC(a);
/* For any other characters use the above mapping table. */
- return utf_convert(a, toLower, (int)sizeof(toLower));
+ return utf_convert(a, toLower, ARRAY_SIZE(toLower));
}
bool utf_isupper(int a)
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index 7a2cd686c6..e1dc2b93d9 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -318,7 +318,7 @@ static const struct nv_cmd {
};
/* Number of commands in nv_cmds[]. */
-#define NV_CMDS_SIZE (sizeof(nv_cmds) / sizeof(struct nv_cmd))
+#define NV_CMDS_SIZE ARRAY_SIZE(nv_cmds)
/* Sorted index of commands in nv_cmds[]. */
static short nv_cmd_idx[NV_CMDS_SIZE];
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index a6dee2be5b..931b877a95 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -30,6 +30,7 @@
#include "nvim/fold.h"
#include "nvim/getchar.h"
#include "nvim/indent.h"
+#include "nvim/log.h"
#include "nvim/mark.h"
#include "nvim/mbyte.h"
#include "nvim/memline.h"
@@ -2641,7 +2642,10 @@ do_put (
/* Autocommands may be executed when saving lines for undo, which may make
* y_array invalid. Start undo now to avoid that. */
- u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1);
+ if (u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1) == FAIL) {
+ ELOG(_("Failed to save undo information"));
+ return;
+ }
if (insert_string != NULL) {
y_type = MCHAR;
diff --git a/src/nvim/option.c b/src/nvim/option.c
index c1ab3f2ee5..5b5570fad4 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -1808,7 +1808,7 @@ static struct vimoption
}
};
-#define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption))
+#define PARAM_COUNT ARRAY_SIZE(options)
static char *(p_ambw_values[]) = {"single", "double", NULL};
static char *(p_bg_values[]) = {"light", "dark", NULL};
@@ -1883,7 +1883,7 @@ void set_init_1(void)
int mustfree;
ga_init(&ga, 1, 100);
- for (n = 0; n < (long)(sizeof(names) / sizeof(char *)); ++n) {
+ for (n = 0; n < (long)ARRAY_SIZE(names); ++n) {
mustfree = FALSE;
# ifdef UNIX
if (*names[n] == NUL)
@@ -4723,10 +4723,10 @@ static char_u *set_chars_option(char_u **varp)
if (varp == &p_lcs) {
tab = lcstab;
- entries = sizeof(lcstab) / sizeof(struct charstab);
+ entries = ARRAY_SIZE(lcstab);
} else {
tab = filltab;
- entries = sizeof(filltab) / sizeof(struct charstab);
+ entries = ARRAY_SIZE(filltab);
}
/* first round: check for valid value, second round: assign values */
@@ -6196,15 +6196,17 @@ int makeset(FILE *fd, int opt_flags, int local_only)
int pri;
/*
- * The options that don't have a default (terminal name, columns, lines)
- * are never written. Terminal options are also not written.
+ * Some options are never written:
+ * - Options that don't have a default (terminal name, columns, lines).
+ * - Terminal options.
+ * - Hidden options.
+ *
* Do the loop over "options[]" twice: once for options with the
* P_PRI_MKRC flag and once without.
*/
for (pri = 1; pri >= 0; --pri) {
for (p = &options[0]; !istermoption(p); p++)
if (!(p->flags & P_NO_MKRC)
- && !istermoption(p)
&& ((pri == 1) == ((p->flags & P_PRI_MKRC) != 0))) {
/* skip global option when only doing locals */
if (p->indir == PV_NONE && !(opt_flags & OPT_GLOBAL))
@@ -6215,8 +6217,11 @@ int makeset(FILE *fd, int opt_flags, int local_only)
if ((opt_flags & OPT_GLOBAL) && (p->flags & P_NOGLOB))
continue;
- /* Global values are only written when not at the default value. */
varp = get_varp_scope(p, opt_flags);
+ /* Hidden options are never written. */
+ if (!varp)
+ continue;
+ /* Global values are only written when not at the default value. */
if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp))
continue;
@@ -7245,7 +7250,7 @@ int ExpandSettings(expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***
for (loop = 0; loop <= 1; ++loop) {
regmatch->rm_ic = ic;
if (xp->xp_context != EXPAND_BOOL_SETTINGS) {
- for (match = 0; match < (int)(sizeof(names) / sizeof(char *));
+ for (match = 0; match < (int)ARRAY_SIZE(names);
++match)
if (vim_regexec(regmatch, (char_u *)names[match], (colnr_T)0)) {
if (loop == 0)
diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h
index 39dfbe8b88..4422fbc756 100644
--- a/src/nvim/option_defs.h
+++ b/src/nvim/option_defs.h
@@ -369,7 +369,7 @@ EXTERN int p_ek; /* 'esckeys' */
EXTERN int p_exrc; /* 'exrc' */
EXTERN char_u *p_fencs; /* 'fileencodings' */
EXTERN char_u *p_ffs; /* 'fileformats' */
-EXTERN long p_fic; /* 'fileignorecase' */
+EXTERN bool p_fic; ///< 'fileignorecase'
EXTERN char_u *p_fcl; /* 'foldclose' */
EXTERN long p_fdls; /* 'foldlevelstart' */
EXTERN char_u *p_fdo; /* 'foldopen' */
@@ -621,7 +621,7 @@ EXTERN int p_wiv; /* 'weirdinvert' */
EXTERN char_u *p_ww; /* 'whichwrap' */
EXTERN long p_wc; /* 'wildchar' */
EXTERN long p_wcm; /* 'wildcharm' */
-EXTERN long p_wic; /* 'wildignorecase' */
+EXTERN bool p_wic; ///< 'wildignorecase'
EXTERN char_u *p_wim; /* 'wildmode' */
EXTERN int p_wmnu; /* 'wildmenu' */
EXTERN long p_wh; /* 'winheight' */
diff --git a/src/nvim/os_unix.c b/src/nvim/os_unix.c
index 4db84a4f12..7ec4059bce 100644
--- a/src/nvim/os_unix.c
+++ b/src/nvim/os_unix.c
@@ -1,6 +1,5 @@
/*
* VIM - Vi IMproved by Bram Moolenaar
- * VMS merge by Zoltan Arpadffy
*
* Do ":help uganda" in Vim to read copying and usage conditions.
* Do ":help credits" in Vim to see a list of people who contributed.
@@ -1066,10 +1065,12 @@ int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,
|| pat[i][j + 1] == '`')
*p++ = '\\';
++j;
- } else if (!intick && vim_strchr(SHELL_SPECIAL,
- pat[i][j]) != NULL)
+ } else if (!intick
+ && ((flags & EW_KEEPDOLLAR) == 0 || pat[i][j] != '$')
+ && vim_strchr(SHELL_SPECIAL, pat[i][j]) != NULL)
/* Put a backslash before a special character, but not
- * when inside ``. */
+ * when inside ``. And not for $var when EW_KEEPDOLLAR is
+ * set. */
*p++ = '\\';
/* Copy one character. */
diff --git a/src/nvim/path.c b/src/nvim/path.c
index e8d31f3f73..8af4015611 100644
--- a/src/nvim/path.c
+++ b/src/nvim/path.c
@@ -179,7 +179,7 @@ char_u *path_next_component(char_u *fname)
/*
* Get a pointer to one character past the head of a path name.
- * Unix: after "/"; DOS: after "c:\"; Amiga: after "disk:/"; Mac: no head.
+ * Unix: after "/"; DOS: after "c:\"; Mac: no head.
* If there is no head, path is returned.
*/
char_u *get_past_head(char_u *path)
@@ -1080,7 +1080,7 @@ gen_expand_wildcards (
free(p);
ga_clear_strings(&ga);
i = mch_expand_wildcards(num_pat, pat, num_file, file,
- flags);
+ flags | EW_KEEPDOLLAR);
recursive = FALSE;
return i;
}
diff --git a/src/nvim/path.h b/src/nvim/path.h
index 9a994f3477..628ea335ed 100644
--- a/src/nvim/path.h
+++ b/src/nvim/path.h
@@ -17,6 +17,7 @@
#define EW_ICASE 0x100 /* ignore case */
#define EW_NOERROR 0x200 /* no error for bad regexp */
#define EW_NOTWILD 0x400 /* add match with literal name if exists */
+#define EW_KEEPDOLLAR 0x800 /* do not escape $, $var is expanded */
/* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
* is used when executing commands and EW_SILENT for interactive expanding. */
diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c
index 69c2119697..dd7af63ce0 100644
--- a/src/nvim/regexp.c
+++ b/src/nvim/regexp.c
@@ -602,7 +602,7 @@ static int get_char_class(char_u **pp)
int i;
if ((*pp)[1] == ':') {
- for (i = 0; i < (int)(sizeof(class_names) / sizeof(*class_names)); ++i)
+ for (i = 0; i < (int)ARRAY_SIZE(class_names); ++i)
if (STRNCMP(*pp + 2, class_names[i], STRLEN(class_names[i])) == 0) {
*pp += STRLEN(class_names[i]) + 2;
return i;
diff --git a/src/nvim/regexp_defs.h b/src/nvim/regexp_defs.h
index 8aa89d22b7..1e00f14ac6 100644
--- a/src/nvim/regexp_defs.h
+++ b/src/nvim/regexp_defs.h
@@ -108,7 +108,7 @@ typedef struct {
regprog_T *regprog;
char_u *startp[NSUBEXP];
char_u *endp[NSUBEXP];
- int rm_ic;
+ bool rm_ic;
} regmatch_T;
/*
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index b7a485598b..6787ca8080 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -3943,7 +3943,7 @@ get_syn_options (
if (strchr(first_letters, *arg) == NULL)
break;
- for (fidx = sizeof(flagtab) / sizeof(struct flag); --fidx >= 0; ) {
+ for (fidx = ARRAY_SIZE(flagtab); --fidx >= 0; ) {
p = flagtab[fidx].name;
int i;
for (i = 0, len = 0; p[i] != NUL; i += 2, ++len)
@@ -5157,22 +5157,21 @@ get_id_list (
regmatch.rm_ic = TRUE;
id = 0;
for (int i = highlight_ga.ga_len; --i >= 0; ) {
- if (!vim_regexec(&regmatch, HL_TABLE()[i].sg_name, (colnr_T)0)) {
- continue;
- }
- if (round == 2) {
- /* Got more items than expected; can happen
- * when adding items that match:
- * "contains=a.*b,axb".
- * Go back to first round */
- if (count >= total_count) {
- free(retval);
- round = 1;
- } else
- retval[count] = i + 1;
+ if (vim_regexec(&regmatch, HL_TABLE()[i].sg_name, (colnr_T)0)) {
+ if (round == 2) {
+ /* Got more items than expected; can happen
+ * when adding items that match:
+ * "contains=a.*b,axb".
+ * Go back to first round */
+ if (count >= total_count) {
+ free(retval);
+ round = 1;
+ } else
+ retval[count] = i + 1;
+ }
+ ++count;
+ id = -1; /* remember that we found one */
}
- ++count;
- id = -1; /* remember that we found one */
}
vim_regfree(regmatch.regprog);
}
@@ -6296,7 +6295,7 @@ do_highlight (
attr = 0;
off = 0;
while (arg[off] != NUL) {
- for (i = sizeof(hl_attr_table) / sizeof(int); --i >= 0; ) {
+ for (i = ARRAY_SIZE(hl_attr_table); --i >= 0; ) {
len = (int)STRLEN(hl_name_table[i]);
if (STRNICMP(arg + off, hl_name_table[i], len) == 0) {
attr |= hl_attr_table[i];
@@ -6417,7 +6416,7 @@ do_highlight (
/* reduce calls to STRICMP a bit, it can be slow */
off = TOUPPER_ASC(*arg);
- for (i = (sizeof(color_names) / sizeof(char *)); --i >= 0; )
+ for (i = ARRAY_SIZE(color_names); --i >= 0; )
if (off == color_names[i][0]
&& STRICMP(arg + 1, color_names[i] + 1) == 0)
break;
diff --git a/src/nvim/tempfile.c b/src/nvim/tempfile.c
index 33d6f0f37d..f81aff53a1 100644
--- a/src/nvim/tempfile.c
+++ b/src/nvim/tempfile.c
@@ -30,7 +30,7 @@ static void vim_maketempdir(void)
// Try the entries in `TEMP_DIR_NAMES` to create the temp directory.
char_u template[TEMP_FILE_PATH_MAXLEN];
char_u path[TEMP_FILE_PATH_MAXLEN];
- for (size_t i = 0; i < sizeof(temp_dirs) / sizeof(char *); ++i) {
+ for (size_t i = 0; i < ARRAY_SIZE(temp_dirs); ++i) {
// Expand environment variables, leave room for "/nvimXXXXXX/999999999"
expand_env((char_u *)temp_dirs[i], template, TEMP_FILE_PATH_MAXLEN - 22);
if (!os_isdir(template)) { // directory doesn't exist
diff --git a/src/nvim/term.c b/src/nvim/term.c
index 24969bf90f..ceec140670 100644
--- a/src/nvim/term.c
+++ b/src/nvim/term.c
@@ -80,7 +80,7 @@
*
* The entries are compact, therefore they normally are included even when
* HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
- * can be accessed with "builtin_amiga", "builtin_ansi", "builtin_debug", etc.
+ * can be accessed with "builtin_ansi", "builtin_debug", etc.
*
* Each termcap is a list of builtin_term structures. It always starts with
* KS_NAME, which separates the entries. See parse_builtin_tcap() for all
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index 6bacef9778..fce0971d89 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -94,7 +94,7 @@ $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG) test1.out
RM_ON_RUN := test.out X* viminfo
RM_ON_START := tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
-RUN_VIM := VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(TOOL) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+RUN_VIM := VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(TOOL) $(VIMPROG) -u unix.vim -U NONE -i viminfo --noplugin -s dotest.in
clean:
-rm -rf *.out \
diff --git a/src/nvim/testdir/test100.in b/src/nvim/testdir/test100.in
index 2bf931fd4f..083b4324b2 100644
--- a/src/nvim/testdir/test100.in
+++ b/src/nvim/testdir/test100.in
@@ -2,7 +2,7 @@ Tests for 'undolevel' setting being global-local
STARTTEST
:so small.vim
-:set nocompatible viminfo+=nviminfo ul=5
+:set ul=5
:fu! FillBuffer()
:for i in range(1,13)
:put=i
diff --git a/src/nvim/testdir/test12.in b/src/nvim/testdir/test12.in
index 46e9c45b80..be3169a625 100644
--- a/src/nvim/testdir/test12.in
+++ b/src/nvim/testdir/test12.in
@@ -5,7 +5,6 @@ Tests for 'directory' option.
STARTTEST
:so small.vim
-:set nocompatible viminfo+=nviminfo
:set dir=.,~
:/start of testfile/,/end of testfile/w! Xtest1
:" do an ls of the current dir to find the swap file (should not be there)
diff --git a/src/nvim/testdir/test15.in b/src/nvim/testdir/test15.in
index 366529a550..60d8717278 100644
--- a/src/nvim/testdir/test15.in
+++ b/src/nvim/testdir/test15.in
@@ -12,7 +12,6 @@ STARTTEST
:set fo+=tcroql tw=72
/xxxxxxxx$
0gq6kk
-:set nocp viminfo+=nviminfo
:" undo/redo here to make the next undo only work on the following changes
u
:map gg :.,.+2s/^/x/<CR>kk:set tw=3<CR>gqq
diff --git a/src/nvim/testdir/test17.in b/src/nvim/testdir/test17.in
index 64534ec77c..7fef87d383 100644
--- a/src/nvim/testdir/test17.in
+++ b/src/nvim/testdir/test17.in
@@ -16,11 +16,7 @@ STARTTEST
:let $CDIR = "."
/CDIR
:else
-:if has("amiga")
-:let $TDIR = "/testdir"
-:else
:let $TDIR = "."
-:endif
/TDIR
:endif
:" Dummy writing for making that sure gf doesn't fail even if the current
diff --git a/src/nvim/testdir/test24.in b/src/nvim/testdir/test24.in
index 7dfc1afdc6..292f403048 100644
--- a/src/nvim/testdir/test24.in
+++ b/src/nvim/testdir/test24.in
Binary files differ
diff --git a/src/nvim/testdir/test29.in b/src/nvim/testdir/test29.in
index 83c6acdc1c..4cc2120814 100644
--- a/src/nvim/testdir/test29.in
+++ b/src/nvim/testdir/test29.in
@@ -5,7 +5,6 @@ Test for joining lines and marks in them
STARTTEST
:so small.vim
-:set viminfo+=nviminfo
:set nojoinspaces
:set cpoptions-=j
/firstline/
diff --git a/src/nvim/testdir/test3.in b/src/nvim/testdir/test3.in
index a7543945c4..7f6d412806 100644
--- a/src/nvim/testdir/test3.in
+++ b/src/nvim/testdir/test3.in
@@ -4,7 +4,7 @@ Test for 'cindent'
STARTTEST
:so small.vim
-:set nocompatible viminfo+=nviminfo modeline
+:set modeline
:edit " read modeline
/start of AUTO
=/end of AUTO
@@ -1432,7 +1432,7 @@ int main ()
STARTTEST
:set cino=(0,ts
-2kdd=][
+2kdd2j=][
ENDTEST
void func(int a
@@ -1446,7 +1446,7 @@ void func(int a
STARTTEST
:set cino=(0
-2kdd=][
+2kdd2j=][
ENDTEST
void
@@ -1461,7 +1461,7 @@ func(int a
STARTTEST
:set cino&
-2kdd=7][
+2kdd2j=7][
ENDTEST
void func(void)
@@ -1538,7 +1538,7 @@ func6(
STARTTEST
:set cino&
:set cino+=l1
-2kdd=][
+2kdd2j=][
ENDTEST
void func(void)
@@ -1567,7 +1567,7 @@ break;
STARTTEST
:set cino&
-2kdd=][
+2kdd2j=][
ENDTEST
void func(void)
@@ -1592,7 +1592,7 @@ void func(void)
STARTTEST
:set cino&
-2kdd=][
+2kdd2j=][
ENDTEST
void func(void)
@@ -1919,10 +1919,10 @@ ENDTEST
JSSTART
var foo = [
-1, // indent 8 more
+1,
2,
3
-]; // indent 8 less
+];
JSEND
STARTTEST
@@ -1937,7 +1937,7 @@ var foo = [
1,
2,
3
-]; // indent 16 less
+];
}
JSEND
@@ -1950,6 +1950,12 @@ ENDTEST
JSSTART
(function($){
+if (cond &&
+cond) {
+stmt;
+}
+window.something.left =
+(width - 50 + offset) + "px";
var class_name='myclass';
function private_method() {
@@ -1965,15 +1971,15 @@ function init(options) {
$(this).data(class_name+'_public',$.extend({},{
foo: 'bar',
-bar: 2, // indent 8 more
-foobar: [ // indent 8 more
-1, // indent 8 more
-2, // indent 16 more
-3 // indent 16 more
+bar: 2,
+foobar: [
+1,
+2,
+3
],
-callback: function(){ // indent 8 more
-return true; // indent 8 more
-} // indent 8 more
+callback: function(){
+return true;
+}
}, options||{}));
}
@@ -2014,9 +2020,9 @@ $(this).data(class_name+'_public',$.extend({},{
foo: 'bar',
bar: 2,
foobar: [
-1, // indent 8 more
-2, // indent 8 more
-3 // indent 8 more
+1,
+2,
+3
],
callback: function(){
return true;
@@ -2036,15 +2042,15 @@ JSSTART
function init(options) {
$(this).data(class_name+'_public',$.extend({},{
foo: 'bar',
-bar: 2, // indent 8 more
-foobar: [ // indent 8 more
-1, // indent 8 more
-2, // indent 16 more
-3 // indent 16 more
+bar: 2,
+foobar: [
+1,
+2,
+3
],
-callback: function(){ // indent 8 more
-return true; // indent 8 more
-} // indent 8 more
+callback: function(){
+return true;
+}
}, options||{}));
}
})(jQuery);
diff --git a/src/nvim/testdir/test3.ok b/src/nvim/testdir/test3.ok
index d73a5e1230..0d0e76fce4 100644
--- a/src/nvim/testdir/test3.ok
+++ b/src/nvim/testdir/test3.ok
@@ -1707,10 +1707,10 @@ JSEND
JSSTART
var foo = [
-1, // indent 8 more
+ 1,
2,
3
- ]; // indent 8 less
+];
JSEND
@@ -1720,7 +1720,7 @@ function bar() {
1,
2,
3
- ]; // indent 16 less
+ ];
}
JSEND
@@ -1728,6 +1728,12 @@ JSEND
JSSTART
(function($){
+ if (cond &&
+ cond) {
+ stmt;
+ }
+ window.something.left =
+ (width - 50 + offset) + "px";
var class_name='myclass';
function private_method() {
@@ -1743,15 +1749,15 @@ JSSTART
$(this).data(class_name+'_public',$.extend({},{
foo: 'bar',
- bar: 2, // indent 8 more
- foobar: [ // indent 8 more
- 1, // indent 8 more
- 2, // indent 16 more
- 3 // indent 16 more
+ bar: 2,
+ foobar: [
+ 1,
+ 2,
+ 3
],
- callback: function(){ // indent 8 more
- return true; // indent 8 more
- } // indent 8 more
+ callback: function(){
+ return true;
+ }
}, options||{}));
}
@@ -1787,9 +1793,9 @@ function init(options) {
foo: 'bar',
bar: 2,
foobar: [
- 1, // indent 8 more
- 2, // indent 8 more
- 3 // indent 8 more
+ 1,
+ 2,
+ 3
],
callback: function(){
return true;
@@ -1804,15 +1810,15 @@ JSSTART
function init(options) {
$(this).data(class_name+'_public',$.extend({},{
foo: 'bar',
- bar: 2, // indent 8 more
- foobar: [ // indent 8 more
- 1, // indent 8 more
- 2, // indent 16 more
- 3 // indent 16 more
+ bar: 2,
+ foobar: [
+ 1,
+ 2,
+ 3
],
- callback: function(){ // indent 8 more
- return true; // indent 8 more
- } // indent 8 more
+ callback: function(){
+ return true;
+ }
}, options||{}));
}
})(jQuery);
diff --git a/src/nvim/testdir/test30.in b/src/nvim/testdir/test30.in
index 4a8778d2de..3f7b9eb472 100644
--- a/src/nvim/testdir/test30.in
+++ b/src/nvim/testdir/test30.in
@@ -24,12 +24,7 @@ STARTTEST
:set nobin eol
:bwipe XXUnix XXDos XXMac
:" create mixed format files
-:if has("vms")
-: !copy XXUnix,XXDos XXUxDs.
-: !copy XXUnix,XXMac XXUxMac.
-: !copy XXDos,XXMac XXDosMac.
-: !copy XXUnix,XXDos,XXMac XXUxDsMc.
-:elseif has("win32")
+:if has("win32")
: !copy /b XXUnix+XXDos XXUxDs
: !copy /b XXUnix+XXMac XXUxMac
: !copy /b XXDos+XXMac XXDosMac
diff --git a/src/nvim/testdir/test32.in b/src/nvim/testdir/test32.in
index 6b399fa6c6..02a41141ab 100644
--- a/src/nvim/testdir/test32.in
+++ b/src/nvim/testdir/test32.in
@@ -22,7 +22,7 @@ Test for insert expansion
STARTTEST
:so small.vim
-:se nocp viminfo+=nviminfo cpt=.,w ff=unix | $-2,$w!Xtestfile | set ff&
+:se cpt=.,w ff=unix | $-2,$w!Xtestfile | set ff&
:se cot=
nO#include "Xtestfile"
ru
diff --git a/src/nvim/testdir/test44.in b/src/nvim/testdir/test44.in
index 87de1b95a4..65b08b08b8 100644
--- a/src/nvim/testdir/test44.in
+++ b/src/nvim/testdir/test44.in
@@ -4,7 +4,7 @@ See test99 for exactly the same test with re=2.
STARTTEST
:so mbyte.vim
-:set nocompatible encoding=utf-8 termencoding=latin1 viminfo+=nviminfo
+:set encoding=utf-8 termencoding=latin1
:set re=1
/^1
/a*b\{2}c\+/e
diff --git a/src/nvim/testdir/test49.in b/src/nvim/testdir/test49.in
index 5e1d6b461e..1ce57246ee 100644
--- a/src/nvim/testdir/test49.in
+++ b/src/nvim/testdir/test49.in
@@ -5,7 +5,7 @@ test49.failed, try to add one or more "G"s at the line ending in "test.out"
STARTTEST
:so small.vim
-:se nocp nomore viminfo+=nviminfo
+:se nomore
:lang mess C
:so test49.vim
GGGGGGGGGGGGGG"rp:.-,$w! test.out
diff --git a/src/nvim/testdir/test61.in b/src/nvim/testdir/test61.in
index dc24ab9804..87bb07a209 100644
--- a/src/nvim/testdir/test61.in
+++ b/src/nvim/testdir/test61.in
@@ -85,7 +85,6 @@ ggO---:0put b
ggO---:0put a
ggO---:w >>test.out
:so small.vim
-:set nocp viminfo+=nviminfo
:enew!
oa
:set ul=100
diff --git a/src/nvim/testdir/test70.in b/src/nvim/testdir/test70.in
index 9fbe818b3d..24d2e4c446 100644
--- a/src/nvim/testdir/test70.in
+++ b/src/nvim/testdir/test70.in
@@ -2,7 +2,6 @@ Smoke test for MzScheme interface and mzeval() function
STARTTEST
:so mzscheme.vim
-:set nocompatible viminfo+=nviminfo
:function! MzRequire()
:redir => l:mzversion
:mz (version)
diff --git a/src/nvim/testdir/test72.in b/src/nvim/testdir/test72.in
index 4700d86981..20897f01a0 100644
--- a/src/nvim/testdir/test72.in
+++ b/src/nvim/testdir/test72.in
@@ -6,7 +6,7 @@ STARTTEST
:so small.vim
:"
:" Test 'undofile': first a simple one-line change.
-:set nocompatible viminfo+=nviminfo visualbell
+:set visualbell
:set ul=100 undofile nomore
:set ft=unix
:e! Xtestfile
diff --git a/src/nvim/testdir/test73.in b/src/nvim/testdir/test73.in
index 666e4d2e50..60cda2d970 100644
--- a/src/nvim/testdir/test73.in
+++ b/src/nvim/testdir/test73.in
@@ -7,7 +7,6 @@ STARTTEST
:"
:" This will cause a few errors, do it silently.
:set visualbell
-:set nocp viminfo+=nviminfo
:"
:function! DeleteDirectory(dir)
: if has("win16") || has("win32") || has("win64") || has("dos16") || has("dos32")
diff --git a/src/nvim/testdir/test74.in b/src/nvim/testdir/test74.in
index 4fbe5e4d01..9fdbe771b3 100644
--- a/src/nvim/testdir/test74.in
+++ b/src/nvim/testdir/test74.in
@@ -7,7 +7,7 @@ STARTTEST
:"
:" This will cause a few errors, do it silently.
:set visualbell
-:set nocp viminfo+=!,nviminfo
+:set viminfo+=!
:let MY_GLOBAL_DICT={'foo': 1, 'bar': 0, 'longvarible': 1000}
:" store a really long list, so line wrapping will occur in viminfo file
:let MY_GLOBAL_LIST=range(1,100)
diff --git a/src/nvim/testdir/test78.in b/src/nvim/testdir/test78.in
index 1850bd9236..cb0e51edd5 100644
--- a/src/nvim/testdir/test78.in
+++ b/src/nvim/testdir/test78.in
@@ -6,7 +6,7 @@ blocks.
STARTTEST
:so small.vim
-:set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo
+:set fileformat=unix undolevels=-1
:e! Xtest
ggdG
:let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
diff --git a/src/nvim/testdir/test8.in b/src/nvim/testdir/test8.in
index d9d00d97ae..0f27c813ec 100644
--- a/src/nvim/testdir/test8.in
+++ b/src/nvim/testdir/test8.in
@@ -32,7 +32,7 @@ endfunc
$put ='VimLeave done'
write
endfunc
-:set viminfo='100,nviminfo
+:set viminfo='100
:au BufUnload * call CloseAll()
:au VimLeave * call WriteToOut()
:e small.vim
diff --git a/src/nvim/testdir/test85.in b/src/nvim/testdir/test85.in
index c5ca873a49..f7112792e9 100644
--- a/src/nvim/testdir/test85.in
+++ b/src/nvim/testdir/test85.in
@@ -3,7 +3,6 @@ Test for Lua interface and luaeval() function
STARTTEST
:so small.vim
:so lua.vim
-:set nocompatible viminfo+=nviminfo
:lua l = vim.list():add"item0":add"dictionary with list OK":add"item2"
:lua h = vim.dict(); h.list = l
:call garbagecollect()
diff --git a/src/nvim/testdir/test89.in b/src/nvim/testdir/test89.in
index 1968066198..f1f64fb41f 100644
--- a/src/nvim/testdir/test89.in
+++ b/src/nvim/testdir/test89.in
@@ -5,7 +5,7 @@
STARTTEST
:so small.vim
-:set hidden nocp nu rnu viminfo+=nviminfo
+:set hidden nu rnu
:redir @a | set nu? rnu? | redir END
:e! xx
:redir @b | set nu? rnu? | redir END
diff --git a/src/nvim/testdir/test91.in b/src/nvim/testdir/test91.in
index e900a522df..b66776b1e4 100644
--- a/src/nvim/testdir/test91.in
+++ b/src/nvim/testdir/test91.in
@@ -55,6 +55,7 @@ STARTTEST
:tabnew
:tabnew
:let t:var_list = [1, 2, 3]
+:let t:other = 777
:let def_list = [4, 5, 6, 7]
:tabrewind
:$put =string(gettabvar(3, 'var_list'))
diff --git a/src/nvim/testdir/test91.ok b/src/nvim/testdir/test91.ok
index 22e1572209..809952b69d 100644
--- a/src/nvim/testdir/test91.ok
+++ b/src/nvim/testdir/test91.ok
@@ -26,8 +26,8 @@ iso-8859-2
0
[1, 2, 3]
[1, 2, 3]
-''
-[4, 5, 6, 7]
+{'var_list': [1, 2, 3], 'other': 777}
+{'var_list': [1, 2, 3], 'other': 777}
[4, 5, 6, 7]
''
[4, 5, 6, 7]
diff --git a/src/nvim/testdir/test94.in b/src/nvim/testdir/test94.in
index dfa91d8340..a8b46112d2 100644
--- a/src/nvim/testdir/test94.in
+++ b/src/nvim/testdir/test94.in
@@ -17,7 +17,6 @@ Test cases:
STARTTEST
:so small.vim
-:set nocp viminfo+=nviminfo
:
:" User functions
:function MoveToCap()
diff --git a/src/nvim/testdir/test95.in b/src/nvim/testdir/test95.in
index b2b9de772e..221b550487 100644
--- a/src/nvim/testdir/test95.in
+++ b/src/nvim/testdir/test95.in
@@ -7,7 +7,7 @@ actually tried.
STARTTEST
:so small.vim
:so mbyte.vim
-:set nocp encoding=utf-8 viminfo+=nviminfo nomore
+:set encoding=utf-8 nomore
:" tl is a List of Lists with:
:" 2: test auto/old/new 0: test auto/old 1: test auto/new
:" regexp pattern
diff --git a/src/nvim/testdir/test99.in b/src/nvim/testdir/test99.in
index 77828f4b68..32bc68cce4 100644
--- a/src/nvim/testdir/test99.in
+++ b/src/nvim/testdir/test99.in
@@ -4,7 +4,7 @@ See test44 for exactly the same test with re=1.
STARTTEST
:so mbyte.vim
-:set nocompatible encoding=utf-8 termencoding=latin1 viminfo+=nviminfo
+:set encoding=utf-8 termencoding=latin1
:set re=2
/^1
/a*b\{2}c\+/e
diff --git a/src/nvim/testdir/test_breakindent.in b/src/nvim/testdir/test_breakindent.in
index 0b00c95a85..ad12d0074d 100644
--- a/src/nvim/testdir/test_breakindent.in
+++ b/src/nvim/testdir/test_breakindent.in
@@ -81,7 +81,7 @@ STARTTEST
:" https://groups.google.com/d/msg/vim_dev/ZOdg2mc9c9Y/TT8EhFjEy0IJ
:only
:vert 20new
-:set all& nocp breakindent briopt=min:10
+:set all& breakindent briopt=min:10
:call setline(1, [" a\tb\tc\td\te", " z y x w v"])
:/^\s*a
fbgjyl:let line1 = @0
diff --git a/src/nvim/undo.c b/src/nvim/undo.c
index 2ab31b6cfd..9a3da5bcdb 100644
--- a/src/nvim/undo.c
+++ b/src/nvim/undo.c
@@ -230,7 +230,7 @@ int u_save(linenr_T top, linenr_T bot)
if (top > curbuf->b_ml.ml_line_count
|| top >= bot
|| bot > curbuf->b_ml.ml_line_count + 1)
- return FALSE; /* rely on caller to do error messages */
+ return FAIL; /* rely on caller to do error messages */
if (top + 2 == bot)
u_saveline((linenr_T)(top + 1));
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 3460b7c6c3..245f797306 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -178,6 +178,14 @@ static char *(features[]) = {
};
static int included_patches[] = {
+ //560,
+ //559,
+ //558 NA
+ //557 NA
+ //556 NA
+ //555 NA
+ //554,
+ //553,
//552,
//551,
//550,
@@ -274,7 +282,7 @@ static int included_patches[] = {
//458,
//457,
//456,
- //455,
+ 455,
454,
//453 NA
//452,
@@ -287,7 +295,7 @@ static int included_patches[] = {
//445,
444,
//443,
- //442,
+ 442,
//441,
440,
439,
@@ -295,7 +303,7 @@ static int included_patches[] = {
437,
436,
435,
- //434,
+ 434,
433,
//432 NA
//431 NA
@@ -306,7 +314,7 @@ static int included_patches[] = {
//426 NA
425,
//424 NA
- //423,
+ 423,
//422,
421,
//420 NA
@@ -339,7 +347,7 @@ static int included_patches[] = {
//393 NA
392,
391,
- //390,
+ 390,
//389,
388,
387,
@@ -374,12 +382,12 @@ static int included_patches[] = {
358,
357,
//356 NA
- //355,
+ 355,
//354 NA
353,
352,
351,
- //350,
+ 350,
349,
348,
347,
@@ -986,7 +994,7 @@ void intro_message(int colon)
};
// blanklines = screen height - # message lines
- blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1);
+ blanklines = (int)Rows - (ARRAY_SIZE(lines) - 1);
// Don't overwrite a statusline. Depends on 'cmdheight'.
if (p_ls > 1) {
@@ -1006,7 +1014,7 @@ void intro_message(int colon)
row = blanklines / 2;
if (((row >= 2) && (Columns >= 50)) || colon) {
- for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i) {
+ for (i = 0; i < (int)ARRAY_SIZE(lines); ++i) {
p = lines[i];
if (sponsor != 0) {
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 0ed43b0184..029fcaac8b 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -1977,6 +1977,7 @@ void win_close_othertab(win_T *win, int free_buf, tabpage_T *tp)
tabpage_T *ptp = NULL;
int free_tp = FALSE;
+ assert(win->w_buffer); // to avoid np dereference warning in next line
if (win->w_closing || win->w_buffer->b_closing)
return; /* window is already being closed */