aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/api/vimscript.c4
-rw-r--r--src/nvim/buffer.c20
-rw-r--r--src/nvim/buffer_defs.h16
-rw-r--r--src/nvim/change.c4
-rw-r--r--src/nvim/charset.c10
-rw-r--r--src/nvim/cursor_shape.c2
-rw-r--r--src/nvim/debugger.c2
-rw-r--r--src/nvim/diff.c2
-rw-r--r--src/nvim/edit.c16
-rw-r--r--src/nvim/eval.c22
-rw-r--r--src/nvim/eval/funcs.c40
-rw-r--r--src/nvim/eval/typval.h2
-rw-r--r--src/nvim/eval/userfunc.c4
-rw-r--r--src/nvim/ex_cmds.c16
-rw-r--r--src/nvim/ex_cmds2.c4
-rw-r--r--src/nvim/ex_cmds_defs.h6
-rw-r--r--src/nvim/ex_docmd.c35
-rw-r--r--src/nvim/ex_eval.c4
-rw-r--r--src/nvim/ex_getln.c12
-rw-r--r--src/nvim/ex_session.c8
-rw-r--r--src/nvim/file_search.c10
-rw-r--r--src/nvim/fileio.c14
-rw-r--r--src/nvim/fold.c16
-rw-r--r--src/nvim/getchar.c16
-rw-r--r--src/nvim/globals.h44
-rw-r--r--src/nvim/hardcopy.c7
-rw-r--r--src/nvim/if_cscope.c4
-rw-r--r--src/nvim/lib/kbtree.h2
-rw-r--r--src/nvim/lib/khash.h2
-rw-r--r--src/nvim/lua/xdiff.c2
-rw-r--r--src/nvim/mark.c2
-rw-r--r--src/nvim/mbyte.c8
-rw-r--r--src/nvim/memfile.c2
-rw-r--r--src/nvim/memline.c18
-rw-r--r--src/nvim/memory.c5
-rw-r--r--src/nvim/menu.c6
-rw-r--r--src/nvim/message.c10
-rw-r--r--src/nvim/misc1.c12
-rw-r--r--src/nvim/mouse.c6
-rw-r--r--src/nvim/move.c6
-rw-r--r--src/nvim/normal.c20
-rw-r--r--src/nvim/ops.c14
-rw-r--r--src/nvim/option.c73
-rw-r--r--src/nvim/os/fs.c2
-rw-r--r--src/nvim/os/stdpaths.c2
-rw-r--r--src/nvim/path.c30
-rw-r--r--src/nvim/po/check.vim5
-rw-r--r--src/nvim/quickfix.c6
-rw-r--r--src/nvim/runtime.c6
-rw-r--r--src/nvim/screen.c18
-rw-r--r--src/nvim/search.c63
-rw-r--r--src/nvim/shada.c2
-rw-r--r--src/nvim/sign.c4
-rw-r--r--src/nvim/spell.c52
-rw-r--r--src/nvim/spellfile.c72
-rw-r--r--src/nvim/strings.c4
-rw-r--r--src/nvim/syntax.c71
-rw-r--r--src/nvim/tag.c10
-rw-r--r--src/nvim/testdir/test_arglist.vim16
-rw-r--r--src/nvim/testdir/test_autochdir.vim38
-rw-r--r--src/nvim/testdir/test_autocmd.vim46
-rw-r--r--src/nvim/testdir/test_bufwintabinfo.vim204
-rw-r--r--src/nvim/testdir/test_cd.vim39
-rw-r--r--src/nvim/testdir/test_cmdline.vim3
-rw-r--r--src/nvim/testdir/test_execute_func.vim12
-rw-r--r--src/nvim/testdir/test_functions.vim4
-rw-r--r--src/nvim/testdir/test_highlight.vim10
-rw-r--r--src/nvim/testdir/test_listchars.vim4
-rw-r--r--src/nvim/testdir/test_quickfix.vim3
-rw-r--r--src/nvim/testdir/test_registers.vim5
-rw-r--r--src/nvim/testdir/test_textobjects.vim32
-rw-r--r--src/nvim/undo.c4
-rw-r--r--src/nvim/version.c8
-rw-r--r--src/nvim/viml/parser/expressions.c2
-rw-r--r--src/nvim/window.c113
-rw-r--r--src/uncrustify.cfg44
76 files changed, 858 insertions, 604 deletions
diff --git a/src/nvim/api/vimscript.c b/src/nvim/api/vimscript.c
index c516cedaf4..640144b234 100644
--- a/src/nvim/api/vimscript.c
+++ b/src/nvim/api/vimscript.c
@@ -390,7 +390,7 @@ Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight, E
FUNC_API_SINCE(4) FUNC_API_FAST
{
int pflags = 0;
- for (size_t i = 0 ; i < flags.size ; i++) {
+ for (size_t i = 0; i < flags.size; i++) {
switch (flags.data[i]) {
case 'm':
pflags |= kExprFlagsMulti; break;
@@ -478,7 +478,7 @@ Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight, E
.capacity = kv_size(colors),
.size = kv_size(colors),
};
- for (size_t i = 0 ; i < kv_size(colors) ; i++) {
+ for (size_t i = 0; i < kv_size(colors); i++) {
const ParserHighlightChunk chunk = kv_A(colors, i);
Array chunk_arr = (Array) {
.items = xmalloc(4 * sizeof(chunk_arr.items[0])),
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index 88938d5099..f2f4950e58 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -1305,7 +1305,7 @@ int do_buffer(int action, int start, int dir, int count, int forceit)
if (buf == NULL) { // No previous buffer, Try 2'nd approach
forward = true;
buf = curbuf->b_next;
- for (;; ) {
+ for (;;) {
if (buf == NULL) {
if (!forward) { // tried both directions
break;
@@ -1587,7 +1587,7 @@ void do_autochdir(void)
if (starting == 0
&& curbuf->b_ffname != NULL
&& vim_chdirfile(curbuf->b_ffname, kCdCauseAuto) == OK) {
- post_chdir(kCdScopeGlobal, false);
+ last_chdir_reason = "autochdir";
shorten_fnames(true);
}
}
@@ -2163,7 +2163,7 @@ int buflist_findpat(const char_u *pattern, const char_u *pattern_end, bool unlis
// First try finding a listed buffer. If not found and "unlisted"
// is true, try finding an unlisted buffer.
find_listed = true;
- for (;; ) {
+ for (;;) {
for (attempt = 0; attempt <= 3; attempt++) {
// may add '^' and '$'
if (toggledollar) {
@@ -3511,7 +3511,7 @@ int build_stl_str_hl(win_T *wp, char_u *out, size_t outlen, char_u *fmt, int use
// Proceed character by character through the statusline format string
// fmt_p is the current position in the input buffer
- for (char_u *fmt_p = usefmt; *fmt_p; ) {
+ for (char_u *fmt_p = usefmt; *fmt_p;) {
if (curitem == (int)stl_items_len) {
size_t new_len = stl_items_len * 3 / 2;
@@ -4407,7 +4407,7 @@ int build_stl_str_hl(win_T *wp, char_u *out, size_t outlen, char_u *fmt, int use
// string to find the last character that will fit.
trunc_p = out;
width = 0;
- for (;; ) {
+ for (;;) {
width += ptr2cells(trunc_p);
if (width >= maxwidth) {
break;
@@ -4758,7 +4758,7 @@ void do_arg_all(int count, int forceit, int keep_tabs)
if (had_tab > 0) {
goto_tabpage_tp(first_tabpage, true, true);
}
- for (;; ) {
+ for (;;) {
win_T *wpnext = NULL;
tpnext = curtab->tp_next;
for (win_T *wp = firstwin; wp != NULL; wp = wpnext) {
@@ -5009,7 +5009,7 @@ void ex_buffer_all(exarg_T *eap)
if (had_tab > 0) {
goto_tabpage_tp(first_tabpage, true, true);
}
- for (;; ) {
+ for (;;) {
tpnext = curtab->tp_next;
for (wp = firstwin; wp != NULL; wp = wpnext) {
wpnext = wp->w_next;
@@ -5020,8 +5020,8 @@ void ex_buffer_all(exarg_T *eap)
: wp->w_width != Columns)
|| (had_tab > 0 && wp != firstwin))
&& !ONE_WINDOW
- && !(wp->w_closing ||
- wp->w_buffer->b_locked > 0)) {
+ && !(wp->w_closing
+ || wp->w_buffer->b_locked > 0)) {
win_close(wp, false);
wpnext = firstwin; // just in case an autocommand does
// something strange with windows
@@ -5138,7 +5138,7 @@ void ex_buffer_all(exarg_T *eap)
/*
* Close superfluous windows.
*/
- for (wp = lastwin; open_wins > count; ) {
+ for (wp = lastwin; open_wins > count;) {
r = (buf_hide(wp->w_buffer) || !bufIsChanged(wp->w_buffer)
|| autowrite(wp->w_buffer, false) == OK);
if (!win_valid(wp)) {
diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h
index bd9c5efa44..49e527e98b 100644
--- a/src/nvim/buffer_defs.h
+++ b/src/nvim/buffer_defs.h
@@ -1121,14 +1121,14 @@ typedef struct {
/// @{
enum {
MENU_INDEX_INVALID = -1,
- MENU_INDEX_NORMAL = 0,
- MENU_INDEX_VISUAL = 1,
- MENU_INDEX_SELECT = 2,
- MENU_INDEX_OP_PENDING = 3,
- MENU_INDEX_INSERT = 4,
- MENU_INDEX_CMDLINE = 5,
- MENU_INDEX_TIP = 6,
- MENU_MODES = 7,
+ MENU_INDEX_NORMAL = 0,
+ MENU_INDEX_VISUAL = 1,
+ MENU_INDEX_SELECT = 2,
+ MENU_INDEX_OP_PENDING = 3,
+ MENU_INDEX_INSERT = 4,
+ MENU_INDEX_CMDLINE = 5,
+ MENU_INDEX_TIP = 6,
+ MENU_MODES = 7,
};
typedef struct VimMenu vimmenu_T;
diff --git a/src/nvim/change.c b/src/nvim/change.c
index 6ec4979dac..c52d992fbe 100644
--- a/src/nvim/change.c
+++ b/src/nvim/change.c
@@ -1355,7 +1355,7 @@ int open_line(int dir, int flags, int second_line_indent)
int c = 0;
int off = 0;
- for (p = lead_flags; *p != NUL && *p != ':'; ) {
+ for (p = lead_flags; *p != NUL && *p != ':';) {
if (*p == COM_RIGHT || *p == COM_LEFT) {
c = *p++;
} else if (ascii_isdigit(*p) || *p == '-') {
@@ -1841,7 +1841,7 @@ void del_lines(long nlines, bool undo)
return;
}
- for (n = 0; n < nlines; ) {
+ for (n = 0; n < nlines;) {
if (curbuf->b_ml.ml_flags & ML_EMPTY) { // nothing to delete
break;
}
diff --git a/src/nvim/charset.c b/src/nvim/charset.c
index 5e18f9d86e..eb0903b594 100644
--- a/src/nvim/charset.c
+++ b/src/nvim/charset.c
@@ -1642,6 +1642,16 @@ int hex2nr(int c)
return c - '0';
}
+/// Convert two hex characters to a byte.
+/// Return -1 if one of the characters is not hex.
+int hexhex2nr(char_u *p)
+{
+ if (!ascii_isxdigit(p[0]) || !ascii_isxdigit(p[1])) {
+ return -1;
+ }
+ return (hex2nr(p[0]) << 4) + hex2nr(p[1]);
+}
+
/// Check that "str" starts with a backslash that should be removed.
/// For Windows this is only done when the character after the
/// backslash is not a normal file name character.
diff --git a/src/nvim/cursor_shape.c b/src/nvim/cursor_shape.c
index 644bb2c324..6b0a5dfe12 100644
--- a/src/nvim/cursor_shape.c
+++ b/src/nvim/cursor_shape.c
@@ -168,7 +168,7 @@ char *parse_shape_opt(int what)
}
// Parse the part after the colon
- for (p = colonp + 1; *p && *p != ','; ) {
+ for (p = colonp + 1; *p && *p != ',';) {
{
/*
* First handle the ones with a number argument.
diff --git a/src/nvim/debugger.c b/src/nvim/debugger.c
index 3ac128a20f..b6e35f3047 100644
--- a/src/nvim/debugger.c
+++ b/src/nvim/debugger.c
@@ -109,7 +109,7 @@ void do_debug(char_u *cmd)
smsg(_("cmd: %s"), cmd);
}
// Repeat getting a command and executing it.
- for (;; ) {
+ for (;;) {
msg_scroll = true;
need_wait_return = false;
// Save the current typeahead buffer and replace it with an empty one.
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 4e03f4761c..1f8acd8c79 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -739,7 +739,7 @@ static int diff_write_buffer(buf_T *buf, diffin_T *din)
len = 0;
for (lnum = 1; lnum <= buf->b_ml.ml_line_count; lnum++) {
- for (s = ml_get_buf(buf, lnum, false); *s != NUL; ) {
+ for (s = ml_get_buf(buf, lnum, false); *s != NUL;) {
if (diff_flags & DIFF_ICASE) {
char_u cbuf[MB_MAXBYTES + 1];
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index 7a24ee1b32..d505b40935 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -4166,7 +4166,7 @@ static int ins_compl_get_exp(pos_T *ini)
pos = (compl_direction == FORWARD) ? &last_match_pos : &first_match_pos;
// For ^N/^P loop over all the flags/windows/buffers in 'complete'
- for (;; ) {
+ for (;;) {
found_new_match = FAIL;
set_match_pos = false;
@@ -4384,7 +4384,7 @@ static int ins_compl_get_exp(pos_T *ini)
p_ws = true;
}
bool looped_around = false;
- for (;; ) {
+ for (;;) {
bool cont_s_ipos = false;
msg_silent++; // Don't want messages for wrapscan.
@@ -5570,7 +5570,7 @@ int get_literal(void)
no_mapping++; // don't map the next key hits
cc = 0;
i = 0;
- for (;; ) {
+ for (;;) {
nc = plain_vgetc();
if (!(State & CMDLINE)
&& MB_BYTE2LEN_CHECK(nc) == 1) {
@@ -6677,7 +6677,7 @@ static void stop_insert(pos_T *end_insert_pos, int esc, int nomove)
curwin->w_cursor = *end_insert_pos;
check_cursor_col(); // make sure it is not past the line
- for (;; ) {
+ for (;;) {
if (gchar_cursor() == NUL && curwin->w_cursor.col > 0) {
--curwin->w_cursor.col;
}
@@ -6868,7 +6868,7 @@ int oneleft(void)
// We might get stuck on 'showbreak', skip over it.
width = 1;
- for (;; ) {
+ for (;;) {
coladvance(v - width);
// getviscol() is slow, skip it when 'showbreak' is empty,
// 'breakindent' is not set and there are no multi-byte
@@ -7202,7 +7202,7 @@ static void replace_join(int off)
{
int i;
- for (i = replace_stack_nr; --i >= 0; ) {
+ for (i = replace_stack_nr; --i >= 0;) {
if (replace_stack[i] == NUL && off-- <= 0) {
--replace_stack_nr;
memmove(replace_stack + i, replace_stack + i + 1,
@@ -7251,7 +7251,7 @@ static void mb_replace_pop_ins(int cc)
}
// Handle composing chars.
- for (;; ) {
+ for (;;) {
c = replace_pop();
if (c == -1) { // stack empty
break;
@@ -9012,7 +9012,7 @@ static bool ins_tab(void)
// correct replace stack.
if ((State & REPLACE_FLAG)
&& !(State & VREPLACE_FLAG)) {
- for (temp = i; --temp >= 0; ) {
+ for (temp = i; --temp >= 0;) {
replace_join(repl_off);
}
}
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 0123c7265b..d3d0121632 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -1551,7 +1551,7 @@ static const char_u *skip_var_list(const char_u *arg, int *var_count, int *semic
if (*arg == '[') {
// "[var, var]": find the matching ']'.
p = arg;
- for (;; ) {
+ for (;;) {
p = skipwhite(p + 1); // skip whites after '[', ';' or ','
s = skip_var_one(p);
if (s == p) {
@@ -2448,7 +2448,7 @@ static void set_var_lval(lval_T *lp, char_u *endp, typval_T *rettv, int copy, co
// Check whether any of the list items is locked
for (ri = tv_list_first(rettv->vval.v_list);
- ri != NULL && ll_li != NULL; ) {
+ ri != NULL && ll_li != NULL;) {
if (var_check_lock(TV_LIST_ITEM_TV(ll_li)->v_lock, lp->ll_name,
TV_CSTRING)) {
return;
@@ -2464,7 +2464,7 @@ static void set_var_lval(lval_T *lp, char_u *endp, typval_T *rettv, int copy, co
/*
* Assign the List values to the list items.
*/
- for (ri = tv_list_first(rettv->vval.v_list); ri != NULL; ) {
+ for (ri = tv_list_first(rettv->vval.v_list); ri != NULL;) {
if (op != NULL && *op != '=') {
eexe_mod_op(TV_LIST_ITEM_TV(lp->ll_li), TV_LIST_ITEM_TV(ri), op);
} else {
@@ -2691,7 +2691,7 @@ void set_context_for_expression(expand_T *xp, char_u *arg, cmdidx_T cmdidx)
xp->xp_context = EXPAND_USER_VARS;
if (vim_strpbrk(arg, (char_u *)"\"'+-*/%.=!?~|&$([<>,#") == NULL) {
// ":let var1 var2 ...": find last space.
- for (p = arg + STRLEN(arg); p >= arg; ) {
+ for (p = arg + STRLEN(arg); p >= arg;) {
xp->xp_pattern = p;
MB_PTR_BACK(arg, p);
if (ascii_iswhite(*p)) {
@@ -3732,7 +3732,7 @@ static int eval5(char_u **arg, typval_T *rettv, int evaluate)
/*
* Repeat computing, until no '+', '-' or '.' is following.
*/
- for (;; ) {
+ for (;;) {
op = **arg;
if (op != '+' && op != '-' && op != '.') {
break;
@@ -3907,7 +3907,7 @@ static int eval6(char_u **arg, typval_T *rettv, int evaluate, int want_string)
/*
* Repeat computing, until no '*', '/' or '%' is following.
*/
- for (;; ) {
+ for (;;) {
op = **arg;
if (op != '*' && op != '/' && op != '%') {
break;
@@ -4890,7 +4890,7 @@ static int get_string_tv(char_u **arg, typval_T *rettv, int evaluate)
rettv->v_type = VAR_STRING;
rettv->vval.v_string = name;
- for (p = *arg + 1; *p != NUL && *p != '"'; ) {
+ for (p = *arg + 1; *p != NUL && *p != '"';) {
if (*p == '\\') {
switch (*++p) {
case 'b':
@@ -5026,7 +5026,7 @@ static int get_lit_string_tv(char_u **arg, typval_T *rettv, int evaluate)
rettv->v_type = VAR_STRING;
rettv->vval.v_string = str;
- for (p = *arg + 1; *p != NUL; ) {
+ for (p = *arg + 1; *p != NUL;) {
if (*p == '\'') {
if (p[1] != '\'') {
break;
@@ -6086,7 +6086,7 @@ int assert_equalfile(typval_T *argvars)
snprintf((char *)IObuff, IOSIZE, (char *)e_notread, fname2);
} else {
int64_t linecount = 1;
- for (int64_t count = 0; ; count++) {
+ for (int64_t count = 0;; count++) {
const int c1 = fgetc(fd1);
const int c2 = fgetc(fd2);
if (c1 == EOF) {
@@ -6851,7 +6851,7 @@ dict_T *get_win_info(win_T *wp, int16_t tpnr, int16_t winnr)
tv_dict_add_nr(dict, S_LEN("width"), wp->w_width);
tv_dict_add_nr(dict, S_LEN("bufnr"), wp->w_buffer->b_fnum);
tv_dict_add_nr(dict, S_LEN("wincol"), wp->w_wincol + 1);
-
+ tv_dict_add_nr(dict, S_LEN("textoff"), win_col_off(wp));
tv_dict_add_nr(dict, S_LEN("terminal"), bt_terminal(wp->w_buffer));
tv_dict_add_nr(dict, S_LEN("quickfix"), bt_quickfix(wp->w_buffer));
tv_dict_add_nr(dict, S_LEN("loclist"),
@@ -7382,7 +7382,7 @@ void set_buffer_lines(buf_T *buf, linenr_T lnum_arg, bool append, const typval_T
}
// Default result is zero == OK.
- for (;; ) {
+ for (;;) {
if (lines->v_type == VAR_LIST) {
// List argument, get next string.
if (li == NULL) {
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index 7549ec7ac8..dfadd28ebe 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -2663,12 +2663,12 @@ static void f_fnamemodify(typval_T *argvars, typval_T *rettv, FunPtr fptr)
char buf[NUMBUFLEN];
const char *fname = tv_get_string_chk(&argvars[0]);
const char *const mods = tv_get_string_buf_chk(&argvars[1], buf);
- if (fname == NULL) {
+ if (mods == NULL || fname == NULL) {
fname = NULL;
- } else if (mods != NULL && *mods != NUL) {
+ } else {
len = strlen(fname);
- size_t usedlen = 0;
if (*mods != NUL) {
+ size_t usedlen = 0;
(void)modify_fname((char_u *)mods, false, &usedlen,
(char_u **)&fname, &fbuf, &len);
}
@@ -3174,7 +3174,7 @@ static void getchar_common(typval_T *argvars, typval_T *rettv)
bool error = false;
no_mapping++;
- for (;; ) {
+ for (;;) {
// Position the cursor. Needed after a message that ends in a space,
// or if event processing caused a redraw.
ui_cursor_goto(msg_row, msg_col);
@@ -3386,15 +3386,17 @@ static void f_getcompletion(typval_T *argvars, typval_T *rettv, FunPtr fptr)
emsg(_(e_invarg));
return;
}
+ const char *pattern = tv_get_string(&argvars[0]);
if (strcmp(type, "cmdline") == 0) {
- set_one_cmd_context(&xpc, tv_get_string(&argvars[0]));
+ set_one_cmd_context(&xpc, pattern);
xpc.xp_pattern_len = STRLEN(xpc.xp_pattern);
+ xpc.xp_col = STRLEN(pattern);
goto theend;
}
ExpandInit(&xpc);
- xpc.xp_pattern = (char_u *)tv_get_string(&argvars[0]);
+ xpc.xp_pattern = (char_u *)pattern;
xpc.xp_pattern_len = STRLEN(xpc.xp_pattern);
xpc.xp_context = cmdcomplete_str_to_type(type);
if (xpc.xp_context == EXPAND_NOTHING) {
@@ -3447,7 +3449,7 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
// Numbers of the scope objects (window, tab) we want the working directory
// of. A `-1` means to skip this scope, a `0` means the current object.
int scope_number[] = {
- [kCdScopeWindow ] = 0, // Number of window to look at.
+ [kCdScopeWindow] = 0, // Number of window to look at.
[kCdScopeTabpage] = 0, // Number of tab to look at.
};
@@ -3485,11 +3487,6 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
}
}
- // If the user didn't specify anything, default to window scope
- if (scope == kCdScopeInvalid) {
- scope = MIN_CD_SCOPE;
- }
-
// Find the tabpage by number
if (scope_number[kCdScopeTabpage] > 0) {
tp = find_tabpage(scope_number[kCdScopeTabpage]);
@@ -3535,12 +3532,13 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
case kCdScopeGlobal:
if (globaldir) { // `globaldir` is not always set.
from = globaldir;
- } else if (os_dirname(cwd, MAXPATHL) == FAIL) { // Get the OS CWD.
+ break;
+ }
+ FALLTHROUGH; // In global directory, just need to get OS CWD.
+ case kCdScopeInvalid: // If called without any arguments, get OS CWD.
+ if (os_dirname(cwd, MAXPATHL) == FAIL) {
from = (char_u *)""; // Return empty string on failure.
}
- break;
- case kCdScopeInvalid: // We should never get here
- abort();
}
if (from) {
@@ -4667,7 +4665,7 @@ static void f_haslocaldir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
// Numbers of the scope objects (window, tab) we want the working directory
// of. A `-1` means to skip this scope, a `0` means the current object.
int scope_number[] = {
- [kCdScopeWindow ] = 0, // Number of window to look at.
+ [kCdScopeWindow] = 0, // Number of window to look at.
[kCdScopeTabpage] = 0, // Number of tab to look at.
};
@@ -6182,7 +6180,7 @@ static void find_some_match(typval_T *const argvars, typval_T *const rettv,
if (regmatch.regprog != NULL) {
regmatch.rm_ic = p_ic;
- for (;; ) {
+ for (;;) {
if (l != NULL) {
if (li == NULL) {
match = false;
@@ -7727,8 +7725,8 @@ static void f_resolve(typval_T *argvars, typval_T *rettv, FunPtr fptr)
char *const buf = xmallocz(MAXPATHL);
char *cpy;
- for (;; ) {
- for (;; ) {
+ for (;;) {
+ for (;;) {
len = readlink(p, buf, MAXPATHL);
if (len <= 0) {
break;
@@ -8603,7 +8601,7 @@ long do_searchpair(const char *spat, const char *mpat, const char *epat, int dir
clearpos(&firstpos);
clearpos(&foundpos);
pat = pat3;
- for (;; ) {
+ for (;;) {
searchit_arg_T sia;
memset(&sia, 0, sizeof(sia));
sia.sa_stop_lnum = lnum_stop;
diff --git a/src/nvim/eval/typval.h b/src/nvim/eval/typval.h
index 69732f1a7d..d1275d6512 100644
--- a/src/nvim/eval/typval.h
+++ b/src/nvim/eval/typval.h
@@ -141,7 +141,7 @@ typedef struct {
dict_T *v_dict; ///< Dictionary for VAR_DICT, can be NULL.
partial_T *v_partial; ///< Closure: function with args.
blob_T *v_blob; ///< Blob for VAR_BLOB, can be NULL.
- } vval; ///< Actual value.
+ } vval; ///< Actual value.
} typval_T;
/// Values for (struct dictvar_S).dv_scope
diff --git a/src/nvim/eval/userfunc.c b/src/nvim/eval/userfunc.c
index 80a22f6f9d..9478a8441b 100644
--- a/src/nvim/eval/userfunc.c
+++ b/src/nvim/eval/userfunc.c
@@ -2141,7 +2141,7 @@ void ex_function(exarg_T *eap)
}
// find extra arguments "range", "dict", "abort" and "closure"
- for (;; ) {
+ for (;;) {
p = skipwhite(p);
if (STRNCMP(p, "range", 5) == 0) {
flags |= FC_RANGE;
@@ -2204,7 +2204,7 @@ void ex_function(exarg_T *eap)
indent = 2;
nesting = 0;
- for (;; ) {
+ for (;;) {
if (KeyTyped) {
msg_scroll = true;
saved_wait_return = false;
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index 66e30bdf2b..77944851d2 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -303,7 +303,7 @@ void ex_align(exarg_T *eap)
* Now try to move the line as much as possible to
* the right. Stop when it moves too far.
*/
- do{
+ do {
(void)set_indent(++new_indent, 0);
}
while (linelen(NULL) <= width);
@@ -774,7 +774,7 @@ void ex_retab(exarg_T *eap)
col = 0;
vcol = 0;
did_undo = false;
- for (;; ) {
+ for (;;) {
if (ascii_iswhite(ptr[col])) {
if (!got_tab && num_spaces == 0) {
// First consecutive white-space
@@ -2150,7 +2150,7 @@ static int check_readonly(int *forceit, buf_T *buf)
if (buf->b_p_ro) {
dialog_msg(buff,
- _( "'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
+ _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
buf->b_fname);
} else {
dialog_msg(buff,
@@ -2944,7 +2944,7 @@ void ex_append(exarg_T *eap)
State |= LANGMAP;
}
- for (;; ) {
+ for (;;) {
msg_scroll = TRUE;
need_wait_return = false;
if (curbuf->b_p_ai) {
@@ -3719,7 +3719,7 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout, bool do_buf_event, handle
* 4. if subflags.do_all is set, find next match
* 5. break if there isn't another match in this line
*/
- for (;; ) {
+ for (;;) {
SubResult current_match = {
.start = { 0, 0 },
.end = { 0, 0 },
@@ -5030,9 +5030,9 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches, bool
// When the string starting with "expr-" and containing '?' and matches
// the table, it is taken literally (but ~ is escaped). Otherwise '?'
// is recognized as a wildcard.
- for (i = (int)ARRAY_SIZE(expr_table); --i >= 0; ) {
+ for (i = (int)ARRAY_SIZE(expr_table); --i >= 0;) {
if (STRCMP(arg + 5, expr_table[i]) == 0) {
- for (int si = 0, di = 0; ; si++) {
+ for (int si = 0, di = 0;; si++) {
if (arg[si] == '~') {
d[di++] = '\\';
}
@@ -5047,7 +5047,7 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches, bool
} else {
// Recognize a few exceptions to the rule. Some strings that contain
// '*' with "star". Otherwise '*' is recognized as a wildcard.
- for (i = (int)ARRAY_SIZE(mtable); --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 787b3f07b2..449e6f7bf5 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -410,7 +410,7 @@ static void script_dump_profile(FILE *fd)
} else {
// Keep going till the end of file, so that trailing
// continuation lines are listed.
- for (int i = 0; ; i++) {
+ for (int i = 0;; i++) {
if (vim_fgets(IObuff, IOSIZE, sfd)) {
break;
}
@@ -2505,7 +2505,7 @@ static char_u *get_one_sourceline(struct source_cookie *sp)
// Loop until there is a finished line (or end-of-file).
sp->sourcing_lnum++;
- for (;; ) {
+ for (;;) {
// make room to read at least 120 (more) characters
ga_grow(&ga, 120);
buf = (char_u *)ga.ga_data;
diff --git a/src/nvim/ex_cmds_defs.h b/src/nvim/ex_cmds_defs.h
index 6e5dd144ad..ea899b660b 100644
--- a/src/nvim/ex_cmds_defs.h
+++ b/src/nvim/ex_cmds_defs.h
@@ -135,10 +135,10 @@ typedef struct {
// Flags for the cs_lflags item in cstack_T.
enum {
- CSL_HAD_LOOP = 1, // just found ":while" or ":for"
+ CSL_HAD_LOOP = 1, // just found ":while" or ":for"
CSL_HAD_ENDLOOP = 2, // just found ":endwhile" or ":endfor"
- CSL_HAD_CONT = 4, // just found ":continue"
- CSL_HAD_FINA = 8, // just found ":finally"
+ CSL_HAD_CONT = 4, // just found ":continue"
+ CSL_HAD_FINA = 8, // just found ":finally"
};
/// Arguments used for Ex commands.
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index e622a2a68f..62919c98f7 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -432,8 +432,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline, void *cookie, int flags)
if (next_cmdline == NULL
&& !force_abort
&& cstack.cs_idx < 0
- && !(getline_is_func &&
- func_has_abort(real_cookie))) {
+ && !(getline_is_func
+ && func_has_abort(real_cookie))) {
did_emsg = FALSE;
}
@@ -2065,7 +2065,7 @@ int parse_command_modifiers(exarg_T *eap, char **errormsg, bool skip_only)
eap->save_msg_silent = -1;
// Repeat until no more command modifiers are found.
- for (;; ) {
+ for (;;) {
while (*eap->cmd == ' '
|| *eap->cmd == '\t'
|| *eap->cmd == ':') {
@@ -2715,7 +2715,7 @@ static char_u *find_ucmd(exarg_T *eap, char_u *p, int *full, expand_T *xp, int *
* Look for buffer-local user commands first, then global ones.
*/
gap = &curbuf->b_ucmds;
- for (;; ) {
+ for (;;) {
for (j = 0; j < gap->ga_len; ++j) {
uc = USER_CMD_GA(gap, j);
cp = eap->cmd;
@@ -4071,7 +4071,7 @@ static linenr_T get_address(exarg_T *eap, char_u **ptr, cmd_addr_T addr_type, in
}
}
- for (;; ) {
+ for (;;) {
cmd = skipwhite(cmd);
if (*cmd != '-' && *cmd != '+' && !ascii_isdigit(*cmd)) {
break;
@@ -5326,7 +5326,7 @@ static void uc_list(char_u *name, size_t name_len)
garray_T *gap = (cmdwin_type != 0 && get_cmdline_type() == NUL)
? &prevwin->w_buffer->b_ucmds
: &curbuf->b_ucmds;
- for (;; ) {
+ for (;;) {
for (i = 0; i < gap->ga_len; ++i) {
cmd = USER_CMD_GA(gap, i);
a = cmd->uc_argt;
@@ -5713,7 +5713,7 @@ static void ex_delcommand(exarg_T *eap)
garray_T *gap;
gap = &curbuf->b_ucmds;
- for (;; ) {
+ for (;;) {
for (i = 0; i < gap->ga_len; ++i) {
cmd = USER_CMD_GA(gap, i);
cmp = STRCMP(eap->arg, cmd->uc_name);
@@ -6153,12 +6153,12 @@ static void do_ucmd(exarg_T *eap)
* Second round: copy result into "buf".
*/
buf = NULL;
- for (;; ) {
+ for (;;) {
p = cmd->uc_rep; // source
q = buf; // destination
totlen = 0;
- for (;; ) {
+ for (;;) {
start = vim_strchr(p, '<');
if (start != NULL) {
end = vim_strchr(start + 1, '>');
@@ -6184,7 +6184,7 @@ static void do_ucmd(exarg_T *eap)
}
}
- // break if there no <item> is found
+ // break if no <item> is found
if (start == NULL || end == NULL) {
break;
}
@@ -7753,6 +7753,7 @@ void post_chdir(CdScope scope, bool trigger_dirchanged)
abort();
}
+ last_chdir_reason = NULL;
shorten_fnames(true);
if (trigger_dirchanged) {
@@ -7870,7 +7871,9 @@ static void ex_pwd(exarg_T *eap)
#endif
if (p_verbose > 0) {
char *context = "global";
- if (curwin->w_localdir != NULL) {
+ if (last_chdir_reason != NULL) {
+ context = last_chdir_reason;
+ } else if (curwin->w_localdir != NULL) {
context = "window";
} else if (curtab->tp_localdir != NULL) {
context = "tabpage";
@@ -8983,8 +8986,8 @@ ssize_t find_cmdline_var(const char_u *src, size_t *usedlen)
/// @return an allocated string if a valid match was found.
/// Returns NULL if no match was found. "usedlen" then still contains the
/// number of characters to skip.
-char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnump,
- char **errormsg, int *escaped)
+char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnump, char **errormsg,
+ int *escaped)
{
int i;
char_u *s;
@@ -9252,7 +9255,7 @@ static char_u *arg_all(void)
* first time: compute the total length
* second time: concatenate the names
*/
- for (;; ) {
+ for (;;) {
len = 0;
for (idx = 0; idx < ARGCOUNT; ++idx) {
p = alist_name(&ARGLIST[idx]);
@@ -9315,7 +9318,7 @@ char_u *expand_sfile(char_u *arg)
result = vim_strsave(arg);
- for (p = result; *p; ) {
+ for (p = result; *p;) {
if (STRNCMP(p, "<sfile>", 7) != 0) {
++p;
} else {
@@ -9461,7 +9464,7 @@ static void ex_filetype(exarg_T *eap)
}
// Accept "plugin" and "indent" in any order.
- for (;; ) {
+ for (;;) {
if (STRNCMP(arg, "plugin", 6) == 0) {
plugin = true;
arg = skipwhite(arg + 6);
diff --git a/src/nvim/ex_eval.c b/src/nvim/ex_eval.c
index 348a26d723..f60f0ebe98 100644
--- a/src/nvim/ex_eval.c
+++ b/src/nvim/ex_eval.c
@@ -1628,7 +1628,7 @@ void ex_endtry(exarg_T *eap)
eap->errmsg = get_end_emsg(cstack);
// Find the matching ":try" and report what's missing.
idx = cstack->cs_idx;
- do{
+ do {
--idx;
}
while (idx > 0 && !(cstack->cs_flags[idx] & CSF_TRY));
@@ -2091,7 +2091,7 @@ int has_loop_cmd(char_u *p)
int len;
// skip modifiers, white space and ':'
- for (;; ) {
+ for (;;) {
while (*p == ' ' || *p == '\t' || *p == ':') {
++p;
}
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index 0716b5445d..3b5953ae69 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -1665,7 +1665,7 @@ static int may_do_command_line_next_incsearch(int firstc, long count, incsearch_
static void command_line_next_histidx(CommandLineState *s, bool next_match)
{
int j = (int)STRLEN(s->lookfor);
- for (;; ) {
+ for (;;) {
// one step backwards
if (!next_match) {
if (s->hiscnt == hislen) {
@@ -2686,7 +2686,7 @@ static void color_expr_cmdline(const CmdlineInfo *const colored_ccline,
viml_parser_destroy(&pstate);
kv_resize(ret_ccline_colors->colors, kv_size(colors));
size_t prev_end = 0;
- for (size_t i = 0 ; i < kv_size(colors) ; i++) {
+ for (size_t i = 0; i < kv_size(colors); i++) {
const ParserHighlightChunk chunk = kv_A(colors, i);
assert(chunk.start.col < INT_MAX);
assert(chunk.end_col < INT_MAX);
@@ -3466,7 +3466,7 @@ static bool cmdline_paste(int regname, bool literally, bool remcr)
int len;
// Locate start of last word in the cmd buffer.
- for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; ) {
+ for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff;) {
len = utf_head_off(ccline.cmdbuff, w - 1) + 1;
if (!vim_iswordc(utf_ptr2char(w - len))) {
break;
@@ -4386,7 +4386,7 @@ static int showmatches(expand_T *xp, int wildmenu)
msg_outtrans_long_attr(p + 2, HL_ATTR(HLF_D));
break;
}
- for (j = maxlen - lastlen; --j >= 0; ) {
+ for (j = maxlen - lastlen; --j >= 0;) {
msg_putchar(' ');
}
if (xp->xp_context == EXPAND_FILES
@@ -4457,7 +4457,7 @@ char_u *sm_gettail(char_u *s, bool eager)
char_u *t = s;
int had_sep = FALSE;
- for (p = s; *p != NUL; ) {
+ for (p = s; *p != NUL;) {
if (vim_ispathsep(*p)
#ifdef BACKSLASH_IN_FILENAME
&& !rem_backslash(p)
@@ -5219,7 +5219,7 @@ static void expand_shellcmd(char_u *filepat, int *num_file, char_u ***file, int
ga_init(&ga, (int)sizeof(char *), 10);
hashtab_T found_ht;
hash_init(&found_ht);
- for (s = path; ; s = e) {
+ for (s = path;; s = e) {
e = vim_strchr(s, ENV_SEPCHAR);
if (e == NULL) {
e = s + STRLEN(s);
diff --git a/src/nvim/ex_session.c b/src/nvim/ex_session.c
index 9aa8cc0107..f80a63560c 100644
--- a/src/nvim/ex_session.c
+++ b/src/nvim/ex_session.c
@@ -345,8 +345,8 @@ static int put_view(FILE *fd, win_T *wp, int add_edit, unsigned *flagp, int curr
// Load the file.
//
if (wp->w_buffer->b_ffname != NULL
- && (!bt_nofile(wp->w_buffer) ||
- wp->w_buffer->terminal)) {
+ && (!bt_nofile(wp->w_buffer)
+ || wp->w_buffer->terminal)) {
// Editing a file in this buffer: use ":edit file".
// This may have side effects! (e.g., compressed or network file).
//
@@ -431,8 +431,8 @@ static int put_view(FILE *fd, win_T *wp, int add_edit, unsigned *flagp, int curr
//
if ((*flagp & SSOP_FOLDS)
&& wp->w_buffer->b_ffname != NULL
- && (bt_normal(wp->w_buffer) ||
- bt_help(wp->w_buffer))) {
+ && (bt_normal(wp->w_buffer)
+ || bt_help(wp->w_buffer))) {
if (put_folds(fd, wp) == FAIL) {
return FAIL;
}
diff --git a/src/nvim/file_search.c b/src/nvim/file_search.c
index 36257fefb3..3a9acbd61c 100644
--- a/src/nvim/file_search.c
+++ b/src/nvim/file_search.c
@@ -605,9 +605,9 @@ char_u *vim_findfile(void *search_ctx_arg)
}
// upward search loop
- for (;; ) {
+ for (;;) {
// downward search loop
- for (;; ) {
+ for (;;) {
// check if user user wants to stop the search
os_breakcheck();
if (got_int) {
@@ -829,7 +829,7 @@ char_u *vim_findfile(void *search_ctx_arg)
} else {
suf = curbuf->b_p_sua;
}
- for (;; ) {
+ for (;;) {
// if file exists and we didn't already find it
if ((path_with_url((char *)file_path)
|| (os_path_exists(file_path)
@@ -1500,7 +1500,7 @@ char_u *find_file_in_path_option(char_u *ptr, size_t len, int options, int first
/* When the file doesn't exist, try adding parts of
* 'suffixesadd'. */
buf = suffixes;
- for (;; ) {
+ for (;;) {
if (
(os_path_exists(NameBuff)
&& (find_what == FINDFILE_BOTH
@@ -1530,7 +1530,7 @@ char_u *find_file_in_path_option(char_u *ptr, size_t len, int options, int first
did_findfile_init = FALSE;
}
- for (;; ) {
+ for (;;) {
if (did_findfile_init) {
file_name = vim_findfile(fdip_search_ctx);
if (file_name != NULL) {
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index 321d884d9c..7573064fa9 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -995,7 +995,7 @@ retry:
long tlen;
tlen = 0;
- for (;; ) {
+ for (;;) {
p = ml_get(read_buf_lnum) + read_buf_col;
n = (int)STRLEN(p);
if ((int)tlen + n + 1 > size) {
@@ -3125,7 +3125,7 @@ nobackup:
// If conversion is taking place, we may first pretend to write and check
// for conversion errors. Then loop again to write for real.
// When not doing conversion this writes for real right away.
- for (checking_conversion = true; ; checking_conversion = false) {
+ for (checking_conversion = true;; checking_conversion = false) {
// There is no need to check conversion when:
// - there is no conversion
// - we make a backup file, that can be restored in case of conversion
@@ -4265,8 +4265,8 @@ static char_u *check_for_bom(char_u *p, long size, int *lenp, int flags)
len = 4;
} else if (flags == (FIO_UCS2 | FIO_ENDIAN_L)) {
name = "ucs-2le"; // FF FE
- } else if (flags == FIO_ALL ||
- flags == (FIO_UTF16 | FIO_ENDIAN_L)) {
+ } else if (flags == FIO_ALL
+ || flags == (FIO_UTF16 | FIO_ENDIAN_L)) {
// utf-16le is preferred, it also works for ucs-2le text
name = "utf-16le"; // FF FE
}
@@ -4811,8 +4811,8 @@ int check_timestamps(int focus)
}
if (!stuff_empty() || global_busy || !typebuf_typed()
- || autocmd_busy || curbuf->b_ro_locked > 0 ||
- allbuf_lock > 0) {
+ || autocmd_busy || curbuf->b_ro_locked > 0
+ || allbuf_lock > 0) {
need_check_timestamps = true; // check later
} else {
no_wait_return++;
@@ -5727,7 +5727,7 @@ long read_eintr(int fd, void *buf, size_t bufsize)
{
long ret;
- for (;; ) {
+ for (;;) {
ret = read(fd, buf, bufsize);
if (ret >= 0 || errno != EINTR) {
break;
diff --git a/src/nvim/fold.c b/src/nvim/fold.c
index daf0df9326..4a8be7a31b 100644
--- a/src/nvim/fold.c
+++ b/src/nvim/fold.c
@@ -202,7 +202,7 @@ bool hasFoldingWin(win_T *const win, const linenr_T lnum, linenr_T *const firstp
* Recursively search for a fold that contains "lnum".
*/
garray_T *gap = &win->w_folds;
- for (;; ) {
+ for (;;) {
if (!foldFind(gap, lnum_rel, &fp)) {
break;
}
@@ -455,7 +455,7 @@ void foldOpenCursor(void)
checkupdate(curwin);
if (hasAnyFolding(curwin)) {
- for (;; ) {
+ for (;;) {
done = DONE_NOTHING;
(void)setManualFold(curwin->w_cursor, true, false, &done);
if (!(done & DONE_ACTION)) {
@@ -716,7 +716,7 @@ void deleteFold(win_T *const wp, const linenr_T start, const linenr_T end, const
garray_T *found_ga = NULL;
linenr_T lnum_off = 0;
bool use_level = false;
- for (;; ) {
+ for (;;) {
if (!foldFind(gap, lnum - lnum_off, &fp)) {
break;
}
@@ -897,7 +897,7 @@ int foldMoveTo(const bool updown, const int dir, const long count)
linenr_T lnum_found = curwin->w_cursor.lnum;
int level = 0;
bool last = false;
- for (;; ) {
+ for (;;) {
if (!foldFind(gap, curwin->w_cursor.lnum - lnum_off, &fp)) {
if (!updown || gap->ga_len == 0) {
break;
@@ -1155,7 +1155,7 @@ static int foldLevelWin(win_T *wp, linenr_T lnum)
// Recursively search for a fold that contains "lnum".
gap = &wp->w_folds;
- for (;; ) {
+ for (;;) {
if (!foldFind(gap, lnum_rel, &fp)) {
break;
}
@@ -1265,7 +1265,7 @@ static linenr_T setManualFoldWin(win_T *wp, linenr_T lnum, int opening, int recu
* Find the fold, open or close it.
*/
gap = &wp->w_folds;
- for (;; ) {
+ for (;;) {
if (!foldFind(gap, lnum, &fp)) {
// If there is a following fold, continue there next time.
if (fp != NULL && fp < (fold_T *)gap->ga_data + gap->ga_len) {
@@ -1928,7 +1928,7 @@ void foldtext_cleanup(char_u *str)
}
parseMarker(curwin);
- for (s = str; *s != NUL; ) {
+ for (s = str; *s != NUL;) {
size_t len = 0;
if (STRNCMP(s, curwin->w_p_fmr, foldstartmarkerlen) == 0) {
len = foldstartmarkerlen;
@@ -2603,7 +2603,7 @@ static linenr_T foldUpdateIEMSRecurse(garray_T *const gap, const int level,
}
// delete following folds that end before the current line
- for (;; ) {
+ for (;;) {
fp2 = fp + 1;
if (fp2 >= (fold_T *)gap->ga_data + gap->ga_len
|| fp2->fd_top > flp->lnum) {
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 5267b313c7..2f4b59837a 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -1453,7 +1453,7 @@ int vgetc(void)
} else {
mod_mask = 0x0;
last_recorded_len = 0;
- for (;; ) { // this is done twice if there are modifiers
+ for (;;) { // this is done twice if there are modifiers
bool did_inc = false;
if (mod_mask) { // no mapping after modifier has been read
no_mapping++;
@@ -1793,7 +1793,7 @@ static int vgetorpeek(bool advance)
* If a mapped key sequence is found we go back to the start to
* try re-mapping.
*/
- for (;; ) {
+ for (;;) {
/*
* os_breakcheck() is slow, don't use it too often when
* inside a mapping. But call it each time for typed
@@ -1861,8 +1861,8 @@ static int vgetorpeek(bool advance)
&& State != CONFIRM
&& !((ctrl_x_mode_not_default() && vim_is_ctrl_x_key(c1))
|| ((compl_cont_status & CONT_LOCAL)
- && (c1 == Ctrl_N ||
- c1 == Ctrl_P)))) {
+ && (c1 == Ctrl_N
+ || c1 == Ctrl_P)))) {
if (c1 == K_SPECIAL) {
nolmaplen = 2;
} else {
@@ -1951,7 +1951,7 @@ static int vgetorpeek(bool advance)
* If one of the typed keys cannot be
* remapped, skip the entry.
*/
- for (n = mlen; --n >= 0; ) {
+ for (n = mlen; --n >= 0;) {
if (*s++ & (RM_NONE|RM_ABBR)) {
break;
}
@@ -2550,7 +2550,7 @@ int inchar(char_u *buf, int maxlen, long wait_time)
#define DUM_LEN MAXMAPLEN * 3 + 3
char_u dum[DUM_LEN + 1];
- for (;; ) {
+ for (;;) {
len = os_inchar(dum, DUM_LEN, 0L, 0, NULL);
if (len == 0 || (len == 1 && dum[0] == 3)) {
break;
@@ -3599,7 +3599,7 @@ char_u *set_context_in_map_cmd(expand_T *xp, char_u *cmd, char_u *arg, bool forc
expand_isabbrev = isabbrev;
xp->xp_context = EXPAND_MAPPINGS;
expand_buffer = false;
- for (;; ) {
+ for (;;) {
if (STRNCMP(arg, "<buffer>", 8) == 0) {
expand_buffer = true;
arg = skipwhite(arg + 8);
@@ -3987,7 +3987,7 @@ char_u *vim_strsave_escape_csi(char_u *p)
// 0xc0 -> 0xc3 - 0x80 -> 0xc3 K_SPECIAL KS_SPECIAL KE_FILLER
char_u *res = xmalloc(STRLEN(p) * 4 + 1);
char_u *d = res;
- for (char_u *s = p; *s != NUL; ) {
+ for (char_u *s = p; *s != NUL;) {
if (s[0] == K_SPECIAL && s[1] != NUL && s[2] != NUL) {
// Copy special key unmodified.
*d++ = *s++;
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index e2d3378402..b5e1fda9f1 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -789,6 +789,8 @@ extern char_u *compiled_sys;
// directory is not a local directory, globaldir is NULL.
EXTERN char_u *globaldir INIT(= NULL);
+EXTERN char *last_chdir_reason INIT(= NULL);
+
// Whether 'keymodel' contains "stopsel" and "startsel".
EXTERN bool km_stopsel INIT(= false);
EXTERN bool km_startsel INIT(= false);
@@ -842,6 +844,7 @@ EXTERN disptick_T display_tick INIT(= 0);
// cursor position in Insert mode.
EXTERN linenr_T spell_redraw_lnum INIT(= 0);
+// uncrustify:off
// The error messages that can be shared are included here.
// Excluded are errors that are only used once and debugging messages.
@@ -850,12 +853,8 @@ EXTERN char e_afterinit[] INIT(= N_("E905: Cannot set this option after startup"
EXTERN char e_api_spawn_failed[] INIT(= N_("E903: Could not spawn API job"));
EXTERN char e_argreq[] INIT(= N_("E471: Argument required"));
EXTERN char e_backslash[] INIT(= N_("E10: \\ should be followed by /, ? or &"));
-EXTERN char e_cmdwin[] INIT(=
- N_(
- "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"));
-EXTERN char e_curdir[] INIT(=
- N_(
- "E12: Command not allowed from exrc/vimrc in current dir or tag search"));
+EXTERN char e_cmdwin[] INIT(= N_("E11: Invalid in command-line window; <CR> executes, CTRL-C quits"));
+EXTERN char e_curdir[] INIT(= N_( "E12: Command not allowed from exrc/vimrc in current dir or tag search"));
EXTERN char e_endif[] INIT(= N_("E171: Missing :endif"));
EXTERN char e_endtry[] INIT(= N_("E600: Missing :endtry"));
EXTERN char e_endwhile[] INIT(= N_("E170: Missing :endwhile"));
@@ -885,10 +884,7 @@ EXTERN char e_channotpty[] INIT(= N_("E904: channel is not a pty"));
EXTERN char e_stdiochan2[] INIT(= N_("E905: Couldn't open stdio channel: %s"));
EXTERN char e_invstream[] INIT(= N_("E906: invalid stream for channel"));
EXTERN char e_invstreamrpc[] INIT(= N_("E906: invalid stream for rpc channel, use 'rpc'"));
-EXTERN char e_streamkey[] INIT(=
- N_(
- "E5210: dict key '%s' already set for buffered stream in channel %"
- PRIu64));
+EXTERN char e_streamkey[] INIT(= N_("E5210: dict key '%s' already set for buffered stream in channel %" PRIu64));
EXTERN char e_libcall[] INIT(= N_("E364: Library call failed for \"%s()\""));
EXTERN char e_fsync[] INIT(= N_("E667: Fsync failed: %s"));
EXTERN char e_mkdir[] INIT(= N_("E739: Cannot create directory %s: %s"));
@@ -939,9 +935,7 @@ EXTERN char e_dictkey[] INIT(= N_("E716: Key not present in Dictionary: \"%s\"")
EXTERN char e_listreq[] INIT(= N_("E714: List required"));
EXTERN char e_listblobreq[] INIT(= N_("E897: List or Blob required"));
EXTERN char e_listdictarg[] INIT(= N_("E712: Argument of %s must be a List or Dictionary"));
-EXTERN char e_listdictblobarg[] INIT(=
- N_(
- "E896: Argument of %s must be a List, Dictionary or Blob"));
+EXTERN char e_listdictblobarg[] INIT(= N_("E896: Argument of %s must be a List, Dictionary or Blob"));
EXTERN char e_readerrf[] INIT(= N_("E47: Error while reading errorfile"));
EXTERN char e_sandbox[] INIT(= N_("E48: Not allowed in sandbox"));
EXTERN char e_secure[] INIT(= N_("E523: Not allowed here"));
@@ -980,25 +974,21 @@ EXTERN char e_unsupportedoption[] INIT(= N_("E519: Option not supported"));
EXTERN char e_fnametoolong[] INIT(= N_("E856: Filename too long"));
EXTERN char e_float_as_string[] INIT(= N_("E806: using Float as a String"));
-EXTERN char e_autocmd_err[] INIT(=N_("E5500: autocmd has thrown an exception: %s"));
-EXTERN char e_cmdmap_err[] INIT(=N_("E5520: <Cmd> mapping must end with <CR>"));
-EXTERN char
-e_cmdmap_repeated[] INIT(=N_("E5521: <Cmd> mapping must end with <CR> before second <Cmd>"));
-EXTERN char e_cmdmap_key[] INIT(=N_("E5522: <Cmd> mapping must not include %s key"));
+EXTERN char e_autocmd_err[] INIT(= N_("E5500: autocmd has thrown an exception: %s"));
+EXTERN char e_cmdmap_err[] INIT(= N_("E5520: <Cmd> mapping must end with <CR>"));
+EXTERN char e_cmdmap_repeated[] INIT(= N_("E5521: <Cmd> mapping must end with <CR> before second <Cmd>"));
+EXTERN char e_cmdmap_key[] INIT(= N_("E5522: <Cmd> mapping must not include %s key"));
-EXTERN char e_api_error[] INIT(=N_("E5555: API call: %s"));
+EXTERN char e_api_error[] INIT(= N_("E5555: API call: %s"));
-EXTERN char e_luv_api_disabled[] INIT(=N_("E5560: %s must not be called in a lua loop callback"));
+EXTERN char e_luv_api_disabled[] INIT(= N_("E5560: %s must not be called in a lua loop callback"));
-EXTERN char e_floatonly[] INIT(=N_(
- "E5601: Cannot close window, only floating window would remain"));
-EXTERN char e_floatexchange[] INIT(=N_("E5602: Cannot exchange or rotate float"));
+EXTERN char e_floatonly[] INIT(= N_("E5601: Cannot close window, only floating window would remain"));
+EXTERN char e_floatexchange[] INIT(= N_("E5602: Cannot exchange or rotate float"));
EXTERN char e_non_empty_string_required[] INIT(= N_("E1142: Non-empty string required"));
-EXTERN char e_cannot_define_autocommands_for_all_events[] INIT(=
- N_(
- "E1155: Cannot define autocommands for ALL events"));
+EXTERN char e_cannot_define_autocommands_for_all_events[] INIT(= N_("E1155: Cannot define autocommands for ALL events"));
EXTERN char top_bot_msg[] INIT(= N_("search hit TOP, continuing at BOTTOM"));
EXTERN char bot_top_msg[] INIT(= N_("search hit BOTTOM, continuing at TOP"));
@@ -1020,6 +1010,8 @@ EXTERN bool embedded_mode INIT(= false);
// Do not start a UI nor read/write to stdio (unless embedding).
EXTERN bool headless_mode INIT(= false);
+// uncrustify:on
+
/// Used to track the status of external functions.
/// Currently only used for iconv().
typedef enum {
diff --git a/src/nvim/hardcopy.c b/src/nvim/hardcopy.c
index ab3f63c93e..93fcdc55a6 100644
--- a/src/nvim/hardcopy.c
+++ b/src/nvim/hardcopy.c
@@ -571,7 +571,7 @@ static void prt_header(prt_settings_T *const psettings, const int pagenum, const
// Use a negative line number to indicate printing in the top margin.
int page_line = 0 - prt_header_height();
mch_print_start_line(true, page_line);
- for (char_u *p = tbuf; *p != NUL; ) {
+ for (char_u *p = tbuf; *p != NUL;) {
const int l = utfc_ptr2len(p);
assert(l >= 0);
if (mch_print_text_out(p, (size_t)l)) {
@@ -986,8 +986,7 @@ static colnr_T hardcopy_line(prt_settings_T *psettings, int page_line, prt_pos_T
#define PRT_PS_DEFAULT_DPI (72) // Default user space resolution
#define PRT_PS_DEFAULT_FONTSIZE (10)
-#define PRT_MEDIASIZE_LEN (sizeof(prt_mediasize) / \
- sizeof(struct prt_mediasize_S))
+#define PRT_MEDIASIZE_LEN ARRAY_SIZE(prt_mediasize)
static struct prt_mediasize_S prt_mediasize[] =
{
@@ -2455,7 +2454,7 @@ static int prt_add_resource(struct prt_ps_resource_S *resource)
prt_dsc_textline("BeginDocument", (char *)resource->filename);
- for (;; ) {
+ for (;;) {
bytes_read = fread((char *)resource_buffer, sizeof(char_u),
sizeof(resource_buffer), fd_resource);
if (ferror(fd_resource)) {
diff --git a/src/nvim/if_cscope.c b/src/nvim/if_cscope.c
index 2c44ce380d..6f02ebfb48 100644
--- a/src/nvim/if_cscope.c
+++ b/src/nvim/if_cscope.c
@@ -557,7 +557,7 @@ static int cs_cnt_matches(size_t idx)
int nlines = 0;
char *buf = xmalloc(CSREAD_BUFSIZE);
- for (;; ) {
+ for (;;) {
errno = 0;
if (!fgets(buf, CSREAD_BUFSIZE, csinfo[idx].fr_fp)) {
if (errno == EINTR) {
@@ -966,7 +966,7 @@ static int cs_find_common(char *opt, char *pat, int forceit, int verbose, int us
qfpos++;
// next symbol must be + or -
if (strchr(CSQF_FLAGS, *qfpos) == NULL) {
- (void)semsg(_("E469: invalid cscopequickfix flag %c for %c"), *qfpos, *(qfpos - 1));;
+ (void)semsg(_("E469: invalid cscopequickfix flag %c for %c"), *qfpos, *(qfpos - 1));
return FALSE;
}
diff --git a/src/nvim/lib/kbtree.h b/src/nvim/lib/kbtree.h
index 5d9c1095bc..617773a79a 100644
--- a/src/nvim/lib/kbtree.h
+++ b/src/nvim/lib/kbtree.h
@@ -53,7 +53,7 @@
bool is_internal; \
key_t key[2*T-1]; \
kbnode_##name##_t *ptr[]; \
- } ; \
+ }; \
typedef struct { \
kbnode_##name##_t *root; \
int n_keys, n_nodes; \
diff --git a/src/nvim/lib/khash.h b/src/nvim/lib/khash.h
index e0faf94db9..8cfeb03cc4 100644
--- a/src/nvim/lib/khash.h
+++ b/src/nvim/lib/khash.h
@@ -459,7 +459,7 @@ static kh_inline khint_t __ac_X31_hash_string(const char *s)
{
khint_t h = (khint_t)*s;
if (h) {
- for (++s ; *s; ++s) { h = (h << 5) - h + (uint8_t)*s; }
+ for (++s; *s; ++s) { h = (h << 5) - h + (uint8_t)*s; }
}
return h;
}
diff --git a/src/nvim/lua/xdiff.c b/src/nvim/lua/xdiff.c
index 7eda9b6270..b2e971f9f3 100644
--- a/src/nvim/lua/xdiff.c
+++ b/src/nvim/lua/xdiff.c
@@ -17,7 +17,7 @@
#include "xdiff/xdiff.h"
typedef enum {
- kNluaXdiffModeUnified = 0,
+ kNluaXdiffModeUnified = 0,
kNluaXdiffModeOnHunkCB,
kNluaXdiffModeLocations,
} NluaXdiffMode;
diff --git a/src/nvim/mark.c b/src/nvim/mark.c
index 51f4ba635f..39f18b333d 100644
--- a/src/nvim/mark.c
+++ b/src/nvim/mark.c
@@ -235,7 +235,7 @@ pos_T *movemark(int count)
return (pos_T *)NULL;
}
- for (;; ) {
+ for (;;) {
if (curwin->w_jumplistidx + count < 0
|| curwin->w_jumplistidx + count >= curwin->w_jumplistlen) {
return (pos_T *)NULL;
diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c
index 12460646ed..42117bc762 100644
--- a/src/nvim/mbyte.c
+++ b/src/nvim/mbyte.c
@@ -764,7 +764,7 @@ int utfc_ptr2char(const char_u *p, int *pcc)
&& p[len] >= 0x80
&& utf_composinglike(p, p + len)) {
cc = utf_ptr2char(p + len);
- for (;; ) {
+ for (;;) {
pcc[i++] = cc;
if (i == MAX_MCO) {
break;
@@ -1322,7 +1322,7 @@ static int utf_strnicmp(const char_u *s1, const char_u *s2, size_t n1, size_t n2
int c1, c2, cdiff;
char_u buffer[6];
- for (;; ) {
+ for (;;) {
c1 = utf_safe_read_char_adv(&s1, &n1);
c2 = utf_safe_read_char_adv(&s2, &n2);
@@ -1933,7 +1933,7 @@ void utf_find_illegal(void)
}
curwin->w_cursor.coladd = 0;
- for (;; ) {
+ for (;;) {
p = get_cursor_pos_ptr();
if (vimconv.vc_type != CONV_NONE) {
xfree(tofree);
@@ -2363,7 +2363,7 @@ static char_u *iconv_string(const vimconv_T *const vcp, char_u *str, size_t slen
from = (char *)str;
fromlen = slen;
- for (;; ) {
+ for (;;) {
if (len == 0 || ICONV_ERRNO == ICONV_E2BIG) {
// Allocate enough room for most conversions. When re-allocating
// increase the buffer size.
diff --git a/src/nvim/memfile.c b/src/nvim/memfile.c
index 2a0ea9a269..3397296b3a 100644
--- a/src/nvim/memfile.c
+++ b/src/nvim/memfile.c
@@ -505,7 +505,7 @@ bool mf_release_all(void)
// Flush as many blocks as possible, only if there is a swapfile.
if (mfp->mf_fd >= 0) {
- for (bhdr_T *hp = mfp->mf_used_last; hp != NULL; ) {
+ for (bhdr_T *hp = mfp->mf_used_last; hp != NULL;) {
if (!(hp->bh_flags & BH_LOCKED)
&& (!(hp->bh_flags & BH_DIRTY)
|| mf_write(mfp, hp) != FAIL)) {
diff --git a/src/nvim/memline.c b/src/nvim/memline.c
index edab367f02..08202a6d5c 100644
--- a/src/nvim/memline.c
+++ b/src/nvim/memline.c
@@ -407,7 +407,7 @@ void ml_setname(buf_T *buf)
*/
dirp = p_dir;
bool found_existing_dir = false;
- for (;; ) {
+ for (;;) {
if (*dirp == NUL) { // tried all directories, fail
break;
}
@@ -504,7 +504,7 @@ void ml_open_file(buf_T *buf)
*/
dirp = p_dir;
bool found_existing_dir = false;
- for (;; ) {
+ for (;;) {
if (*dirp == NUL) {
break;
}
@@ -1236,7 +1236,7 @@ void ml_recover(bool checkext)
} else if (error) {
++no_wait_return;
msg(">>>>>>>>>>>>>");
- emsg(_( "E312: Errors detected while recovering; look for lines starting with ???"));
+ emsg(_("E312: Errors detected while recovering; look for lines starting with ???"));
--no_wait_return;
msg(_("See \":help E312\" for more information."));
msg(">>>>>>>>>>>>>");
@@ -2349,7 +2349,7 @@ static int ml_append_int(buf_T *buf, linenr_T lnum, char_u *line, colnr_T len, b
* move some of the pointer into the new block
* prepare for updating the parent block
*/
- for (;; ) { // do this twice when splitting block 1
+ for (;;) { // do this twice when splitting block 1
hp_new = ml_new_ptr(mfp);
if (hp_new == NULL) { // TODO: try to fix tree
return FAIL;
@@ -2733,7 +2733,7 @@ linenr_T ml_firstmarked(void)
* The search starts with lowest_marked line. This is the last line where
* a mark was found, adjusted by inserting/deleting lines.
*/
- for (lnum = lowest_marked; lnum <= curbuf->b_ml.ml_line_count; ) {
+ for (lnum = lowest_marked; lnum <= curbuf->b_ml.ml_line_count;) {
/*
* Find the data block containing the line.
* This also fills the stack with the blocks from the root to the data
@@ -2775,7 +2775,7 @@ void ml_clearmarked(void)
/*
* The search starts with line lowest_marked.
*/
- for (lnum = lowest_marked; lnum <= curbuf->b_ml.ml_line_count; ) {
+ for (lnum = lowest_marked; lnum <= curbuf->b_ml.ml_line_count;) {
/*
* Find the data block containing the line.
* This also fills the stack with the blocks from the root to the data
@@ -3034,7 +3034,7 @@ static bhdr_T *ml_find_line(buf_T *buf, linenr_T lnum, int action)
/*
* search downwards in the tree until a data block is found
*/
- for (;; ) {
+ for (;;) {
if ((hp = mf_get(mfp, bnum, page_count)) == NULL) {
goto error_noblock;
}
@@ -3211,7 +3211,7 @@ int resolve_symlink(const char_u *fname, char_u *buf)
// Put the result so far in tmp[], starting with the original name.
STRLCPY(tmp, fname, MAXPATHL);
- for (;; ) {
+ for (;;) {
// Limit symlink depth to 100, catch recursive loops.
if (++depth == 100) {
semsg(_("E773: Symlink loop for \"%s\""), fname);
@@ -3481,7 +3481,7 @@ static char *findswapname(buf_T *buf, char **dirp, char *old_fname, bool *found_
fname = (char *)makeswapname((char_u *)buf_fname, buf->b_ffname, buf,
(char_u *)dir_name);
- for (;; ) {
+ for (;;) {
if (fname == NULL) { // must be out of memory
break;
}
diff --git a/src/nvim/memory.c b/src/nvim/memory.c
index 547a9015b7..559a3cc435 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -573,7 +573,6 @@ void free_all_mem(void)
return;
}
entered_free_all_mem = true;
-
// Don't want to trigger autocommands from here on.
block_autocmds();
@@ -672,7 +671,7 @@ void free_all_mem(void)
first_tabpage = NULL;
// message history
- for (;; ) {
+ for (;;) {
if (delete_first_msg() == FAIL) {
break;
}
@@ -687,7 +686,7 @@ void free_all_mem(void)
// Must be after eval_clear to avoid it trying to access b:changedtick after
// freeing it.
p_acd = false;
- for (buf = firstbuf; buf != NULL; ) {
+ for (buf = firstbuf; buf != NULL;) {
bufref_T bufref;
set_bufref(&bufref, buf);
nextbuf = buf->b_next;
diff --git a/src/nvim/menu.c b/src/nvim/menu.c
index c2b6a5e402..d596b31062 100644
--- a/src/nvim/menu.c
+++ b/src/nvim/menu.c
@@ -80,7 +80,7 @@ void ex_menu(exarg_T *eap)
modes = get_menu_cmd_modes((char *)eap->cmd, eap->forceit, &noremap, &unmenu);
arg = eap->arg;
- for (;; ) {
+ for (;;) {
if (STRNCMP(arg, "<script>", 8) == 0) {
noremap = REMAP_SCRIPT;
arg = skipwhite(arg + 8);
@@ -449,7 +449,7 @@ static int add_menu_path(const char_u *const menu_path, vimmenu_T *menuarg,
}
if (c != 0) {
- menu->strings[i] = xmalloc(STRLEN(call_data) + 5 );
+ menu->strings[i] = xmalloc(STRLEN(call_data) + 5);
menu->strings[i][0] = c;
if (d == 0) {
STRCPY(menu->strings[i] + 1, call_data);
@@ -1315,7 +1315,7 @@ static char_u *menu_text(const char_u *str, int *mnemonic, char_u **actext)
}
// Find mnemonic characters "&a" and reduce "&&" to "&".
- for (p = text; p != NULL; ) {
+ for (p = text; p != NULL;) {
p = vim_strchr(p, '&');
if (p != NULL) {
if (p[1] == NUL) { // trailing "&"
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 8223e6c188..6fcd4cef8a 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -401,7 +401,7 @@ void trunc_string(char_u *s, char_u *buf, int room_in, int buflen)
}
len += n;
buf[e] = s[e];
- for (n = utfc_ptr2len(s + e); --n > 0; ) {
+ for (n = utfc_ptr2len(s + e); --n > 0;) {
if (++e == buflen) {
break;
}
@@ -883,7 +883,7 @@ char_u *msg_may_trunc(int force, char_u *s)
return s;
}
int n;
- for (n = 0; size >= room; ) {
+ for (n = 0; size >= room;) {
size -= utf_ptr2cells(s + n);
n += utfc_ptr2len(s + n);
}
@@ -2549,7 +2549,7 @@ static msgchunk_T *disp_sb_line(int row, msgchunk_T *smp)
msgchunk_T *mp = smp;
char_u *p;
- for (;; ) {
+ for (;;) {
msg_row = row;
msg_col = mp->sb_msg_col;
p = mp->sb_text;
@@ -2688,7 +2688,7 @@ static int do_more_prompt(int typed_char)
if (typed_char == NUL) {
msg_moremsg(FALSE);
}
- for (;; ) {
+ for (;;) {
/*
* Get a typed character directly from the user.
*/
@@ -3436,7 +3436,7 @@ int do_dialog(int type, char_u *title, char_u *message, char_u *buttons, int dfl
++no_wait_return;
hotkeys = msg_show_console_dialog(message, buttons, dfltbutton);
- for (;; ) {
+ for (;;) {
// Get a typed character directly from the user.
c = get_keystroke(NULL);
switch (c) {
diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c
index 5ecd4ca431..fd5d154cea 100644
--- a/src/nvim/misc1.c
+++ b/src/nvim/misc1.c
@@ -99,7 +99,7 @@ int get_leader_len(char_u *line, char_u **flags, bool backward, bool include_spa
* scan through the 'comments' option for a match
*/
found_one = FALSE;
- for (list = curbuf->b_p_com; *list; ) {
+ for (list = curbuf->b_p_com; *list;) {
// Get one option part into part_buf[]. Advance "list" to next
// one. Put "string" at start of string.
if (!got_com && flags != NULL) {
@@ -244,7 +244,7 @@ int get_last_leader_offset(char_u *line, char_u **flags)
* scan through the 'comments' option for a match
*/
found_one = FALSE;
- for (list = curbuf->b_p_com; *list; ) {
+ for (list = curbuf->b_p_com; *list;) {
char_u *flags_save = list;
/*
@@ -340,7 +340,7 @@ int get_last_leader_offset(char_u *line, char_u **flags)
}
len1 = (int)STRLEN(com_leader);
- for (list = curbuf->b_p_com; *list; ) {
+ for (list = curbuf->b_p_com; *list;) {
char_u *flags_save = list;
(void)copy_option_part(&list, part_buf2, COM_MAX_LEN, ",");
@@ -359,7 +359,7 @@ int get_last_leader_offset(char_u *line, char_u **flags)
// Now we have to verify whether string ends with a substring
// beginning the com_leader.
- for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2; ) {
+ for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2;) {
--off;
if (!STRNCMP(string + off, com_leader, len2 - off)) {
if (i - off < lower_check_bound) {
@@ -492,7 +492,7 @@ int get_keystroke(MultiQueue *events)
int waited = 0;
mapped_ctrl_c = 0; // mappings are not used here
- for (;; ) {
+ for (;;) {
// flush output before waiting
ui_flush();
// Leave some room for check_termcode() to insert a key code into (max
@@ -580,7 +580,7 @@ int get_number(int colon, int *mouse_used)
}
no_mapping++;
- for (;; ) {
+ for (;;) {
ui_cursor_goto(msg_row, msg_col);
c = safe_vgetc();
if (ascii_isdigit(c)) {
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c
index f02c000e82..386094e509 100644
--- a/src/nvim/mouse.c
+++ b/src/nvim/mouse.c
@@ -245,7 +245,7 @@ retnomove:
// Scroll by however many rows outside the window we are.
if (row < 0) {
count = 0;
- for (first = true; curwin->w_topline > 1; ) {
+ for (first = true; curwin->w_topline > 1;) {
if (curwin->w_topfill < win_get_fill(curwin, curwin->w_topline)) {
count++;
} else {
@@ -270,7 +270,7 @@ retnomove:
row = 0;
} else if (row >= curwin->w_height_inner) {
count = 0;
- for (first = true; curwin->w_topline < curbuf->b_ml.ml_line_count; ) {
+ for (first = true; curwin->w_topline < curbuf->b_ml.ml_line_count;) {
if (curwin->w_topfill > 0) {
++count;
} else {
@@ -448,7 +448,7 @@ win_T *mouse_find_win(int *gridp, int *rowp, int *colp)
fp = topframe;
*rowp -= firstwin->w_winrow;
- for (;; ) {
+ for (;;) {
if (fp->fr_layout == FR_LEAF) {
break;
}
diff --git a/src/nvim/move.c b/src/nvim/move.c
index 5114cd6d8a..d80e63e79d 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -382,8 +382,8 @@ static bool check_top_offset(void)
topline_back(curwin, &loff);
// Stop when included a line above the window.
if (loff.lnum < curwin->w_topline
- || (loff.lnum == curwin->w_topline &&
- loff.fill > 0)) {
+ || (loff.lnum == curwin->w_topline
+ && loff.fill > 0)) {
break;
}
n += loff.height;
@@ -1661,7 +1661,7 @@ void scroll_cursor_bot(int min_scroll, int set_topbot)
boff.fill = curwin->w_topfill;
boff.lnum = curwin->w_topline - 1;
int i;
- for (i = 0; i < scrolled && boff.lnum < curwin->w_botline; ) {
+ for (i = 0; i < scrolled && boff.lnum < curwin->w_botline;) {
botline_forw(curwin, &boff);
i += boff.height;
++line_count;
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index 1effeefd32..03312e5df4 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -570,8 +570,8 @@ static bool normal_need_additional_char(NormalState *s)
//
// TODO(tarruda): Visual state needs to be refactored into a
// separate state that "inherits" from normal state.
- || ((cmdchar == 'a' || cmdchar == 'i') &&
- (pending_op || VIsual_active)));
+ || ((cmdchar == 'a' || cmdchar == 'i')
+ && (pending_op || VIsual_active)));
}
static bool normal_need_redraw_mode_message(NormalState *s)
@@ -2283,7 +2283,7 @@ bool do_mouse(oparg_T *oap, int c, int dir, long count, bool fixindent)
save_cursor = curwin->w_cursor;
- for (;; ) {
+ for (;;) {
which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
if (is_drag) {
/* If the next character is the same mouse event then use that
@@ -3928,7 +3928,7 @@ bool find_decl(char_u *ptr, size_t len, bool locally, bool thisblock, int flags_
// Search forward for the identifier, ignore comment lines.
clearpos(&found_pos);
- for (;; ) {
+ for (;;) {
t = searchit(curwin, curbuf, &curwin->w_cursor, NULL, FORWARD,
pat, 1L, searchflags, RE_LAST, NULL);
if (curwin->w_cursor.lnum >= old_pos.lnum) {
@@ -4307,7 +4307,7 @@ static void nv_zet(cmdarg_T *cap)
return;
}
n = nchar - '0';
- for (;; ) {
+ for (;;) {
no_mapping++;
nchar = plain_vgetc();
LANGMAP_ADJUST(nchar, true);
@@ -5341,8 +5341,8 @@ static void nv_right(cmdarg_T *cap)
for (n = cap->count1; n > 0; --n) {
if ((!PAST_LINE && oneright() == false)
- || (PAST_LINE &&
- *get_cursor_pos_ptr() == NUL)) {
+ || (PAST_LINE
+ && *get_cursor_pos_ptr() == NUL)) {
// <Space> wraps to next line if 'whichwrap' has 's'.
// 'l' wraps to next line if 'whichwrap' has 'l'.
// CURS_RIGHT wraps to next line if 'whichwrap' has '>'.
@@ -5838,7 +5838,7 @@ static void nv_brackets(cmdarg_T *cap)
pos = NULL;
}
while (n > 0) {
- for (;; ) {
+ for (;;) {
if ((findc == '{' ? dec_cursor() : inc_cursor()) < 0) {
// if not found anything, that's an error
if (pos == NULL) {
@@ -7688,8 +7688,8 @@ static void adjust_cursor(oparg_T *oap)
// - 'virtualedit' is not "all" and not "onemore".
if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL
&& (!VIsual_active || *p_sel == 'o')
- && !virtual_active() &&
- (ve_flags & VE_ONEMORE) == 0) {
+ && !virtual_active()
+ && (ve_flags & VE_ONEMORE) == 0) {
curwin->w_cursor.col--;
// prevent cursor from moving on the trail byte
mb_adjust_cursor();
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 7d7db2a8a6..b4b9545daf 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -378,7 +378,7 @@ static void shift_block(oparg_T *oap, int amount)
bd.startspaces = 0;
}
}
- for (; ascii_iswhite(*bd.textstart); ) {
+ for (; ascii_iswhite(*bd.textstart);) {
// TODO: is passing bd.textstart for start of the line OK?
incr = lbr_chartabsize_adv(bd.textstart, &bd.textstart, (bd.start_vcol));
total += incr;
@@ -2037,7 +2037,7 @@ void op_tilde(oparg_T *oap)
did_change = swapchars(oap->op_type, &pos,
oap->end.col - pos.col + 1);
} else {
- for (;; ) {
+ for (;;) {
did_change |= swapchars(oap->op_type, &pos,
pos.lnum == oap->end.lnum ? oap->end.col + 1 :
(int)STRLEN(ml_get_pos(&pos)));
@@ -2987,7 +2987,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
/* For the = register we need to split the string at NL
* characters.
* Loop twice: count the number of lines and save them. */
- for (;; ) {
+ for (;;) {
y_size = 0;
ptr = insert_string;
while (ptr != NULL) {
@@ -3204,7 +3204,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
// get the old line and advance to the position to insert at
oldp = get_cursor_line_ptr();
oldlen = STRLEN(oldp);
- for (ptr = oldp; vcol < col && *ptr; ) {
+ for (ptr = oldp; vcol < col && *ptr;) {
// Count a tab for what it's worth (if list mode not on)
incr = lbr_chartabsize_adv(oldp, &ptr, vcol);
vcol += incr;
@@ -3936,8 +3936,8 @@ int do_join(size_t count, int insert_space, int save_undo, int use_formatoptions
|| (utf_ptr2char(curr) < 0x100 && endcurr1 < 0x100))
&& (!has_format_option(FO_MBYTE_JOIN2)
|| (utf_ptr2char(curr) < 0x100 && !utf_eat_space(endcurr1))
- || (endcurr1 < 0x100 &&
- !utf_eat_space(utf_ptr2char(curr))))) {
+ || (endcurr1 < 0x100
+ && !utf_eat_space(utf_ptr2char(curr))))) {
// don't add a space if the line is ending in a space
if (endcurr1 == ' ') {
endcurr1 = endcurr2;
@@ -5631,7 +5631,7 @@ static varnumber_T line_count_info(char_u *line, varnumber_T *wc, varnumber_T *c
varnumber_T chars = 0;
int is_word = 0;
- for (i = 0; i < limit && line[i] != NUL; ) {
+ for (i = 0; i < limit && line[i] != NUL;) {
if (is_word) {
if (ascii_isspace(line[i])) {
words++;
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 278cf7c608..45e2032b35 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -1233,7 +1233,7 @@ int do_set(char_u *arg, int opt_flags)
}
errmsg = set_bool_option(opt_idx, varp, (int)value,
- opt_flags);
+ opt_flags);
} else { // Numeric or string.
if (vim_strchr((const char_u *)"=:&<", nextchar) == NULL
|| prefix != 1) {
@@ -2315,8 +2315,8 @@ static bool valid_spellfile(const char_u *val)
/// @param opt_flags OPT_LOCAL and/or OPT_GLOBAL
/// @param value_checked value was checked to be safe, no need to set P_INSECURE
static char *did_set_string_option(int opt_idx, char_u **varp, bool new_value_alloced,
- char_u *oldval, char *errbuf, size_t errbuflen,
- int opt_flags, int *value_checked)
+ char_u *oldval, char *errbuf, size_t errbuflen, int opt_flags,
+ int *value_checked)
{
char *errmsg = NULL;
char_u *s, *p;
@@ -2625,7 +2625,7 @@ ambw_end:
}
}
} else if (gvarp == &p_com) { // 'comments'
- for (s = *varp; *s; ) {
+ for (s = *varp; *s;) {
while (*s && *s != ':') {
if (vim_strchr((char_u *)COM_ALL, *s) == NULL
&& !ascii_isdigit(*s) && *s != '-') {
@@ -2704,7 +2704,7 @@ ambw_end:
// there would be a disconnect between the check for P_ALLOCED at the start
// of the function and the set of P_ALLOCED at the end of the function.
free_oldval = (options[opt_idx].flags & P_ALLOCED);
- for (s = p_shada; *s; ) {
+ for (s = p_shada; *s;) {
// Check it's a valid character
if (vim_strchr((char_u *)"!\"%'/:<@cfhnrs", *s) == NULL) {
errmsg = illegal_char(errbuf, errbuflen, *s);
@@ -2749,7 +2749,7 @@ ambw_end:
errmsg = N_("E528: Must specify a ' value");
}
} else if (gvarp == &p_sbr) { // 'showbreak'
- for (s = *varp; *s; ) {
+ for (s = *varp; *s;) {
if (ptr2cells(s) != 1) {
errmsg = N_("E595: 'showbreak' contains unprintable or wide character");
}
@@ -2893,7 +2893,7 @@ ambw_end:
}
} else if (gvarp == &p_cpt) {
// check if it is a valid value for 'complete' -- Acevedo
- for (s = *varp; *s; ) {
+ for (s = *varp; *s;) {
while (*s == ',' || *s == ' ') {
s++;
}
@@ -3369,7 +3369,7 @@ char *check_colorcolumn(win_T *wp)
return NULL; // buffer was closed
}
- for (s = wp->w_p_cc; *s != NUL && count < 255; ) {
+ for (s = wp->w_p_cc; *s != NUL && count < 255;) {
if (*s == '-' || *s == '+') {
// -N and +N: add to 'textwidth'
col = (*s == '-') ? -1 : 1;
@@ -3436,6 +3436,37 @@ void check_blending(win_T *wp)
wp->w_p_winbl > 0 || (wp->w_floating && wp->w_float_config.shadow);
}
+/// Calls mb_cptr2char_adv(p) and returns the character.
+/// If "p" starts with "\x", "\u" or "\U" the hex or unicode value is used.
+/// Returns 0 for invalid hex or invalid UTF-8 byte.
+static int get_encoded_char_adv(char_u **p)
+{
+ char_u *s = *p;
+
+ if (s[0] == '\\' && (s[1] == 'x' || s[1] == 'u' || s[1] == 'U')) {
+ int64_t num = 0;
+ int bytes;
+ int n;
+ for (bytes = s[1] == 'x' ? 1 : s[1] == 'u' ? 2 : 4; bytes > 0; bytes--) {
+ *p += 2;
+ n = hexhex2nr(*p);
+ if (n < 0) {
+ return 0;
+ }
+ num = num * 256 + n;
+ }
+ *p += 2;
+ return (int)num;
+ }
+
+ // TODO(bfredl): use schar_T representation and utfc_ptr2len
+ int clen = utf_ptr2len(s);
+ int c = mb_cptr2char_adv((const char_u **)p);
+ if (clen == 1 && c > 127) { // Invalid UTF-8 byte
+ return 0;
+ }
+ return c;
+}
/// Handle setting 'listchars' or 'fillchars'.
/// Assume monocell characters
@@ -3540,26 +3571,21 @@ static char *set_chars_option(win_T *wp, char_u **varp, bool set)
&& p[len + 1] != NUL) {
c2 = c3 = 0;
s = p + len + 1;
-
- // TODO(bfredl): use schar_T representation and utfc_ptr2len
- int c1len = utf_ptr2len(s);
- c1 = mb_cptr2char_adv((const char_u **)&s);
- if (utf_char2cells(c1) > 1 || (c1len == 1 && c1 > 127)) {
+ c1 = get_encoded_char_adv(&s);
+ if (c1 == 0 || utf_char2cells(c1) > 1) {
return e_invarg;
}
if (tab[i].cp == &wp->w_p_lcs_chars.tab2) {
if (*s == NUL) {
return e_invarg;
}
- int c2len = utf_ptr2len(s);
- c2 = mb_cptr2char_adv((const char_u **)&s);
- if (utf_char2cells(c2) > 1 || (c2len == 1 && c2 > 127)) {
+ c2 = get_encoded_char_adv(&s);
+ if (c2 == 0 || utf_char2cells(c2) > 1) {
return e_invarg;
}
if (!(*s == ',' || *s == NUL)) {
- int c3len = utf_ptr2len(s);
- c3 = mb_cptr2char_adv((const char_u **)&s);
- if (utf_char2cells(c3) > 1 || (c3len == 1 && c3 > 127)) {
+ c3 = get_encoded_char_adv(&s);
+ if (c3 == 0 || utf_char2cells(c3) > 1) {
return e_invarg;
}
}
@@ -3592,9 +3618,8 @@ static char *set_chars_option(win_T *wp, char_u **varp, bool set)
last_multispace = p;
multispace_len = 0;
while (*s != NUL && *s != ',') {
- int c1len = utf_ptr2len(s);
- c1 = mb_cptr2char_adv((const char_u **)&s);
- if (utf_char2cells(c1) > 1 || (c1len == 1 && c1 > 127)) {
+ c1 = get_encoded_char_adv(&s);
+ if (c1 == 0 || utf_char2cells(c1) > 1) {
return e_invarg;
}
multispace_len++;
@@ -3607,7 +3632,7 @@ static char *set_chars_option(win_T *wp, char_u **varp, bool set)
} else {
int multispace_pos = 0;
while (*s != NUL && *s != ',') {
- c1 = mb_cptr2char_adv((const char_u **)&s);
+ c1 = get_encoded_char_adv(&s);
if (p == last_multispace) {
wp->w_p_lcs_chars.multispace[multispace_pos++] = c1;
}
@@ -6793,7 +6818,7 @@ static void langmap_set(void)
ga_clear(&langmap_mapga); // clear the previous map first
langmap_init(); // back to one-to-one map
- for (p = p_langmap; p[0] != NUL; ) {
+ for (p = p_langmap; p[0] != NUL;) {
for (p2 = p; p2[0] != NUL && p2[0] != ',' && p2[0] != ';';
MB_PTR_ADV(p2)) {
if (p2[0] == '\\' && p2[1] != NUL) {
diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c
index 3ff13c2b3f..e9963516fc 100644
--- a/src/nvim/os/fs.c
+++ b/src/nvim/os/fs.c
@@ -369,7 +369,7 @@ static bool is_executable_in_path(const char *name, char **abspath)
// is an executable file.
char *p = path;
bool rv = false;
- for (;; ) {
+ for (;;) {
char *e = xstrchrnul(p, ENV_SEPCHAR);
// Combine the $PATH segment with `name`.
diff --git a/src/nvim/os/stdpaths.c b/src/nvim/os/stdpaths.c
index 10b0d391bf..5b824d23f4 100644
--- a/src/nvim/os/stdpaths.c
+++ b/src/nvim/os/stdpaths.c
@@ -146,7 +146,7 @@ char *stdpaths_user_data_subpath(const char *fname, const size_t trailing_pathse
const size_t numcommas = (escape_commas ? memcnt(ret, ',', len) : 0);
if (numcommas || trailing_pathseps) {
ret = xrealloc(ret, len + trailing_pathseps + numcommas + 1);
- for (size_t i = 0 ; i < len + numcommas ; i++) {
+ for (size_t i = 0; i < len + numcommas; i++) {
if (ret[i] == ',') {
memmove(ret + i + 1, ret + i, len - i + numcommas);
ret[i] = '\\';
diff --git a/src/nvim/path.c b/src/nvim/path.c
index c28d848683..7b9081eafa 100644
--- a/src/nvim/path.c
+++ b/src/nvim/path.c
@@ -1079,7 +1079,7 @@ const char *gettail_dir(const char *const fname)
const char *next_dir_end = fname;
bool look_for_sep = true;
- for (const char *p = fname; *p != NUL; ) {
+ for (const char *p = fname; *p != NUL;) {
if (vim_ispathsep(*p)) {
if (look_for_sep) {
next_dir_end = p;
@@ -1289,8 +1289,8 @@ int gen_expand_wildcards(int num_pat, char_u **pat, int *num_file, char_u ***fil
&& !path_is_absolute(p)
&& !(p[0] == '.'
&& (vim_ispathsep(p[1])
- || (p[1] == '.' &&
- vim_ispathsep(p[2]))))) {
+ || (p[1] == '.'
+ && vim_ispathsep(p[2]))))) {
/* :find completion where 'path' is used.
* Recursiveness is OK here. */
recursive = false;
@@ -1505,7 +1505,7 @@ void simplify_filename(char_u *filename)
if (vim_ispathsep(*p)) {
relative = false;
- do{
+ do {
++p;
}
while (vim_ispathsep(*p));
@@ -1517,8 +1517,8 @@ void simplify_filename(char_u *filename)
* or "p" is at the "start" of the (absolute or relative) path name. */
if (vim_ispathsep(*p)) {
STRMOVE(p, p + 1); // remove duplicate "/"
- } else if (p[0] == '.' &&
- (vim_ispathsep(p[1]) || p[1] == NUL)) {
+ } else if (p[0] == '.'
+ && (vim_ispathsep(p[1]) || p[1] == NUL)) {
if (p == start && relative) {
p += 1 + (p[1] != NUL); // keep single "." or leading "./"
} else {
@@ -2198,7 +2198,7 @@ int match_suffix(char_u *fname)
size_t fnamelen = STRLEN(fname);
size_t setsuflen = 0;
- for (char_u *setsuf = p_su; *setsuf; ) {
+ for (char_u *setsuf = p_su; *setsuf;) {
setsuflen = copy_option_part(&setsuf, suf_buf, MAXSUFLEN, ".,");
if (setsuflen == 0) {
char_u *tail = path_tail(fname);
@@ -2245,11 +2245,17 @@ int path_full_dir_name(char *directory, char *buffer, size_t len)
}
if (os_chdir(directory) != SUCCESS) {
- // Do not return immediately since we may be in the wrong directory.
- retval = FAIL;
- }
-
- if (retval == FAIL || os_dirname((char_u *)buffer, len) == FAIL) {
+ // Path does not exist (yet). For a full path fail,
+ // will use the path as-is. For a relative path use
+ // the current directory and append the file name.
+ if (path_is_absolute((const char_u *)directory)) {
+ // Do not return immediately since we may be in the wrong directory.
+ retval = FAIL;
+ } else {
+ xstrlcpy(buffer, old_dir, len);
+ append_path(buffer, directory, len);
+ }
+ } else if (os_dirname((char_u *)buffer, len) == FAIL) {
// Do not return immediately since we are in the wrong directory.
retval = FAIL;
}
diff --git a/src/nvim/po/check.vim b/src/nvim/po/check.vim
index d55d4cfa4d..aca878f9d5 100644
--- a/src/nvim/po/check.vim
+++ b/src/nvim/po/check.vim
@@ -162,7 +162,10 @@ endwhile
" Check that the file is well formed according to msgfmts understanding
if executable("msgfmt")
let filename = expand("%")
- let a = system("msgfmt --statistics OLD_PO_FILE_INPUT=yes " . filename)
+ " Newer msgfmt does not take OLD_PO_FILE_INPUT argument, must be in
+ " environment.
+ let $OLD_PO_FILE_INPUT = 'yes'
+ let a = system("msgfmt --statistics " . filename)
if v:shell_error != 0
let error = matchstr(a, filename.':\zs\d\+\ze:')+0
for line in split(a, '\n') | echomsg line | endfor
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index bf9052de6f..6a192d148f 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -539,7 +539,7 @@ static size_t efm_regpat_bufsz(char_u *efm)
size_t sz;
sz = (FMT_PATTERNS * 3) + (STRLEN(efm) << 2);
- for (int i = FMT_PATTERNS - 1; i >= 0; ) {
+ for (int i = FMT_PATTERNS - 1; i >= 0;) {
sz += STRLEN(fmt_pat[i--].pattern);
}
#ifdef BACKSLASH_IN_FILENAME
@@ -2028,7 +2028,7 @@ void copy_loclist_stack(win_T *from, win_T *to)
/// Get buffer number for file "directory/fname".
/// Also sets the b_has_qf_entry flag.
-static int qf_get_fnum(qf_list_T *qfl, char_u *directory, char_u *fname )
+static int qf_get_fnum(qf_list_T *qfl, char_u *directory, char_u *fname)
{
char_u *ptr = NULL;
char_u *bufname;
@@ -4380,7 +4380,7 @@ static char_u *get_mef_name(void)
}
// Keep trying until the name doesn't exist yet.
- for (;; ) {
+ for (;;) {
if (start == -1) {
start = (int)os_get_pid();
} else {
diff --git a/src/nvim/runtime.c b/src/nvim/runtime.c
index 14f49d05d5..be365d4ab8 100644
--- a/src/nvim/runtime.c
+++ b/src/nvim/runtime.c
@@ -479,7 +479,7 @@ RuntimeSearchPath runtime_search_path_build(void)
CharVec after_path = KV_INITIAL_VALUE;
static char_u buf[MAXPATHL];
- for (char *entry = (char *)p_pp; *entry != NUL; ) {
+ for (char *entry = (char *)p_pp; *entry != NUL;) {
char *cur_entry = entry;
copy_option_part((char_u **)&entry, buf, MAXPATHL, ",");
@@ -491,7 +491,7 @@ RuntimeSearchPath runtime_search_path_build(void)
char *rtp_entry;
- for (rtp_entry = (char *)p_rtp; *rtp_entry != NUL; ) {
+ for (rtp_entry = (char *)p_rtp; *rtp_entry != NUL;) {
char *cur_entry = rtp_entry;
copy_option_part((char_u **)&rtp_entry, buf, MAXPATHL, ",");
size_t buflen = STRLEN(buf);
@@ -663,7 +663,7 @@ static int add_pack_dir_to_rtp(char_u *fname, bool is_pack)
}
const char *insp = NULL;
const char *after_insp = NULL;
- for (const char *entry = (const char *)p_rtp; *entry != NUL; ) {
+ for (const char *entry = (const char *)p_rtp; *entry != NUL;) {
const char *cur_entry = entry;
copy_option_part((char_u **)&entry, buf, MAXPATHL, ",");
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index cc3fab3503..2ce2be0bfd 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -1084,7 +1084,7 @@ static void win_update(win_T *wp, Providers *providers)
*/
bot_start = 0;
idx = 0;
- for (;; ) {
+ for (;;) {
wp->w_lines[idx] = wp->w_lines[j];
/* stop at line that didn't fit, unless it is still
* valid (no lines deleted) */
@@ -1359,7 +1359,7 @@ static void win_update(win_T *wp, Providers *providers)
win_check_ns_hl(wp);
- for (;; ) {
+ for (;;) {
/* stop updating when reached the end of the window (check for _past_
* the end of the window is at the end of the loop) */
if (row == wp->w_grid.Rows) {
@@ -1508,7 +1508,7 @@ static void win_update(win_T *wp, Providers *providers)
int x = row + new_rows;
// move entries in w_lines[] upwards
- for (;; ) {
+ for (;;) {
// stop at last valid entry in w_lines[]
if (i >= wp->w_lines_valid) {
wp->w_lines_valid = j;
@@ -2707,7 +2707,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool noc
int sign_idx = 0;
// Repeat for the whole displayed line.
- for (;; ) {
+ for (;;) {
int has_match_conc = 0; ///< match wants to conceal
bool did_decrement_ptr = false;
@@ -4413,8 +4413,8 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool noc
|| filler_todo > 0
|| (wp->w_p_list && wp->w_p_lcs_chars.eol != NUL
&& p_extra != at_end_str)
- || (n_extra != 0 &&
- (c_extra != NUL || *p_extra != NUL)))) {
+ || (n_extra != 0
+ && (c_extra != NUL || *p_extra != NUL)))) {
bool wrap = wp->w_p_wrap // Wrapping enabled.
&& filler_todo <= 0 // Not drawing diff filler lines.
&& lcs_eol_one != -1 // Haven't printed the lcs_eol character.
@@ -5011,8 +5011,8 @@ static int skip_status_match_char(expand_T *xp, char_u *s)
if ((rem_backslash(s) && xp->xp_context != EXPAND_HELP)
|| ((xp->xp_context == EXPAND_MENUS
|| xp->xp_context == EXPAND_MENUNAMES)
- && (s[0] == '\t' ||
- (s[0] == '\\' && s[1] != NUL)))) {
+ && (s[0] == '\t'
+ || (s[0] == '\\' && s[1] != NUL)))) {
#ifndef BACKSLASH_IN_FILENAME
if (xp->xp_shell && csh_like_shell() && s[1] == '\\' && s[2] == '!') {
return 2;
@@ -6144,7 +6144,7 @@ static void next_search_hl(win_T *win, match_T *shl, linenr_T lnum, colnr_T minc
* or none is found in this line.
*/
called_emsg = FALSE;
- for (;; ) {
+ for (;;) {
// Stop searching after passing the time limit.
if (profile_passed_limit(shl->tm)) {
shl->lnum = 0; // no match found in time
diff --git a/src/nvim/search.c b/src/nvim/search.c
index 0756fbf37d..2e45a8f509 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -370,8 +370,8 @@ int ignorecase_opt(char_u *pat, int ic_in, int scs)
{
int ic = ic_in;
if (ic && !no_smartcase && scs
- && !(ctrl_x_mode_not_default() &&
- curbuf->b_p_inf)) {
+ && !(ctrl_x_mode_not_default()
+ && curbuf->b_p_inf)) {
ic = !pat_has_uppercase(pat);
}
no_smartcase = false;
@@ -757,7 +757,7 @@ int searchit(win_T *win, buf_T *buf, pos_T *pos, pos_T *end_pos, Direction dir,
* relative to the end of the match.
*/
match_ok = false;
- for (;; ) {
+ for (;;) {
// Remember a position that is before the start
// position, we use it if it's the last match in
// the line. Always accept a position after
@@ -1105,7 +1105,7 @@ int do_search(oparg_T *oap, int dirc, int search_delim, char_u *pat, long count,
/*
* Repeat the search when pattern followed by ';', e.g. "/foo/;?bar".
*/
- for (;; ) {
+ for (;;) {
bool show_top_bot_msg = false;
searchstr = pat;
@@ -1465,7 +1465,7 @@ int search_for_exact_line(buf_T *buf, pos_T *pos, Direction dir, char_u *pat)
if (buf->b_ml.ml_line_count == 0) {
return FAIL;
}
- for (;; ) {
+ for (;;) {
pos->lnum += dir;
if (pos->lnum < 1) {
if (p_ws) {
@@ -1585,7 +1585,7 @@ int searchc(cmdarg_T *cap, int t_cmd)
len = (int)STRLEN(p);
while (count--) {
- for (;; ) {
+ for (;;) {
if (dir > 0) {
col += utfc_ptr2len(p + col);
if (col >= len) {
@@ -1808,6 +1808,9 @@ pos_T *findmatchlimit(oparg_T *oap, int initc, int flags, int64_t maxtravel)
initc = NUL;
} else if (initc != '#' && initc != NUL) {
find_mps_values(&initc, &findc, &backwards, true);
+ if (dir) {
+ backwards = (dir == FORWARD) ? false : true;
+ }
if (findc == NUL) {
return NULL;
}
@@ -1870,7 +1873,7 @@ pos_T *findmatchlimit(oparg_T *oap, int initc, int flags, int64_t maxtravel)
if (linep[pos.col] == NUL && pos.col) {
--pos.col;
}
- for (;; ) {
+ for (;;) {
initc = utf_ptr2char(linep + pos.col);
if (initc == NUL) {
break;
@@ -1894,7 +1897,7 @@ pos_T *findmatchlimit(oparg_T *oap, int initc, int flags, int64_t maxtravel)
// Set "match_escaped" if there are an odd number of
// backslashes.
- for (col = pos.col; check_prevcol(linep, col, '\\', &col); ) {
+ for (col = pos.col; check_prevcol(linep, col, '\\', &col);) {
bslcnt++;
}
match_escaped = (bslcnt & 1);
@@ -2278,7 +2281,7 @@ pos_T *findmatchlimit(oparg_T *oap, int initc, int flags, int64_t maxtravel)
int col, bslcnt = 0;
if (!cpo_bsl) {
- for (col = pos.col; check_prevcol(linep, col, '\\', &col); ) {
+ for (col = pos.col; check_prevcol(linep, col, '\\', &col);) {
bslcnt++;
}
}
@@ -2520,7 +2523,7 @@ int findsent(Direction dir, long count)
const int startlnum = pos.lnum;
const bool cpo_J = vim_strchr(p_cpo, CPO_ENDOFSENT) != NULL;
- for (;; ) { // find end of sentence
+ for (;;) { // find end of sentence
c = gchar_pos(&pos);
if (c == NUL || (pos.col == 0 && startPS(pos.lnum, NUL, FALSE))) {
if (dir == BACKWARD && pos.lnum != startlnum) {
@@ -2530,7 +2533,7 @@ int findsent(Direction dir, long count)
}
if (c == '.' || c == '!' || c == '?') {
tpos = pos;
- do{
+ do {
if ((c = inc(&tpos)) == -1) {
break;
}
@@ -3004,7 +3007,7 @@ static void back_in_line(void)
int sclass; // starting class
sclass = cls();
- for (;; ) {
+ for (;;) {
if (curwin->w_cursor.col == 0) { // stop at start of line
break;
}
@@ -3427,12 +3430,22 @@ int current_block(oparg_T *oap, long count, int include, int what, int other)
// user wants.
save_cpo = p_cpo;
p_cpo = (char_u *)(vim_strchr(p_cpo, CPO_MATCHBSL) != NULL ? "%M" : "%");
- while (count-- > 0) {
- if ((pos = findmatch(NULL, what)) == NULL) {
- break;
+ if ((pos = findmatch(NULL, what)) != NULL) {
+ while (count-- > 0) {
+ if ((pos = findmatch(NULL, what)) == NULL) {
+ break;
+ }
+ curwin->w_cursor = *pos;
+ start_pos = *pos; // the findmatch for end_pos will overwrite *pos
+ }
+ } else {
+ while (count-- > 0) {
+ if ((pos = findmatchlimit(NULL, what, FM_FORWARD, 0)) == NULL) {
+ break;
+ }
+ curwin->w_cursor = *pos;
+ start_pos = *pos; // the findmatch for end_pos will overwrite *pos
}
- curwin->w_cursor = *pos;
- start_pos = *pos; // the findmatch for end_pos will overwrite *pos
}
p_cpo = save_cpo;
@@ -3527,7 +3540,7 @@ static bool in_html_tag(bool end_tag)
int lc = NUL;
pos_T pos;
- for (p = line + curwin->w_cursor.col; p > line; ) {
+ for (p = line + curwin->w_cursor.col; p > line;) {
if (*p == '<') { // find '<' under/before cursor
break;
}
@@ -3555,7 +3568,7 @@ static bool in_html_tag(bool end_tag)
}
// check that the matching '>' is not preceded by '/'
- for (;; ) {
+ for (;;) {
if (inc(&pos) < 0) {
return false;
}
@@ -3791,7 +3804,7 @@ extend:
} else {
dir = FORWARD;
}
- for (i = count; --i >= 0; ) {
+ for (i = count; --i >= 0;) {
if (start_lnum ==
(dir == BACKWARD ? 1 : curbuf->b_ml.ml_line_count)) {
retval = FAIL;
@@ -3806,7 +3819,7 @@ extend:
start_lnum -= dir;
break;
}
- for (;; ) {
+ for (;;) {
if (start_lnum == (dir == BACKWARD
? 1 : curbuf->b_ml.ml_line_count)) {
break;
@@ -3946,7 +3959,7 @@ static int find_next_quote(char_u *line, int col, int quotechar, char_u *escape)
{
int c;
- for (;; ) {
+ for (;;) {
c = line[col];
if (c == NUL) {
return -1;
@@ -4118,7 +4131,7 @@ bool current_quote(oparg_T *oap, long count, bool include, int quotechar)
// Also do this when there is a Visual area, a' may leave the cursor
// in between two strings.
col_start = 0;
- for (;; ) {
+ for (;;) {
// Find open quote character.
col_start = find_next_quote(line, col_start, quotechar, NULL);
if (col_start < 0 || col_start > first_col) {
@@ -4842,7 +4855,7 @@ void find_pattern_in_path(char_u *ptr, Direction dir, size_t len, bool whole, bo
}
line = ml_get(lnum);
- for (;; ) {
+ for (;;) {
if (incl_regmatch.regprog != NULL
&& vim_regexec(&incl_regmatch, line, (colnr_T)0)) {
char_u *p_fname = (curr_fname == curbuf->b_fname)
@@ -5379,7 +5392,7 @@ static void show_pat_in_path(char_u *line, int type, bool did_show, int action,
if (got_int) { // 'q' typed at "--more--" message
return;
}
- for (;; ) {
+ for (;;) {
p = line + STRLEN(line) - 1;
if (fp != NULL) {
// We used fgets(), so get rid of newline at end
diff --git a/src/nvim/shada.c b/src/nvim/shada.c
index 89f9d3a719..e75a244031 100644
--- a/src/nvim/shada.c
+++ b/src/nvim/shada.c
@@ -3977,7 +3977,7 @@ static bool shada_removable(const char *name)
bool retval = false;
char *new_name = (char *)home_replace_save(NULL, (char_u *)name);
- for (p = (char *)p_shada; *p; ) {
+ for (p = (char *)p_shada; *p;) {
(void)copy_option_part((char_u **)&p, (char_u *)part, ARRAY_SIZE(part), ", ");
if (part[0] == 'r') {
home_replace(NULL, (char_u *)(part + 1), (char_u *)NameBuff, MAXPATHL, true);
diff --git a/src/nvim/sign.c b/src/nvim/sign.c
index dfa863d0ff..d8eea7f942 100644
--- a/src/nvim/sign.c
+++ b/src/nvim/sign.c
@@ -774,7 +774,7 @@ static int sign_cmd_idx(char_u *begin_cmd, char_u *end_cmd)
char_u save = *end_cmd;
*end_cmd = (char_u)NUL;
- for (idx = 0; ; idx++) {
+ for (idx = 0;; idx++) {
if (cmds[idx] == NULL || STRCMP(begin_cmd, cmds[idx]) == 0) {
break;
}
@@ -816,7 +816,7 @@ static sign_T *alloc_new_sign(char_u *name)
// Check that next_sign_typenr is not already being used.
// This only happens after wrapping around. Hopefully
// another one got deleted and we can use its number.
- for (lp = first_sign; lp != NULL; ) {
+ for (lp = first_sign; lp != NULL;) {
if (lp->sn_typenr == next_sign_typenr) {
next_sign_typenr++;
if (next_sign_typenr == MAX_TYPENR) {
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
index 20081bce4f..85d1e139bf 100644
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -622,7 +622,7 @@ static void find_word(matchinf_T *mip, int mode)
// - there is a byte that doesn't match,
// - we reach the end of the tree,
// - or we reach the end of the line.
- for (;; ) {
+ for (;;) {
if (flen <= 0 && *mip->mi_fend != NUL) {
flen = fold_more(mip);
}
@@ -689,7 +689,7 @@ static void find_word(matchinf_T *mip, int mode)
// One space in the good word may stand for several spaces in the
// checked word.
if (c == ' ') {
- for (;; ) {
+ for (;;) {
if (flen <= 0 && *mip->mi_fend != NUL) {
flen = fold_more(mip);
}
@@ -1269,7 +1269,7 @@ static void find_prefix(matchinf_T *mip, int mode)
// - there is a byte that doesn't match,
// - we reach the end of the tree,
// - or we reach the end of the line.
- for (;; ) {
+ for (;;) {
if (flen == 0 && *mip->mi_fend != NUL) {
flen = fold_more(mip);
}
@@ -2083,7 +2083,7 @@ char *did_set_spelllang(win_T *wp)
wp->w_s->b_cjk = 0;
// Loop over comma separated language names.
- for (splp = spl_copy; *splp != NUL; ) {
+ for (splp = spl_copy; *splp != NUL;) {
// Get one language name.
copy_option_part(&splp, lang, MAXWLEN, ",");
region = NULL;
@@ -2354,7 +2354,7 @@ static void use_midword(slang_T *lp, win_T *wp)
return;
}
- for (char_u *p = lp->sl_midword; *p != NUL; ) {
+ for (char_u *p = lp->sl_midword; *p != NUL;) {
const int c = utf_ptr2char(p);
const int l = utfc_ptr2len(p);
if (c < 256 && l <= 2) {
@@ -2759,7 +2759,7 @@ int spell_casefold(const win_T *wp, char_u *str, int len, char_u *buf, int bufle
int outi = 0;
// Fold one character at a time.
- for (char_u *p = str; p < str + len; ) {
+ for (char_u *p = str; p < str + len;) {
if (outi + MB_MAXBYTES > buflen) {
buf[outi] = NUL;
return FAIL;
@@ -2806,7 +2806,7 @@ int spell_check_sps(void)
sps_flags = 0;
sps_limit = 9999;
- for (p = p_sps; *p != NUL; ) {
+ for (p = p_sps; *p != NUL;) {
copy_option_part(&p, buf, MAXPATHL, ",");
f = 0;
@@ -3118,7 +3118,7 @@ static bool check_need_cap(linenr_T lnum, colnr_T col)
regmatch.regprog = curwin->w_s->b_cap_prog;
regmatch.rm_ic = FALSE;
p = line + endcol;
- for (;; ) {
+ for (;;) {
MB_PTR_BACK(line, p);
if (p == line || spell_iswordp_nmw(p, curwin)) {
break;
@@ -3330,7 +3330,7 @@ static void spell_find_suggest(char_u *badptr, int badlen, suginfo_T *su, int ma
sps_copy = vim_strsave(p_sps);
// Loop over the items in 'spellsuggest'.
- for (p = sps_copy; *p != NUL; ) {
+ for (p = sps_copy; *p != NUL;) {
copy_option_part(&p, buf, MAXPATHL, ",");
if (STRNCMP(buf, "expr:", 5) == 0) {
@@ -3557,7 +3557,7 @@ void onecap_copy(char_u *word, char_u *wcopy, bool upper)
static void allcap_copy(char_u *word, char_u *wcopy)
{
char_u *d = wcopy;
- for (char_u *s = word; *s != NUL; ) {
+ for (char_u *s = word; *s != NUL;) {
int c = mb_cptr2char_adv((const char_u **)&s);
if (c == 0xdf) {
@@ -4352,8 +4352,8 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// just deleted this byte, accepting it is always cheaper than
// delete + substitute.
if (c == fword[sp->ts_fidx]
- || (sp->ts_tcharlen > 0 &&
- sp->ts_isdiff != DIFF_NONE)) {
+ || (sp->ts_tcharlen > 0
+ && sp->ts_isdiff != DIFF_NONE)) {
newscore = 0;
} else {
newscore = SCORE_SUBST;
@@ -4513,7 +4513,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// skip over NUL bytes
n = sp->ts_arridx;
- for (;; ) {
+ for (;;) {
if (sp->ts_curi > byts[n]) {
// Only NUL bytes at this node, go to next state.
PROF_STORE(sp->ts_state)
@@ -5257,7 +5257,7 @@ static int stp_sal_score(suggest_T *stp, suginfo_T *su, slang_T *slang, char_u *
// space.
if (ascii_iswhite(su->su_badptr[su->su_badlen])
&& *skiptowhite(stp->st_word) == NUL) {
- for (p = fword; *(p = skiptowhite(p)) != NUL; ) {
+ for (p = fword; *(p = skiptowhite(p)) != NUL;) {
STRMOVE(p, p + 1);
}
}
@@ -5568,7 +5568,7 @@ static int soundfold_find(slang_T *slang, char_u *word)
byts = slang->sl_sbyts;
idxs = slang->sl_sidxs;
- for (;; ) {
+ for (;;) {
// First byte is the number of possible bytes.
len = byts[arridx++];
@@ -5701,7 +5701,7 @@ static void add_suggestion(suginfo_T *su, garray_T *gap, const char_u *goodword,
// "thee the" is added next to changing the first "the" the "thee".
const char_u *pgood = goodword + STRLEN(goodword);
char_u *pbad = su->su_badptr + badlenarg;
- for (;; ) {
+ for (;;) {
goodlen = (int)(pgood - goodword);
badlen = (int)(pbad - su->su_badptr);
if (goodlen <= 0 || badlen <= 0) {
@@ -6004,7 +6004,7 @@ static void spell_soundfold_sofo(slang_T *slang, char_u *inword, char_u *res)
// The sl_sal_first[] table contains the translation for chars up to
// 255, sl_sal the rest.
- for (char_u *s = inword; *s != NUL; ) {
+ for (char_u *s = inword; *s != NUL;) {
int c = mb_cptr2char_adv((const char_u **)&s);
if (utf_class(c) == 0) {
c = ' ';
@@ -6015,7 +6015,7 @@ static void spell_soundfold_sofo(slang_T *slang, char_u *inword, char_u *res)
if (ip == NULL) { // empty list, can't match
c = NUL;
} else {
- for (;; ) { // find "c" in the list
+ for (;;) { // find "c" in the list
if (*ip == 0) { // not found
c = NUL;
break;
@@ -6069,7 +6069,7 @@ static void spell_soundfold_wsal(slang_T *slang, char_u *inword, char_u *res)
// Remove accents, if wanted. We actually remove all non-word characters.
// But keep white space.
wordlen = 0;
- for (const char_u *s = inword; *s != NUL; ) {
+ for (const char_u *s = inword; *s != NUL;) {
const char_u *t = s;
c = mb_cptr2char_adv(&s);
if (slang->sl_rem_accents) {
@@ -6591,12 +6591,12 @@ static int spell_edit_score(slang_T *slang, char_u *badword, char_u *goodword)
// Get the characters from the multi-byte strings and put them in an
// int array for easy access.
badlen = 0;
- for (const char_u *p = badword; *p != NUL; ) {
+ for (const char_u *p = badword; *p != NUL;) {
wbadword[badlen++] = mb_cptr2char_adv(&p);
}
wbadword[badlen++] = 0;
goodlen = 0;
- for (const char_u *p = goodword; *p != NUL; ) {
+ for (const char_u *p = goodword; *p != NUL;) {
wgoodword[goodlen++] = mb_cptr2char_adv(&p);
}
wgoodword[goodlen++] = 0;
@@ -6690,12 +6690,12 @@ static int spell_edit_score_limit_w(slang_T *slang, char_u *badword, char_u *goo
// Get the characters from the multi-byte strings and put them in an
// int array for easy access.
bi = 0;
- for (const char_u *p = badword; *p != NUL; ) {
+ for (const char_u *p = badword; *p != NUL;) {
wbadword[bi++] = mb_cptr2char_adv(&p);
}
wbadword[bi++] = 0;
gi = 0;
- for (const char_u *p = goodword; *p != NUL; ) {
+ for (const char_u *p = goodword; *p != NUL;) {
wgoodword[gi++] = mb_cptr2char_adv(&p);
}
wgoodword[gi++] = 0;
@@ -6713,9 +6713,9 @@ static int spell_edit_score_limit_w(slang_T *slang, char_u *badword, char_u *goo
score = 0;
minscore = limit + 1;
- for (;; ) {
+ for (;;) {
// Skip over an equal part, score remains the same.
- for (;; ) {
+ for (;;) {
bc = wbadword[bi];
gc = wgoodword[gi];
@@ -7289,7 +7289,7 @@ int spell_word_start(int startcol)
// Find a word character before "startcol".
line = get_cursor_line_ptr();
- for (p = line + startcol; p > line; ) {
+ for (p = line + startcol; p > line;) {
MB_PTR_BACK(line, p);
if (spell_iswordp_nmw(p, curwin)) {
break;
diff --git a/src/nvim/spellfile.c b/src/nvim/spellfile.c
index 0fc9012f27..ae4514dd30 100644
--- a/src/nvim/spellfile.c
+++ b/src/nvim/spellfile.c
@@ -549,7 +549,7 @@ static inline int spell_check_magic_string(FILE *const fd)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_ALWAYS_INLINE
{
char buf[VIMSPELLMAGICL];
- SPELL_READ_BYTES(buf, VIMSPELLMAGICL, fd, ; );
+ SPELL_READ_BYTES(buf, VIMSPELLMAGICL, fd,; );
if (memcmp(buf, VIMSPELLMAGIC, VIMSPELLMAGICL) != 0) {
return SP_FORMERROR;
}
@@ -640,7 +640,7 @@ slang_T *spell_load_file(char_u *fname, char_u *lang, slang_T *old_lp, bool sile
// <SECTIONS>: <section> ... <sectionend>
// <section>: <sectionID> <sectionflags> <sectionlen> (section contents)
- for (;; ) {
+ for (;;) {
n = getc(fd); // <sectionID> or <sectionend>
if (n == SN_END) {
break;
@@ -960,7 +960,7 @@ someerror:
ga_init(&ga, 1, 100);
for (wordnr = 0; wordnr < wcount; ++wordnr) {
ga.ga_len = 0;
- for (;; ) {
+ for (;;) {
c = getc(fd); // <sugline>
if (c < 0) {
goto someerror;
@@ -1030,7 +1030,7 @@ static int read_region_section(FILE *fd, slang_T *lp, int len)
if (len > MAXREGIONS * 2) {
return SP_FORMERROR;
}
- SPELL_READ_NONNUL_BYTES((char *)lp->sl_regions, (size_t)len, fd, ; );
+ SPELL_READ_NONNUL_BYTES((char *)lp->sl_regions, (size_t)len, fd,; );
lp->sl_regions[len] = NUL;
return 0;
}
@@ -1097,7 +1097,7 @@ static int read_prefcond_section(FILE *fd, slang_T *lp)
if (n > 0) {
char buf[MAXWLEN + 1];
buf[0] = '^'; // always match at one position only
- SPELL_READ_NONNUL_BYTES(buf + 1, (size_t)n, fd, ; );
+ SPELL_READ_NONNUL_BYTES(buf + 1, (size_t)n, fd,; );
buf[n + 1] = NUL;
lp->sl_prefprog[i] = vim_regcomp((char_u *)buf, RE_MAGIC | RE_STRING);
}
@@ -1548,7 +1548,7 @@ static int set_sofo(slang_T *lp, char_u *from, char_u *to)
// First count the number of items for each list. Temporarily use
// sl_sal_first[] for this.
- for (p = from, s = to; *p != NUL && *s != NUL; ) {
+ for (p = from, s = to; *p != NUL && *s != NUL;) {
const int c = mb_cptr2char_adv((const char_u **)&p);
MB_CPTR_ADV(s);
if (c >= 256) {
@@ -1571,7 +1571,7 @@ static int set_sofo(slang_T *lp, char_u *from, char_u *to)
// Put the characters up to 255 in sl_sal_first[] the rest in a sl_sal
// list.
memset(lp->sl_sal_first, 0, sizeof(salfirst_T) * 256);
- for (p = from, s = to; *p != NUL && *s != NUL; ) {
+ for (p = from, s = to; *p != NUL && *s != NUL;) {
const int c = mb_cptr2char_adv((const char_u **)&p);
const int i = mb_cptr2char_adv((const char_u **)&s);
if (c >= 256) {
@@ -1647,7 +1647,7 @@ static int *mb_str2wide(char_u *s)
int i = 0;
int *res = xmalloc((mb_charlen(s) + 1) * sizeof(int));
- for (char_u *p = s; *p != NUL; ) {
+ for (char_u *p = s; *p != NUL;) {
res[i++] = mb_ptr2char_adv((const char_u **)&p);
}
res[i] = NUL;
@@ -2095,7 +2095,7 @@ static afffile_T *spell_read_aff(spellinfo_T *spin, char_u *fname)
// Split the line up in white separated items. Put a NUL after each
// item.
itemcnt = 0;
- for (p = line;; ) {
+ for (p = line;;) {
while (*p != NUL && *p <= ' ') { // skip white space and CR/NL
++p;
}
@@ -2646,7 +2646,7 @@ static afffile_T *spell_read_aff(spellinfo_T *spin, char_u *fname)
int c;
// Check that every character appears only once.
- for (p = items[1]; *p != NUL; ) {
+ for (p = items[1]; *p != NUL;) {
c = mb_ptr2char_adv((const char_u **)&p);
if ((!GA_EMPTY(&spin->si_map)
&& vim_strchr(spin->si_map.ga_data, c)
@@ -2804,7 +2804,7 @@ static void aff_process_flags(afffile_T *affile, affentry_T *entry)
if (entry->ae_flags != NULL
&& (affile->af_compforbid != 0 || affile->af_comppermit != 0)) {
- for (p = entry->ae_flags; *p != NUL; ) {
+ for (p = entry->ae_flags; *p != NUL;) {
prevp = p;
flag = get_affitem(affile->af_flagtype, &p);
if (flag == affile->af_comppermit || flag == affile->af_compforbid) {
@@ -2922,7 +2922,7 @@ static void process_compflags(spellinfo_T *spin, afffile_T *aff, char_u *compfla
spin->si_compflags = p;
tp = p + STRLEN(p);
- for (p = compflags; *p != NUL; ) {
+ for (p = compflags; *p != NUL;) {
if (vim_strchr((char_u *)"/?*+[]", *p) != NULL) {
// Copy non-flag characters directly.
*tp++ = *p++;
@@ -2985,7 +2985,7 @@ static bool flag_in_afflist(int flagtype, char_u *afflist, unsigned flag)
case AFT_CAPLONG:
case AFT_LONG:
- for (p = afflist; *p != NUL; ) {
+ for (p = afflist; *p != NUL;) {
n = mb_ptr2char_adv((const char_u **)&p);
if ((flagtype == AFT_LONG || (n >= 'A' && n <= 'Z'))
&& *p != NUL) {
@@ -2998,7 +2998,7 @@ static bool flag_in_afflist(int flagtype, char_u *afflist, unsigned flag)
break;
case AFT_NUM:
- for (p = afflist; *p != NUL; ) {
+ for (p = afflist; *p != NUL;) {
int digits = getdigits_int(&p, true, 0);
assert(digits >= 0);
n = (unsigned int)digits;
@@ -3248,9 +3248,9 @@ static int spell_read_dic(spellinfo_T *spin, char_u *fname, afffile_T *affile)
// Extract flags from the affix list.
flags |= get_affix_flags(affile, afflist);
- if (affile->af_needaffix != 0 &&
- flag_in_afflist(affile->af_flagtype, afflist,
- affile->af_needaffix)) {
+ if (affile->af_needaffix != 0
+ && flag_in_afflist(affile->af_flagtype, afflist,
+ affile->af_needaffix)) {
need_affix = true;
}
@@ -3311,32 +3311,32 @@ static int get_affix_flags(afffile_T *affile, char_u *afflist)
{
int flags = 0;
- if (affile->af_keepcase != 0 &&
- flag_in_afflist(affile->af_flagtype, afflist,
- affile->af_keepcase)) {
+ if (affile->af_keepcase != 0
+ && flag_in_afflist(affile->af_flagtype, afflist,
+ affile->af_keepcase)) {
flags |= WF_KEEPCAP | WF_FIXCAP;
}
- if (affile->af_rare != 0 &&
- flag_in_afflist(affile->af_flagtype, afflist, affile->af_rare)) {
+ if (affile->af_rare != 0
+ && flag_in_afflist(affile->af_flagtype, afflist, affile->af_rare)) {
flags |= WF_RARE;
}
- if (affile->af_bad != 0 &&
- flag_in_afflist(affile->af_flagtype, afflist, affile->af_bad)) {
+ if (affile->af_bad != 0
+ && flag_in_afflist(affile->af_flagtype, afflist, affile->af_bad)) {
flags |= WF_BANNED;
}
- if (affile->af_needcomp != 0 &&
- flag_in_afflist(affile->af_flagtype, afflist,
- affile->af_needcomp)) {
+ if (affile->af_needcomp != 0
+ && flag_in_afflist(affile->af_flagtype, afflist,
+ affile->af_needcomp)) {
flags |= WF_NEEDCOMP;
}
- if (affile->af_comproot != 0 &&
- flag_in_afflist(affile->af_flagtype, afflist,
- affile->af_comproot)) {
+ if (affile->af_comproot != 0
+ && flag_in_afflist(affile->af_flagtype, afflist,
+ affile->af_comproot)) {
flags |= WF_COMPROOT;
}
- if (affile->af_nosuggest != 0 &&
- flag_in_afflist(affile->af_flagtype, afflist,
- affile->af_nosuggest)) {
+ if (affile->af_nosuggest != 0
+ && flag_in_afflist(affile->af_flagtype, afflist,
+ affile->af_nosuggest)) {
flags |= WF_NOSUGGEST;
}
return flags;
@@ -3355,7 +3355,7 @@ static int get_pfxlist(afffile_T *affile, char_u *afflist, char_u *store_afflist
char_u key[AH_KEY_LEN];
hashitem_T *hi;
- for (p = afflist; *p != NUL; ) {
+ for (p = afflist; *p != NUL;) {
prevp = p;
if (get_affitem(affile->af_flagtype, &p) != 0) {
// A flag is a postponed prefix flag if it appears in "af_pref"
@@ -3389,7 +3389,7 @@ static void get_compflags(afffile_T *affile, char_u *afflist, char_u *store_affl
char_u key[AH_KEY_LEN];
hashitem_T *hi;
- for (p = afflist; *p != NUL; ) {
+ for (p = afflist; *p != NUL;) {
prevp = p;
if (get_affitem(affile->af_flagtype, &p) != 0) {
// A flag is a compound flag if it appears in "af_comp".
@@ -5845,7 +5845,7 @@ static void set_map_str(slang_T *lp, char_u *map)
// The similar characters are stored separated with slashes:
// "aaa/bbb/ccc/". Fill sl_map_array[c] with the character before c and
// before the same slash. For characters above 255 sl_map_hash is used.
- for (p = map; *p != NUL; ) {
+ for (p = map; *p != NUL;) {
c = mb_cptr2char_adv((const char_u **)&p);
if (c == '/') {
headc = 0;
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index 47cbf01996..c58e052ae9 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -242,7 +242,7 @@ char_u *vim_strsave_shellescape(const char_u *string, bool do_special, bool do_n
#endif
*d++ = '\'';
- for (const char_u *p = string; *p != NUL; ) {
+ for (const char_u *p = string; *p != NUL;) {
#ifdef WIN32
if (!p_ssl) {
if (*p == '"') {
@@ -405,7 +405,7 @@ int vim_stricmp(const char *s1, const char *s2)
{
int i;
- for (;; ) {
+ for (;;) {
i = (int)TOLOWER_LOC(*s1) - (int)TOLOWER_LOC(*s2);
if (i != 0) {
return i; // this character different
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index 8347f1bff1..dd3f1b4dc9 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -691,7 +691,7 @@ static void syn_sync(win_T *wp, linenr_T start_lnum, synstate_T *last_valid)
* Restrict the search for the end of a comment to b_syn_sync_maxlines.
*/
if (find_start_comment((int)syn_block->b_syn_sync_maxlines) != NULL) {
- for (idx = syn_block->b_syn_patterns.ga_len; --idx >= 0; ) {
+ for (idx = syn_block->b_syn_patterns.ga_len; --idx >= 0;) {
if (SYN_ITEMS(syn_block)[idx].sp_syn.id
== syn_block->b_syn_sync_id
&& SYN_ITEMS(syn_block)[idx].sp_type == SPTYPE_START) {
@@ -752,7 +752,7 @@ static void syn_sync(win_T *wp, linenr_T start_lnum, synstate_T *last_valid)
for (current_lnum = lnum; current_lnum < end_lnum; ++current_lnum) {
syn_start_line();
- for (;; ) {
+ for (;;) {
had_sync_point = syn_finish_line(true);
// When a sync point has been found, remember where, and
// continue to look for another one, further on in the line.
@@ -1146,7 +1146,7 @@ static void syn_stack_apply_changes_block(synblock_T *block, buf_T *buf)
linenr_T n;
prev = NULL;
- for (p = block->b_sst_first; p != NULL; ) {
+ for (p = block->b_sst_first; p != NULL;) {
if (p->sst_lnum + block->b_syn_sync_linebreaks > buf->b_mod_top) {
n = p->sst_lnum + buf->b_mod_xlines;
if (n <= buf->b_mod_bot) {
@@ -1449,7 +1449,7 @@ static bool syn_stack_equal(synstate_T *sp)
}
int i;
- for (i = current_state.ga_len; --i >= 0; ) {
+ for (i = current_state.ga_len; --i >= 0;) {
// If the item has another index the state is different.
if (bp[i].bs_idx != CUR_STATE(i).si_idx) {
break;
@@ -1788,9 +1788,9 @@ static int syn_current_attr(const bool syncing, const bool displaying, bool *con
line = syn_getcurline();
const char_u *cur_pos = line + current_col;
if (vim_iswordp_buf(cur_pos, syn_buf)
- && (current_col == 0 ||
- !vim_iswordp_buf(cur_pos - 1 - utf_head_off(line, cur_pos - 1),
- syn_buf))) {
+ && (current_col == 0
+ || !vim_iswordp_buf(cur_pos - 1 - utf_head_off(line, cur_pos - 1),
+ syn_buf))) {
syn_id = check_keyword_id(line, (int)current_col, &endcol, &flags,
&next_list, cur_si, &cchar);
if (syn_id != 0) {
@@ -1852,7 +1852,7 @@ static int syn_current_attr(const bool syncing, const bool displaying, bool *con
*/
next_match_idx = 0; // no match in this line yet
next_match_col = MAXCOL;
- for (int idx = syn_block->b_syn_patterns.ga_len; --idx >= 0; ) {
+ for (int idx = syn_block->b_syn_patterns.ga_len; --idx >= 0;) {
synpat_T *const spp = &(SYN_ITEMS(syn_block)[idx]);
if (spp->sp_syncing == syncing
&& (displaying || !(spp->sp_flags & HL_DISPLAY))
@@ -2207,7 +2207,7 @@ static int syn_current_attr(const bool syncing, const bool displaying, bool *con
/// @return true if we already matched pattern "idx" at the current column.
static bool did_match_already(int idx, garray_T *gap)
{
- for (int i = current_state.ga_len; --i >= 0; ) {
+ for (int i = current_state.ga_len; --i >= 0;) {
if (CUR_STATE(i).si_m_startcol == (int)current_col
&& CUR_STATE(i).si_m_lnum == (int)current_lnum
&& CUR_STATE(i).si_idx == idx) {
@@ -2217,7 +2217,7 @@ static bool did_match_already(int idx, garray_T *gap)
// Zero-width matches with a nextgroup argument are not put on the syntax
// stack, and can only be matched once anyway.
- for (int i = gap->ga_len; --i >= 0; ) {
+ for (int i = gap->ga_len; --i >= 0;) {
if (((int *)(gap->ga_data))[i] == idx) {
return true;
}
@@ -2318,7 +2318,7 @@ static void check_state_ends(void)
int had_extend;
cur_si = &CUR_STATE(current_state.ga_len - 1);
- for (;; ) {
+ for (;;) {
if (cur_si->si_ends
&& (cur_si->si_m_endpos.lnum < current_lnum
|| (cur_si->si_m_endpos.lnum == current_lnum
@@ -2658,7 +2658,7 @@ static void find_endpos(int idx, lpos_T *startpos, lpos_T *m_endpos, lpos_T *hl_
/*
* Find the SKIP or first END pattern after the last START pattern.
*/
- for (;; ) {
+ for (;;) {
spp = &(SYN_ITEMS(syn_block)[idx]);
if (spp->sp_type != SPTYPE_START) {
break;
@@ -2687,7 +2687,7 @@ static void find_endpos(int idx, lpos_T *startpos, lpos_T *m_endpos, lpos_T *hl_
// use syntax iskeyword option
save_chartab(buf_chartab);
- for (;; ) {
+ for (;;) {
/*
* Find end pattern that matches first after "matchcol".
*/
@@ -3286,13 +3286,13 @@ void syntax_clear(synblock_T *block)
clear_keywtab(&block->b_keywtab_ic);
// free the syntax patterns
- for (int i = block->b_syn_patterns.ga_len; --i >= 0; ) {
+ for (int i = block->b_syn_patterns.ga_len; --i >= 0;) {
syn_clear_pattern(block, i);
}
ga_clear(&block->b_syn_patterns);
// free the syntax clusters
- for (int i = block->b_syn_clusters.ga_len; --i >= 0; ) {
+ for (int i = block->b_syn_clusters.ga_len; --i >= 0;) {
syn_clear_cluster(block, i);
}
ga_clear(&block->b_syn_clusters);
@@ -3336,7 +3336,7 @@ void reset_synblock(win_T *wp)
static void syntax_sync_clear(void)
{
// free the syntax patterns
- for (int i = curwin->w_s->b_syn_patterns.ga_len; --i >= 0; ) {
+ for (int i = curwin->w_s->b_syn_patterns.ga_len; --i >= 0;) {
if (SYN_ITEMS(curwin->w_s)[i].sp_syncing) {
syn_remove_pattern(curwin->w_s, i);
}
@@ -3484,7 +3484,7 @@ static void syn_clear_one(const int id, const bool syncing)
}
// clear the patterns for "id"
- for (int idx = curwin->w_s->b_syn_patterns.ga_len; --idx >= 0; ) {
+ for (int idx = curwin->w_s->b_syn_patterns.ga_len; --idx >= 0;) {
spp = &(SYN_ITEMS(curwin->w_s)[idx]);
if (spp->sp_syn.id != id || spp->sp_syncing != syncing) {
continue;
@@ -3874,7 +3874,7 @@ static void put_pattern(const char *const s, const int c, const synpat_T *const
msg_putchar(c);
// output the pattern, in between a char that is not in the pattern
- for (i = 0; vim_strchr(spp->sp_pattern, sepchars[i]) != NULL; ) {
+ for (i = 0; vim_strchr(spp->sp_pattern, sepchars[i]) != NULL;) {
if (sepchars[++i] == NUL) {
i = 0; // no good char found, just use the first one
break;
@@ -4015,7 +4015,7 @@ static void syn_clear_keyword(int id, hashtab_T *ht)
}
--todo;
kp_prev = NULL;
- for (kp = HI2KE(hi); kp != NULL; ) {
+ for (kp = HI2KE(hi); kp != NULL;) {
if (kp->k_syn.id == id) {
kp_next = kp->ke_next;
if (kp_prev == NULL) {
@@ -4191,7 +4191,7 @@ static char_u *get_syn_options(char_u *arg, syn_opt_arg_T *opt, int *conceal_cha
opt->flags |= HL_CONCEAL;
}
- for (;; ) {
+ for (;;) {
/*
* This is used very often when a large number of keywords is defined.
* Need to skip quickly when no option name is found.
@@ -4201,7 +4201,7 @@ static char_u *get_syn_options(char_u *arg, syn_opt_arg_T *opt, int *conceal_cha
break;
}
- for (fidx = ARRAY_SIZE(flagtab); --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) {
@@ -4273,7 +4273,7 @@ static char_u *get_syn_options(char_u *arg, syn_opt_arg_T *opt, int *conceal_cha
} else {
syn_id = syn_name2id((char *)gname);
int i;
- for (i = curwin->w_s->b_syn_patterns.ga_len; --i >= 0; ) {
+ for (i = curwin->w_s->b_syn_patterns.ga_len; --i >= 0;) {
if (SYN_ITEMS(curwin->w_s)[i].sp_syn.id == syn_id
&& SYN_ITEMS(curwin->w_s)[i].sp_type == SPTYPE_START) {
*opt->sync_idx = i;
@@ -4460,7 +4460,7 @@ static void syn_cmd_keyword(exarg_T *eap, int syncing)
// 2: Add an entry for each keyword.
for (kw = keyword_copy; --cnt >= 0; kw += STRLEN(kw) + 1) {
- for (p = vim_strchr(kw, '[');; ) {
+ for (p = vim_strchr(kw, '[');;) {
if (p != NULL) {
*p = NUL;
}
@@ -4972,7 +4972,7 @@ static int syn_scl_name2id(char_u *name)
// Avoid using stricmp() too much, it's slow on some systems
char_u *name_u = vim_strsave_up(name);
int i;
- for (i = curwin->w_s->b_syn_clusters.ga_len; --i >= 0; ) {
+ for (i = curwin->w_s->b_syn_clusters.ga_len; --i >= 0;) {
if (SYN_CLSTR(curwin->w_s)[i].scl_name_u != NULL
&& STRCMP(name_u, SYN_CLSTR(curwin->w_s)[i].scl_name_u) == 0) {
break;
@@ -5078,7 +5078,7 @@ static void syn_cmd_cluster(exarg_T *eap, int syncing)
}
scl_id -= SYNID_CLUSTER;
- for (;; ) {
+ for (;;) {
if (STRNICMP(rest, "add", 3) == 0
&& (ascii_iswhite(rest[3]) || rest[3] == '=')) {
opt_len = 3;
@@ -5174,7 +5174,7 @@ static char_u *get_syn_pattern(char_u *arg, synpat_T *ci)
*/
++end;
do {
- for (idx = SPO_COUNT; --idx >= 0; ) {
+ for (idx = SPO_COUNT; --idx >= 0;) {
if (STRNCMP(end, spo_name_tab[idx], 3) == 0) {
break;
}
@@ -5456,7 +5456,7 @@ static int get_id_list(char_u **const arg, const int keylen, int16_t **const lis
regmatch.rm_ic = TRUE;
id = 0;
- for (int i = highlight_ga.ga_len; --i >= 0; ) {
+ for (int i = highlight_ga.ga_len; --i >= 0;) {
if (vim_regexec(&regmatch, HL_TABLE()[i].sg_name, (colnr_T)0)) {
if (round == 2) {
// Got more items than expected; can happen
@@ -6520,7 +6520,7 @@ const char *const highlight_init_cmdline[] = {
/// Create default links for Nvim* highlight groups used for cmdline coloring
void syn_init_cmdline_highlight(bool reset, bool init)
{
- for (size_t i = 0 ; highlight_init_cmdline[i] != NULL ; i++) {
+ for (size_t i = 0; highlight_init_cmdline[i] != NULL; i++) {
do_highlight(highlight_init_cmdline[i], reset, init);
}
}
@@ -6968,7 +6968,7 @@ void do_highlight(const char *line, const bool forceit, const bool init)
attr = 0;
off = 0;
while (arg[off] != NUL) {
- for (i = ARRAY_SIZE(hl_attr_table); --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];
@@ -7040,7 +7040,7 @@ void do_highlight(const char *line, const bool forceit, const bool init)
} else {
// Reduce calls to STRICMP a bit, it can be slow.
off = TOUPPER_ASC(*arg);
- for (i = ARRAY_SIZE(color_names); --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;
@@ -7536,6 +7536,7 @@ static bool syn_list_header(const bool did_header, const int outlen, const int i
{
int endcol = 19;
bool newline = true;
+ int name_col = 0;
bool adjust = true;
if (!did_header) {
@@ -7544,6 +7545,7 @@ static bool syn_list_header(const bool did_header, const int outlen, const int i
return true;
}
msg_outtrans(HL_TABLE()[id - 1].sg_name);
+ name_col = msg_col;
endcol = 15;
} else if ((ui_has(kUIMessages) || msg_silent) && !force_newline) {
msg_putchar(' ');
@@ -7570,6 +7572,9 @@ static bool syn_list_header(const bool did_header, const int outlen, const int i
// Show "xxx" with the attributes.
if (!did_header) {
+ if (endcol == Columns - 1 && endcol <= name_col) {
+ msg_putchar(' ');
+ }
msg_puts_attr("xxx", syn_id2attr(id));
msg_putchar(' ');
}
@@ -7784,7 +7789,7 @@ int syn_get_final_id(int hl_id)
* Follow links until there is no more.
* Look out for loops! Break after 100 links.
*/
- for (count = 100; --count >= 0; ) {
+ for (count = 100; --count >= 0;) {
struct hl_group *sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
// ACHTUNG: when using "tmp" attribute (no link) the function might be
@@ -7983,10 +7988,10 @@ static void highlight_list(void)
{
int i;
- for (i = 10; --i >= 0; ) {
+ for (i = 10; --i >= 0;) {
highlight_list_two(i, HL_ATTR(HLF_D));
}
- for (i = 40; --i >= 0; ) {
+ for (i = 40; --i >= 0;) {
highlight_list_two(99, 0);
}
}
diff --git a/src/nvim/tag.c b/src/nvim/tag.c
index 673ebc2668..1f4d3adc92 100644
--- a/src/nvim/tag.c
+++ b/src/nvim/tag.c
@@ -431,7 +431,7 @@ int do_tag(char_u *tag, int type, int count, int forceit, int verbose)
/*
* Repeat searching for tags, when a file has not been found.
*/
- for (;; ) {
+ for (;;) {
int other_name;
char_u *name;
@@ -1638,7 +1638,7 @@ int find_tags(char_u *pat, int *num_matches, char_u ***matchesp, int flags, int
/*
* Read and parse the lines in the file one by one
*/
- for (;; ) {
+ for (;;) {
// check for CTRL-C typed, more often when jumping around
if (state == TS_BINARY || state == TS_SKIP_BACK) {
line_breakcheck();
@@ -2403,7 +2403,7 @@ int get_tagfname(tagname_T *tnp, int first, char_u *buf)
* tnp->tn_did_filefind_init == FALSE: setup for next part in 'tags'.
* tnp->tn_did_filefind_init == TRUE: find next file in this part.
*/
- for (;; ) {
+ for (;;) {
if (tnp->tn_did_filefind_init) {
fname = vim_findfile(tnp->tn_search_ctx);
if (fname != NULL) {
@@ -2687,7 +2687,7 @@ static int jumpto_tag(const char_u *lbuf_arg, int forceit, int keep_help)
// copy the command to pbuf[], remove trailing CR/NL
str = tagp.command;
- for (pbuf_end = pbuf; *str && *str != '\n' && *str != '\r'; ) {
+ for (pbuf_end = pbuf; *str && *str != '\n' && *str != '\r';) {
*pbuf_end++ = *str++;
if (pbuf_end - pbuf + 1 >= LSIZE) {
break;
@@ -3056,7 +3056,7 @@ static int find_extra(char_u **pp)
char_u first_char = **pp;
// Repeat for addresses separated with ';'
- for (;; ) {
+ for (;;) {
if (ascii_isdigit(*str)) {
str = skipdigits(str + 1);
} else if (*str == '/' || *str == '?') {
diff --git a/src/nvim/testdir/test_arglist.vim b/src/nvim/testdir/test_arglist.vim
index 8fd60d6a5a..164149476f 100644
--- a/src/nvim/testdir/test_arglist.vim
+++ b/src/nvim/testdir/test_arglist.vim
@@ -1,5 +1,9 @@
" Test argument list commands
+func Reset_arglist()
+ args a | %argd
+endfunc
+
func Test_argidx()
args a b c
last
@@ -26,6 +30,8 @@ func Test_argidx()
endfunc
func Test_argadd()
+ call Reset_arglist()
+
%argdelete
argadd a b c
call assert_equal(0, argidx())
@@ -115,8 +121,7 @@ endfunc
" Test for [count]argument and [count]argdelete commands
" Ported from the test_argument_count.in test script
func Test_argument()
- " Clean the argument list
- arga a | %argd
+ call Reset_arglist()
let save_hidden = &hidden
set hidden
@@ -244,8 +249,7 @@ endfunc
" Test for 0argadd and 0argedit
" Ported from the test_argument_0count.in test script
func Test_zero_argadd()
- " Clean the argument list
- arga a | %argd
+ call Reset_arglist()
arga a b c d
2argu
@@ -272,10 +276,6 @@ func Test_zero_argadd()
call assert_equal('file with spaces', expand('%'))
endfunc
-func Reset_arglist()
- args a | %argd
-endfunc
-
" Test for argc()
func Test_argc()
call Reset_arglist()
diff --git a/src/nvim/testdir/test_autochdir.vim b/src/nvim/testdir/test_autochdir.vim
index 0b76828dd7..9ad727241e 100644
--- a/src/nvim/testdir/test_autochdir.vim
+++ b/src/nvim/testdir/test_autochdir.vim
@@ -26,4 +26,42 @@ func Test_set_filename()
call delete('samples/Xtest')
endfunc
+func Test_verbose_pwd()
+ CheckFunction test_autochdir
+ let cwd = getcwd()
+ call test_autochdir()
+
+ edit global.txt
+ call assert_match('\[global\].*testdir$', execute('verbose pwd'))
+
+ call mkdir('Xautodir')
+ split Xautodir/local.txt
+ lcd Xautodir
+ call assert_match('\[window\].*testdir[/\\]Xautodir', execute('verbose pwd'))
+
+ set acd
+ wincmd w
+ call assert_match('\[autochdir\].*testdir$', execute('verbose pwd'))
+ execute 'lcd' cwd
+ call assert_match('\[window\].*testdir$', execute('verbose pwd'))
+ execute 'tcd' cwd
+ call assert_match('\[tabpage\].*testdir$', execute('verbose pwd'))
+ execute 'cd' cwd
+ call assert_match('\[global\].*testdir$', execute('verbose pwd'))
+ edit
+ call assert_match('\[autochdir\].*testdir$', execute('verbose pwd'))
+ wincmd w
+ call assert_match('\[autochdir\].*testdir[/\\]Xautodir', execute('verbose pwd'))
+ set noacd
+ call assert_match('\[autochdir\].*testdir[/\\]Xautodir', execute('verbose pwd'))
+ wincmd w
+ call assert_match('\[global\].*testdir', execute('verbose pwd'))
+ wincmd w
+ call assert_match('\[window\].*testdir[/\\]Xautodir', execute('verbose pwd'))
+
+ bwipe!
+ call chdir(cwd)
+ call delete('Xautodir', 'rf')
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/nvim/testdir/test_autocmd.vim b/src/nvim/testdir/test_autocmd.vim
index c350a17236..0c8b8a45d9 100644
--- a/src/nvim/testdir/test_autocmd.vim
+++ b/src/nvim/testdir/test_autocmd.vim
@@ -222,6 +222,7 @@ func Test_win_tab_autocmd()
augroup testing
au WinNew * call add(g:record, 'WinNew')
+ au WinClosed * call add(g:record, 'WinClosed')
au WinEnter * call add(g:record, 'WinEnter')
au WinLeave * call add(g:record, 'WinLeave')
au TabNew * call add(g:record, 'TabNew')
@@ -238,8 +239,8 @@ func Test_win_tab_autocmd()
call assert_equal([
\ 'WinLeave', 'WinNew', 'WinEnter',
\ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
- \ 'WinLeave', 'TabLeave', 'TabClosed', 'WinEnter', 'TabEnter',
- \ 'WinLeave', 'WinEnter'
+ \ 'WinLeave', 'TabLeave', 'WinClosed', 'TabClosed', 'WinEnter', 'TabEnter',
+ \ 'WinLeave', 'WinClosed', 'WinEnter'
\ ], g:record)
let g:record = []
@@ -250,7 +251,7 @@ func Test_win_tab_autocmd()
call assert_equal([
\ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
\ 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter',
- \ 'TabClosed'
+ \ 'WinClosed', 'TabClosed'
\ ], g:record)
augroup testing
@@ -259,6 +260,45 @@ func Test_win_tab_autocmd()
unlet g:record
endfunc
+func Test_WinClosed()
+ " Test that the pattern is matched against the closed window's ID, and both
+ " <amatch> and <afile> are set to it.
+ new
+ let winid = win_getid()
+ let g:matched = v:false
+ augroup test-WinClosed
+ autocmd!
+ execute 'autocmd WinClosed' winid 'let g:matched = v:true'
+ autocmd WinClosed * let g:amatch = str2nr(expand('<amatch>'))
+ autocmd WinClosed * let g:afile = str2nr(expand('<afile>'))
+ augroup END
+ close
+ call assert_true(g:matched)
+ call assert_equal(winid, g:amatch)
+ call assert_equal(winid, g:afile)
+
+ " Test that WinClosed is non-recursive.
+ new
+ new
+ call assert_equal(3, winnr('$'))
+ let g:triggered = 0
+ augroup test-WinClosed
+ autocmd!
+ autocmd WinClosed * let g:triggered += 1
+ autocmd WinClosed * 2 wincmd c
+ augroup END
+ close
+ call assert_equal(1, winnr('$'))
+ call assert_equal(1, g:triggered)
+
+ autocmd! test-WinClosed
+ augroup! test-WinClosed
+ unlet g:matched
+ unlet g:amatch
+ unlet g:afile
+ unlet g:triggered
+endfunc
+
func s:AddAnAutocmd()
augroup vimBarTest
au BufReadCmd * echo 'hello'
diff --git a/src/nvim/testdir/test_bufwintabinfo.vim b/src/nvim/testdir/test_bufwintabinfo.vim
index bb672cf0ec..c04c8fbf60 100644
--- a/src/nvim/testdir/test_bufwintabinfo.vim
+++ b/src/nvim/testdir/test_bufwintabinfo.vim
@@ -1,108 +1,110 @@
" Tests for the getbufinfo(), getwininfo() and gettabinfo() functions
function Test_getbufwintabinfo()
- edit Xtestfile1
- edit Xtestfile2
- let buflist = getbufinfo()
- call assert_equal(2, len(buflist))
- call assert_match('Xtestfile1', buflist[0].name)
- call assert_match('Xtestfile2', getbufinfo('Xtestfile2')[0].name)
- call assert_equal([], getbufinfo(2016))
- edit Xtestfile1
- hide edit Xtestfile2
- hide enew
- call assert_equal(3, len(getbufinfo({'bufloaded':1})))
-
- set tabstop&vim
- let b:editor = 'vim'
+ edit Xtestfile1
+ edit Xtestfile2
+ let buflist = getbufinfo()
+ call assert_equal(2, len(buflist))
+ call assert_match('Xtestfile1', buflist[0].name)
+ call assert_match('Xtestfile2', getbufinfo('Xtestfile2')[0].name)
+ call assert_equal([], getbufinfo(2016))
+ edit Xtestfile1
+ hide edit Xtestfile2
+ hide enew
+ call assert_equal(3, len(getbufinfo({'bufloaded':1})))
+
+ set tabstop&vim
+ let b:editor = 'vim'
+ let l = getbufinfo('%')
+ call assert_equal(bufnr('%'), l[0].bufnr)
+ call assert_equal('vim', l[0].variables.editor)
+ call assert_notequal(-1, index(l[0].windows, '%'->bufwinid()))
+
+ " Test for getbufinfo() with 'bufmodified'
+ call assert_equal(0, len(getbufinfo({'bufmodified' : 1})))
+ call setbufline('Xtestfile1', 1, ["Line1"])
+ let l = getbufinfo({'bufmodified' : 1})
+ call assert_equal(1, len(l))
+ call assert_equal(bufnr('Xtestfile1'), l[0].bufnr)
+
+ if has('signs')
+ call append(0, ['Linux', 'Windows', 'Mac'])
+ sign define Mark text=>> texthl=Search
+ exe "sign place 2 line=3 name=Mark buffer=" . bufnr('%')
let l = getbufinfo('%')
- call assert_equal(bufnr('%'), l[0].bufnr)
- call assert_equal('vim', l[0].variables.editor)
- call assert_notequal(-1, index(l[0].windows, '%'->bufwinid()))
-
- " Test for getbufinfo() with 'bufmodified'
- call assert_equal(0, len(getbufinfo({'bufmodified' : 1})))
- call setbufline('Xtestfile1', 1, ["Line1"])
- let l = getbufinfo({'bufmodified' : 1})
- call assert_equal(1, len(l))
- call assert_equal(bufnr('Xtestfile1'), l[0].bufnr)
-
- if has('signs')
- call append(0, ['Linux', 'Windows', 'Mac'])
- sign define Mark text=>> texthl=Search
- exe "sign place 2 line=3 name=Mark buffer=" . bufnr('%')
- let l = getbufinfo('%')
- call assert_equal(2, l[0].signs[0].id)
- call assert_equal(3, l[0].signs[0].lnum)
- call assert_equal('Mark', l[0].signs[0].name)
- sign unplace *
- sign undefine Mark
- enew!
- endif
-
- only
- let w1_id = win_getid()
- new
- let w2_id = win_getid()
- tabnew | let w3_id = win_getid()
- new | let w4_id = win_getid()
- vert new | let w5_id = win_getid()
- call setwinvar(0, 'signal', 'green')
- tabfirst
- let winlist = getwininfo()
- call assert_equal(5, len(winlist))
- call assert_equal(winwidth(1), winlist[0].width)
- call assert_equal(1, winlist[0].wincol)
- " tabline adds one row in terminal, not in GUI
- let tablineheight = winlist[0].winrow == 2 ? 1 : 0
- call assert_equal(tablineheight + 1, winlist[0].winrow)
-
- call assert_equal(winbufnr(2), winlist[1].bufnr)
- call assert_equal(winheight(2), winlist[1].height)
- call assert_equal(1, winlist[1].wincol)
- call assert_equal(tablineheight + winheight(1) + 2, winlist[1].winrow)
-
- call assert_equal(1, winlist[2].winnr)
- call assert_equal(tablineheight + 1, winlist[2].winrow)
- call assert_equal(1, winlist[2].wincol)
-
- call assert_equal(winlist[2].width + 2, winlist[3].wincol)
- call assert_equal(1, winlist[4].wincol)
-
- call assert_equal(1, winlist[0].tabnr)
- call assert_equal(1, winlist[1].tabnr)
- call assert_equal(2, winlist[2].tabnr)
- call assert_equal(2, winlist[3].tabnr)
- call assert_equal(2, winlist[4].tabnr)
-
- call assert_equal('green', winlist[2].variables.signal)
- call assert_equal(w4_id, winlist[3].winid)
- let winfo = w5_id->getwininfo()[0]
- call assert_equal(2, winfo.tabnr)
- call assert_equal([], getwininfo(3))
-
- call settabvar(1, 'space', 'build')
- let tablist = gettabinfo()
- call assert_equal(2, len(tablist))
- call assert_equal(3, len(tablist[1].windows))
- call assert_equal(2, tablist[1].tabnr)
- call assert_equal('build', tablist[0].variables.space)
- call assert_equal(w2_id, tablist[0].windows[0])
- call assert_equal([], 3->gettabinfo())
-
- tabonly | only
-
- lexpr ''
- lopen
- copen
- let winlist = getwininfo()
- call assert_false(winlist[0].quickfix)
- call assert_false(winlist[0].loclist)
- call assert_true(winlist[1].quickfix)
- call assert_true(winlist[1].loclist)
- call assert_true(winlist[2].quickfix)
- call assert_false(winlist[2].loclist)
- wincmd t | only
+ call assert_equal(2, l[0].signs[0].id)
+ call assert_equal(3, l[0].signs[0].lnum)
+ call assert_equal('Mark', l[0].signs[0].name)
+ sign unplace *
+ sign undefine Mark
+ enew!
+ endif
+
+ only
+ let w1_id = win_getid()
+ setl foldcolumn=3
+ new
+ let w2_id = win_getid()
+ tabnew | let w3_id = win_getid()
+ new | let w4_id = win_getid()
+ vert new | let w5_id = win_getid()
+ call setwinvar(0, 'signal', 'green')
+ tabfirst
+ let winlist = getwininfo()
+ call assert_equal(5, len(winlist))
+ call assert_equal(winwidth(1), winlist[0].width)
+ call assert_equal(1, winlist[0].wincol)
+ " tabline adds one row in terminal, not in GUI
+ let tablineheight = winlist[0].winrow == 2 ? 1 : 0
+ call assert_equal(tablineheight + 1, winlist[0].winrow)
+
+ call assert_equal(winbufnr(2), winlist[1].bufnr)
+ call assert_equal(winheight(2), winlist[1].height)
+ call assert_equal(1, winlist[1].wincol)
+ call assert_equal(3, winlist[1].textoff) " foldcolumn
+ call assert_equal(tablineheight + winheight(1) + 2, winlist[1].winrow)
+
+ call assert_equal(1, winlist[2].winnr)
+ call assert_equal(tablineheight + 1, winlist[2].winrow)
+ call assert_equal(1, winlist[2].wincol)
+
+ call assert_equal(winlist[2].width + 2, winlist[3].wincol)
+ call assert_equal(1, winlist[4].wincol)
+
+ call assert_equal(1, winlist[0].tabnr)
+ call assert_equal(1, winlist[1].tabnr)
+ call assert_equal(2, winlist[2].tabnr)
+ call assert_equal(2, winlist[3].tabnr)
+ call assert_equal(2, winlist[4].tabnr)
+
+ call assert_equal('green', winlist[2].variables.signal)
+ call assert_equal(w4_id, winlist[3].winid)
+ let winfo = w5_id->getwininfo()[0]
+ call assert_equal(2, winfo.tabnr)
+ call assert_equal([], getwininfo(3))
+
+ call settabvar(1, 'space', 'build')
+ let tablist = gettabinfo()
+ call assert_equal(2, len(tablist))
+ call assert_equal(3, len(tablist[1].windows))
+ call assert_equal(2, tablist[1].tabnr)
+ call assert_equal('build', tablist[0].variables.space)
+ call assert_equal(w2_id, tablist[0].windows[0])
+ call assert_equal([], 3->gettabinfo())
+
+ tabonly | only
+
+ lexpr ''
+ lopen
+ copen
+ let winlist = getwininfo()
+ call assert_false(winlist[0].quickfix)
+ call assert_false(winlist[0].loclist)
+ call assert_true(winlist[1].quickfix)
+ call assert_true(winlist[1].loclist)
+ call assert_true(winlist[2].quickfix)
+ call assert_false(winlist[2].loclist)
+ wincmd t | only
endfunction
function Test_get_buf_options()
diff --git a/src/nvim/testdir/test_cd.vim b/src/nvim/testdir/test_cd.vim
index 0bba321ee2..57db0a2544 100644
--- a/src/nvim/testdir/test_cd.vim
+++ b/src/nvim/testdir/test_cd.vim
@@ -215,3 +215,42 @@ func Test_cd_from_non_existing_dir()
cd -
call assert_equal(saveddir, getcwd())
endfunc
+
+func Test_cd_unknown_dir()
+ call mkdir('Xa')
+ cd Xa
+ call writefile(['text'], 'Xb.txt')
+ edit Xa/Xb.txt
+ let first_buf = bufnr()
+ cd ..
+ edit
+ call assert_equal(first_buf, bufnr())
+ edit Xa/Xb.txt
+ call assert_notequal(first_buf, bufnr())
+
+ bwipe!
+ exe "bwipe! " .. first_buf
+ call delete('Xa', 'rf')
+endfunc
+
+func Test_getcwd_actual_dir()
+ CheckFunction test_autochdir
+ let startdir = getcwd()
+ call mkdir('Xactual')
+ call test_autochdir()
+ set autochdir
+ edit Xactual/file.txt
+ call assert_match('testdir.Xactual$', getcwd())
+ lcd ..
+ call assert_match('testdir$', getcwd())
+ edit
+ call assert_match('testdir.Xactual$', getcwd())
+ call assert_match('testdir$', getcwd(win_getid()))
+
+ set noautochdir
+ bwipe!
+ call chdir(startdir)
+ call delete('Xactual', 'rf')
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim
index 98340d0ac6..75e17b47b8 100644
--- a/src/nvim/testdir/test_cmdline.vim
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -428,14 +428,17 @@ func Test_getcompletion()
call assert_equal([], l)
func T(a, c, p)
+ let g:cmdline_compl_params = [a:a, a:c, a:p]
return "oneA\noneB\noneC"
endfunc
command -nargs=1 -complete=custom,T MyCmd
let l = getcompletion('MyCmd ', 'cmdline')
call assert_equal(['oneA', 'oneB', 'oneC'], l)
+ call assert_equal(['', 'MyCmd ', 6], g:cmdline_compl_params)
delcommand MyCmd
delfunc T
+ unlet g:cmdline_compl_params
" For others test if the name is recognized.
let names = ['buffer', 'environment', 'file_in_path', 'mapping', 'tag', 'tag_listfiles', 'user']
diff --git a/src/nvim/testdir/test_execute_func.vim b/src/nvim/testdir/test_execute_func.vim
index 15ba894dbe..f2c7da0aa9 100644
--- a/src/nvim/testdir/test_execute_func.vim
+++ b/src/nvim/testdir/test_execute_func.vim
@@ -107,6 +107,18 @@ func Test_win_execute()
call win_gotoid(otherwin)
bwipe!
+
+ " check :lcd in another window does not change directory
+ let curid = win_getid()
+ let curdir = getcwd()
+ split Xother
+ lcd ..
+ " Use :pwd to get the actual current directory
+ let otherdir = execute('pwd')
+ call win_execute(curid, 'lcd testdir')
+ call assert_equal(otherdir, execute('pwd'))
+ bwipe!
+ execute 'cd ' .. curdir
endfunc
func Test_win_execute_update_ruler()
diff --git a/src/nvim/testdir/test_functions.vim b/src/nvim/testdir/test_functions.vim
index d10fad690c..4a2ade5afa 100644
--- a/src/nvim/testdir/test_functions.vim
+++ b/src/nvim/testdir/test_functions.vim
@@ -1592,6 +1592,10 @@ func Test_bufadd_bufload()
endfunc
func Test_readdir()
+ if isdirectory('Xdir')
+ call delete('Xdir', 'rf')
+ endif
+
call mkdir('Xdir')
call writefile([], 'Xdir/foo.txt')
call writefile([], 'Xdir/bar.txt')
diff --git a/src/nvim/testdir/test_highlight.vim b/src/nvim/testdir/test_highlight.vim
index 6fd9477ce9..c38bfa5677 100644
--- a/src/nvim/testdir/test_highlight.vim
+++ b/src/nvim/testdir/test_highlight.vim
@@ -651,6 +651,16 @@ func Test_1_highlight_Normalgroup_exists()
endif
endfunc
+function Test_no_space_before_xxx()
+ " Note: we need to create this highlight group in the test because it does not exist in Neovim
+ execute('hi StatusLineTermNC ctermfg=green')
+ let l:org_columns = &columns
+ set columns=17
+ let l:hi_StatusLineTermNC = join(split(execute('hi StatusLineTermNC')))
+ call assert_match('StatusLineTermNC xxx', l:hi_StatusLineTermNC)
+ let &columns = l:org_columns
+endfunction
+
" Test for using RGB color values in a highlight group
func Test_xxlast_highlight_RGB_color()
CheckCanRunGui
diff --git a/src/nvim/testdir/test_listchars.vim b/src/nvim/testdir/test_listchars.vim
index 7596b34433..9906b00222 100644
--- a/src/nvim/testdir/test_listchars.vim
+++ b/src/nvim/testdir/test_listchars.vim
@@ -286,6 +286,10 @@ func Test_listchars_unicode()
call cursor(1, 1)
call assert_equal(expected, ScreenLines(1, virtcol('$')))
+ set listchars=eol:\\u21d4,space:\\u2423,multispace:≡\\u2262\\U00002263,nbsp:\\U00002260,tab:←↔\\u2192
+ redraw!
+ call assert_equal(expected, ScreenLines(1, virtcol('$')))
+
set listchars+=lead:⇨,trail:⇦
let expected = ['⇨⇨⇨⇨⇨⇨⇨⇨a←↔↔↔↔↔→b␣c≠d⇦⇦⇔']
redraw!
diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim
index 8c6ce63ade..b38a59e98f 100644
--- a/src/nvim/testdir/test_quickfix.vim
+++ b/src/nvim/testdir/test_quickfix.vim
@@ -3653,6 +3653,9 @@ func Xqftick_tests(cchar)
\ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'r')
call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick)
+ if isdirectory("Xone")
+ call delete("Xone", 'rf')
+ endif
call writefile(["F8:80:L80", "F8:81:L81"], "Xone")
Xfile Xone
call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick)
diff --git a/src/nvim/testdir/test_registers.vim b/src/nvim/testdir/test_registers.vim
index fd8653a2eb..84a5aca3d5 100644
--- a/src/nvim/testdir/test_registers.vim
+++ b/src/nvim/testdir/test_registers.vim
@@ -43,6 +43,10 @@ func Test_yank_shows_register()
endfunc
func Test_display_registers()
+ " Disable clipboard
+ let save_clipboard = get(g:, 'clipboard', {})
+ let g:clipboard = {}
+
e file1
e file2
call setline(1, ['foo', 'bar'])
@@ -78,6 +82,7 @@ func Test_display_registers()
\ . ' c ": ls', a)
bwipe!
+ let g:clipboard = save_clipboard
endfunc
func Test_recording_status_in_ex_line()
diff --git a/src/nvim/testdir/test_textobjects.vim b/src/nvim/testdir/test_textobjects.vim
index c259453b5e..2b6bb8b302 100644
--- a/src/nvim/testdir/test_textobjects.vim
+++ b/src/nvim/testdir/test_textobjects.vim
@@ -421,4 +421,36 @@ func Test_textobj_quote()
close!
endfunc
+" Test for i(, i<, etc. when cursor is in front of a block
+func Test_textobj_find_paren_forward()
+ new
+
+ " i< and a> when cursor is in front of a block
+ call setline(1, '#include <foo.h>')
+ normal 0yi<
+ call assert_equal('foo.h', @")
+ normal 0ya>
+ call assert_equal('<foo.h>', @")
+
+ " 2i(, 3i( in front of a block enters second/third nested '('
+ call setline(1, 'foo (bar (baz (quux)))')
+ normal 0yi)
+ call assert_equal('bar (baz (quux))', @")
+ normal 02yi)
+ call assert_equal('baz (quux)', @")
+ normal 03yi)
+ call assert_equal('quux', @")
+
+ " 3i( in front of a block doesn't enter third but un-nested '('
+ call setline(1, 'foo (bar (baz) (quux))')
+ normal 03di)
+ call assert_equal('foo (bar (baz) (quux))', getline(1))
+ normal 02di)
+ call assert_equal('foo (bar () (quux))', getline(1))
+ normal 0di)
+ call assert_equal('foo ()', getline(1))
+
+ close!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/nvim/undo.c b/src/nvim/undo.c
index 7eb76abd2c..8161fce9f4 100644
--- a/src/nvim/undo.c
+++ b/src/nvim/undo.c
@@ -922,7 +922,7 @@ static u_header_T *unserialize_uhp(bufinfo_T *bi, const char *file_name)
uhp->uh_time = undo_read_time(bi);
// Unserialize optional fields.
- for (;; ) {
+ for (;;) {
int len = undo_read_byte(bi);
if (len == EOF) {
@@ -1504,7 +1504,7 @@ void u_read_undo(char *name, const char_u *hash, const char_u *orig_name FUNC_AT
// Optional header fields.
long last_save_nr = 0;
- for (;; ) {
+ for (;;) {
int len = undo_read_byte(&bi);
if (len == 0 || len == EOF) {
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 1fcbae8be3..5e2a81795a 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -458,11 +458,11 @@ static const int included_patches[] = {
1466,
1465,
1464,
- // 1463,
+ 1463,
1462,
- // 1461,
- // 1460,
- // 1459,
+ 1461,
+ 1460,
+ 1459,
1458,
1457,
1456,
diff --git a/src/nvim/viml/parser/expressions.c b/src/nvim/viml/parser/expressions.c
index 4f028fa87f..800ecf10db 100644
--- a/src/nvim/viml/parser/expressions.c
+++ b/src/nvim/viml/parser/expressions.c
@@ -1036,7 +1036,7 @@ void viml_pexpr_free_ast(ExprAST ast)
ExprASTNode **const cur_node = kv_last(ast_stack);
#ifndef NDEBUG
// Explicitly check for AST recursiveness.
- for (size_t i = 0 ; i < kv_size(ast_stack) - 1 ; i++) {
+ for (size_t i = 0; i < kv_size(ast_stack) - 1; i++) {
assert(*kv_A(ast_stack, i) != *cur_node);
}
#endif
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 26f483c842..e328ff5467 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -224,7 +224,7 @@ newwindow:
beep_flush();
} else {
if (Prenum) { // go to specified window
- for (wp = firstwin; --Prenum > 0; ) {
+ for (wp = firstwin; --Prenum > 0;) {
if (wp->w_next == NULL) {
break;
} else {
@@ -1958,8 +1958,8 @@ static void win_equal_rec(win_T *next_curwin, bool current, frame_T *topfr, int
// Set the width/height of this frame.
// Redraw when size or position changes
if (topfr->fr_height != height || topfr->fr_win->w_winrow != row
- || topfr->fr_width != width ||
- topfr->fr_win->w_wincol != col) {
+ || topfr->fr_width != width
+ || topfr->fr_win->w_wincol != col) {
topfr->fr_win->w_winrow = row;
frame_new_height(topfr, height, false, false);
topfr->fr_win->w_wincol = col;
@@ -2239,7 +2239,7 @@ void close_windows(buf_T *buf, int keep_curwin)
++RedrawingDisabled;
- for (win_T *wp = firstwin; wp != NULL && !ONE_WINDOW; ) {
+ for (win_T *wp = firstwin; wp != NULL && !ONE_WINDOW;) {
if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
&& !(wp->w_closing || wp->w_buffer->b_locked > 0)) {
if (win_close(wp, false) == FAIL) {
@@ -2582,7 +2582,7 @@ int win_close(win_T *win, bool free_buf)
* If the cursor goes to the preview or the quickfix window, try
* finding another window to go to.
*/
- for (;; ) {
+ for (;;) {
if (wp->w_next == NULL) {
wp = firstwin;
} else {
@@ -3147,12 +3147,12 @@ static void frame_new_height(frame_T *topfrp, int height, bool topfirst, bool wf
break;
}
if (topfirst) {
- do{
+ do {
frp = frp->fr_next;
}
while (wfh && frp != NULL && frame_fixed_height(frp));
} else {
- do{
+ do {
frp = frp->fr_prev;
}
while (wfh && frp != NULL && frame_fixed_height(frp));
@@ -3347,12 +3347,12 @@ static void frame_new_width(frame_T *topfrp, int width, bool leftfirst, bool wfw
break;
}
if (leftfirst) {
- do{
+ do {
frp = frp->fr_next;
}
while (wfw && frp != NULL && frame_fixed_width(frp));
} else {
- do{
+ do {
frp = frp->fr_prev;
}
while (wfw && frp != NULL && frame_fixed_width(frp));
@@ -4316,7 +4316,7 @@ win_T *win_vert_neighbor(tabpage_T *tp, win_T *wp, bool up, long count)
* downwards neighbor.
*/
fr = foundfr;
- for (;; ) {
+ for (;;) {
if (fr == tp->tp_topframe) {
goto end;
}
@@ -4334,7 +4334,7 @@ win_T *win_vert_neighbor(tabpage_T *tp, win_T *wp, bool up, long count)
/*
* Now go downwards to find the bottom or top frame in it.
*/
- for (;; ) {
+ for (;;) {
if (nfr->fr_layout == FR_LEAF) {
foundfr = nfr;
break;
@@ -4399,7 +4399,7 @@ win_T *win_horz_neighbor(tabpage_T *tp, win_T *wp, bool left, long count)
* right neighbor.
*/
fr = foundfr;
- for (;; ) {
+ for (;;) {
if (fr == tp->tp_topframe) {
goto end;
}
@@ -4417,7 +4417,7 @@ win_T *win_horz_neighbor(tabpage_T *tp, win_T *wp, bool left, long count)
/*
* Now go downwards to find the leftmost or rightmost frame in it.
*/
- for (;; ) {
+ for (;;) {
if (nfr->fr_layout == FR_LEAF) {
foundfr = nfr;
break;
@@ -4523,41 +4523,7 @@ static void win_enter_ext(win_T *const wp, const int flags)
}
changed_line_abv_curs(); // assume cursor position needs updating
- // New directory is either the local directory of the window, tab or NULL.
- char *new_dir = (char *)(curwin->w_localdir
- ? curwin->w_localdir : curtab->tp_localdir);
-
- char cwd[MAXPATHL];
- if (os_dirname((char_u *)cwd, MAXPATHL) != OK) {
- cwd[0] = NUL;
- }
-
- if (new_dir) {
- // Window/tab has a local directory: Save current directory as global
- // (unless that was done already) and change to the local directory.
- if (globaldir == NULL) {
- if (cwd[0] != NUL) {
- globaldir = (char_u *)xstrdup(cwd);
- }
- }
- if (os_chdir(new_dir) == 0) {
- if (!p_acd && pathcmp(new_dir, cwd, -1) != 0) {
- do_autocmd_dirchanged(new_dir, curwin->w_localdir
- ? kCdScopeWindow : kCdScopeTabpage, kCdCauseWindow);
- }
- shorten_fnames(true);
- }
- } else if (globaldir != NULL) {
- // Window doesn't have a local directory and we are not in the global
- // directory: Change to the global directory.
- if (os_chdir((char *)globaldir) == 0) {
- if (!p_acd && pathcmp((char *)globaldir, cwd, -1) != 0) {
- do_autocmd_dirchanged((char *)globaldir, kCdScopeGlobal, kCdCauseWindow);
- }
- }
- XFREE_CLEAR(globaldir);
- shorten_fnames(true);
- }
+ fix_current_dir();
if (flags & WEE_TRIGGER_NEW_AUTOCMDS) {
apply_autocmds(EVENT_WINNEW, NULL, NULL, false, curbuf);
@@ -4602,6 +4568,46 @@ static void win_enter_ext(win_T *const wp, const int flags)
do_autochdir();
}
+/// Used after making another window the current one: change directory if needed.
+void fix_current_dir(void)
+{
+ // New directory is either the local directory of the window, tab or NULL.
+ char *new_dir = (char *)(curwin->w_localdir
+ ? curwin->w_localdir : curtab->tp_localdir);
+ char cwd[MAXPATHL];
+ if (os_dirname((char_u *)cwd, MAXPATHL) != OK) {
+ cwd[0] = NUL;
+ }
+
+ if (new_dir) {
+ // Window/tab has a local directory: Save current directory as global
+ // (unless that was done already) and change to the local directory.
+ if (globaldir == NULL) {
+ if (cwd[0] != NUL) {
+ globaldir = (char_u *)xstrdup(cwd);
+ }
+ }
+ if (os_chdir(new_dir) == 0) {
+ if (!p_acd && pathcmp(new_dir, cwd, -1) != 0) {
+ do_autocmd_dirchanged(new_dir, curwin->w_localdir
+ ? kCdScopeWindow : kCdScopeTabpage, kCdCauseWindow);
+ }
+ last_chdir_reason = NULL;
+ shorten_fnames(true);
+ }
+ } else if (globaldir != NULL) {
+ // Window doesn't have a local directory and we are not in the global
+ // directory: Change to the global directory.
+ if (os_chdir((char *)globaldir) == 0) {
+ if (!p_acd && pathcmp((char *)globaldir, cwd, -1) != 0) {
+ do_autocmd_dirchanged((char *)globaldir, kCdScopeGlobal, kCdCauseWindow);
+ }
+ }
+ XFREE_CLEAR(globaldir);
+ last_chdir_reason = NULL;
+ shorten_fnames(true);
+ }
+}
/// Jump to the first open window that contains buffer "buf", if one exists.
/// Returns a pointer to the window found, otherwise NULL.
@@ -5825,8 +5831,8 @@ void scroll_to_fraction(win_T *wp, int prev_height)
// is visible.
if (height > 0
&& (!wp->w_p_scb || wp == curwin)
- && (height < wp->w_buffer->b_ml.ml_line_count ||
- wp->w_topline > 1)) {
+ && (height < wp->w_buffer->b_ml.ml_line_count
+ || wp->w_topline > 1)) {
/*
* Find a value for w_topline that shows the cursor at the same
* relative position in the window as before (more or less).
@@ -6082,7 +6088,7 @@ void command_height(void)
static void frame_add_height(frame_T *frp, int n)
{
frame_new_height(frp, frp->fr_height + n, false, false);
- for (;; ) {
+ for (;;) {
frp = frp->fr_parent;
if (frp == NULL) {
break;
@@ -6626,6 +6632,9 @@ void restore_win_noblock(win_T *save_curwin, tabpage_T *save_curtab, bool no_dis
curwin = save_curwin;
curbuf = curwin->w_buffer;
}
+ // If called by win_execute() and executing the command changed the
+ // directory, it now has to be restored.
+ fix_current_dir();
}
/// Make "buf" the current buffer.
@@ -7005,7 +7014,7 @@ int win_getid(typval_T *argvars)
wp = tp->tp_firstwin;
}
}
- for ( ; wp != NULL; wp = wp->w_next) {
+ for (; wp != NULL; wp = wp->w_next) {
if (--winnr == 0) {
return wp->handle;
}
diff --git a/src/uncrustify.cfg b/src/uncrustify.cfg
index c06bf41d47..558fa1759f 100644
--- a/src/uncrustify.cfg
+++ b/src/uncrustify.cfg
@@ -141,7 +141,7 @@ sp_enum_before_assign = ignore # ignore/add/remove/force/not_defined
# Add or remove space after assignment '=' in enum.
#
# Overrides sp_enum_assign.
-sp_enum_after_assign = ignore # ignore/add/remove/force/not_defined
+sp_enum_after_assign = force # ignore/add/remove/force/not_defined
# Add or remove space around assignment ':' in enum.
sp_enum_colon = ignore # ignore/add/remove/force/not_defined
@@ -149,11 +149,11 @@ sp_enum_colon = ignore # ignore/add/remove/force/not_defined
# Add or remove space around preprocessor '##' concatenation operator.
#
# Default: add
-sp_pp_concat = ignore # ignore/add/remove/force/not_defined
+sp_pp_concat = remove # ignore/add/remove/force/not_defined
# Add or remove space after preprocessor '#' stringify operator.
# Also affects the '#@' charizing operator.
-sp_pp_stringify = ignore # ignore/add/remove/force/not_defined
+sp_pp_stringify = remove # ignore/add/remove/force/not_defined
# Add or remove space before preprocessor '#' stringify operator
# as in '#define x(y) L#y'.
@@ -334,10 +334,10 @@ sp_after_sparen = ignore # ignore/add/remove/force/not_defined
sp_sparen_brace = ignore # ignore/add/remove/force/not_defined
# Add or remove space between 'do' and '{'.
-sp_do_brace_open = ignore # ignore/add/remove/force/not_defined
+sp_do_brace_open = force # ignore/add/remove/force/not_defined
# Add or remove space between '}' and 'while'.
-sp_brace_close_while = ignore # ignore/add/remove/force/not_defined
+sp_brace_close_while = force # ignore/add/remove/force/not_defined
# Add or remove space between 'while' and '('. Overrides sp_before_sparen.
sp_while_paren_open = ignore # ignore/add/remove/force/not_defined
@@ -354,18 +354,18 @@ sp_special_semi = ignore # ignore/add/remove/force/not_defined
# Add or remove space before ';'.
#
# Default: remove
-sp_before_semi = ignore # ignore/add/remove/force/not_defined
+sp_before_semi = remove # ignore/add/remove/force/not_defined
# Add or remove space before ';' in non-empty 'for' statements.
-sp_before_semi_for = ignore # ignore/add/remove/force/not_defined
+sp_before_semi_for = remove # ignore/add/remove/force/not_defined
# Add or remove space before a semicolon of an empty left part of a for
# statement, as in 'for ( <here> ; ; )'.
-sp_before_semi_for_empty = ignore # ignore/add/remove/force/not_defined
+sp_before_semi_for_empty = remove # ignore/add/remove/force/not_defined
# Add or remove space between the semicolons of an empty middle part of a for
# statement, as in 'for ( ; <here> ; )'.
-sp_between_semi_for_empty = ignore # ignore/add/remove/force/not_defined
+sp_between_semi_for_empty = remove # ignore/add/remove/force/not_defined
# Add or remove space after ';', except when followed by a comment.
#
@@ -379,10 +379,10 @@ sp_after_semi_for = force # ignore/add/remove/force/not_defined
# Add or remove space after the final semicolon of an empty part of a for
# statement, as in 'for ( ; ; <here> )'.
-sp_after_semi_for_empty = ignore # ignore/add/remove/force/not_defined
+sp_after_semi_for_empty = remove # ignore/add/remove/force/not_defined
# Add or remove space before '[' (except '[]').
-sp_before_square = ignore # ignore/add/remove/force/not_defined
+sp_before_square = remove # ignore/add/remove/force/not_defined
# Add or remove space before '[' for a variable definition.
#
@@ -393,13 +393,13 @@ sp_before_vardef_square = remove # ignore/add/remove/force/not_defined
sp_before_square_asm_block = ignore # ignore/add/remove/force/not_defined
# Add or remove space before '[]'.
-sp_before_squares = ignore # ignore/add/remove/force/not_defined
+sp_before_squares = remove # ignore/add/remove/force/not_defined
# Add or remove space before C++17 structured bindings.
sp_cpp_before_struct_binding = ignore # ignore/add/remove/force/not_defined
# Add or remove space inside a non-empty '[' and ']'.
-sp_inside_square = ignore # ignore/add/remove/force/not_defined
+sp_inside_square = remove # ignore/add/remove/force/not_defined
# Add or remove space inside '[]'.
sp_inside_square_empty = ignore # ignore/add/remove/force/not_defined
@@ -592,18 +592,18 @@ sp_func_def_paren_empty = ignore # ignore/add/remove/force/not_defined
# Add or remove space inside empty function '()'.
# Overrides sp_after_angle unless use_sp_after_angle_always is set to true.
-sp_inside_fparens = ignore # ignore/add/remove/force/not_defined
+sp_inside_fparens = remove # ignore/add/remove/force/not_defined
# Add or remove space inside function '(' and ')'.
-sp_inside_fparen = ignore # ignore/add/remove/force/not_defined
+sp_inside_fparen = remove # ignore/add/remove/force/not_defined
# Add or remove space inside the first parentheses in a function type, as in
# 'void (*x)(...)'.
-sp_inside_tparen = ignore # ignore/add/remove/force/not_defined
+sp_inside_tparen = remove # ignore/add/remove/force/not_defined
# Add or remove space between the ')' and '(' in a function type, as in
# 'void (*x)(...)'.
-sp_after_tparen_close = ignore # ignore/add/remove/force/not_defined
+sp_after_tparen_close = remove # ignore/add/remove/force/not_defined
# Add or remove space between ']' and '(' when part of a function call.
sp_square_fparen = ignore # ignore/add/remove/force/not_defined
@@ -649,7 +649,7 @@ sp_func_class_paren = ignore # ignore/add/remove/force/not_defined
sp_func_class_paren_empty = ignore # ignore/add/remove/force/not_defined
# Add or remove space between 'return' and '('.
-sp_return_paren = ignore # ignore/add/remove/force/not_defined
+sp_return_paren = force # ignore/add/remove/force/not_defined
# Add or remove space between 'return' and '{'.
sp_return_brace = ignore # ignore/add/remove/force/not_defined
@@ -714,7 +714,7 @@ sp_else_brace = add # ignore/add/remove/force/not_defined
sp_brace_else = add # ignore/add/remove/force/not_defined
# Add or remove space between '}' and the name of a typedef on the same line.
-sp_brace_typedef = ignore # ignore/add/remove/force/not_defined
+sp_brace_typedef = force # ignore/add/remove/force/not_defined
# Add or remove space before the '{' of a 'catch' statement, if the '{' and
# 'catch' are on the same line, as in 'catch (decl) <here> {'.
@@ -1632,7 +1632,7 @@ nl_using_brace = ignore # ignore/add/remove/force/not_defined
nl_brace_brace = ignore # ignore/add/remove/force/not_defined
# Add or remove newline between 'do' and '{'.
-nl_do_brace = ignore # ignore/add/remove/force/not_defined
+nl_do_brace = remove # ignore/add/remove/force/not_defined
# Add or remove newline between '}' and 'while' of 'do' statement.
nl_brace_while = ignore # ignore/add/remove/force/not_defined
@@ -2333,7 +2333,7 @@ pos_arith = ignore # ignore/break/force/lead/trail/join/
pos_assign = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force
# The position of Boolean operators in wrapped expressions.
-pos_bool = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force
+pos_bool = lead # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force
# The position of comparison operators in wrapped expressions.
pos_compare = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force
@@ -3307,5 +3307,5 @@ set QUESTION REAL_FATTR_CONST
set QUESTION REAL_FATTR_NONNULL_ALL
set QUESTION REAL_FATTR_PURE
set QUESTION REAL_FATTR_WARN_UNUSED_RESULT
-# option(s) with 'not default' value: 69
+# option(s) with 'not default' value: 87
#