aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_docmd.c
diff options
context:
space:
mode:
authorDundar Göc <gocdundar@gmail.com>2021-09-06 10:48:31 +0200
committerDundar Göc <gocdundar@gmail.com>2021-09-07 19:07:51 +0200
commit1e49a1c888a3d9a581f4aa409a26ada3ac2417cb (patch)
treea3f34d8b23e38709b9831de0a7662530deaa3d1e /src/nvim/ex_docmd.c
parentdb695cc4cafa6c26eb71a183cc73a167b842731e (diff)
downloadrneovim-1e49a1c888a3d9a581f4aa409a26ada3ac2417cb.tar.gz
rneovim-1e49a1c888a3d9a581f4aa409a26ada3ac2417cb.tar.bz2
rneovim-1e49a1c888a3d9a581f4aa409a26ada3ac2417cb.zip
refactor: format files with uncrustify
Diffstat (limited to 'src/nvim/ex_docmd.c')
-rw-r--r--src/nvim/ex_docmd.c3169
1 files changed, 1678 insertions, 1491 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 3afcd9ec5a..1d7f83df99 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -4,14 +4,13 @@
// ex_docmd.c: functions for executing an Ex command line.
#include <assert.h>
-#include <string.h>
+#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h>
-#include <inttypes.h>
+#include <string.h>
-#include "nvim/vim.h"
+#include "nvim/api/private/helpers.h"
#include "nvim/ascii.h"
-#include "nvim/ex_docmd.h"
#include "nvim/buffer.h"
#include "nvim/change.h"
#include "nvim/charset.h"
@@ -21,16 +20,26 @@
#include "nvim/edit.h"
#include "nvim/eval.h"
#include "nvim/eval/userfunc.h"
+#include "nvim/event/rstream.h"
+#include "nvim/event/wstream.h"
#include "nvim/ex_cmds.h"
#include "nvim/ex_cmds2.h"
+#include "nvim/ex_cmds_defs.h"
+#include "nvim/ex_docmd.h"
#include "nvim/ex_eval.h"
#include "nvim/ex_getln.h"
+#include "nvim/ex_session.h"
+#include "nvim/file_search.h"
#include "nvim/fileio.h"
#include "nvim/fold.h"
#include "nvim/func_attr.h"
+#include "nvim/garray.h"
#include "nvim/getchar.h"
+#include "nvim/globals.h"
#include "nvim/hardcopy.h"
#include "nvim/if_cscope.h"
+#include "nvim/keymap.h"
+#include "nvim/lua/executor.h"
#include "nvim/main.h"
#include "nvim/mark.h"
#include "nvim/mbyte.h"
@@ -39,20 +48,21 @@
#include "nvim/menu.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/ex_session.h"
-#include "nvim/keymap.h"
-#include "nvim/file_search.h"
-#include "nvim/garray.h"
+#include "nvim/mouse.h"
#include "nvim/move.h"
#include "nvim/normal.h"
#include "nvim/ops.h"
#include "nvim/option.h"
+#include "nvim/os/input.h"
+#include "nvim/os/os.h"
+#include "nvim/os/time.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
#include "nvim/quickfix.h"
#include "nvim/regexp.h"
#include "nvim/screen.h"
#include "nvim/search.h"
+#include "nvim/shada.h"
#include "nvim/sign.h"
#include "nvim/spell.h"
#include "nvim/spellfile.h"
@@ -63,18 +73,8 @@
#include "nvim/ui.h"
#include "nvim/undo.h"
#include "nvim/version.h"
+#include "nvim/vim.h"
#include "nvim/window.h"
-#include "nvim/os/os.h"
-#include "nvim/os/input.h"
-#include "nvim/os/time.h"
-#include "nvim/ex_cmds_defs.h"
-#include "nvim/mouse.h"
-#include "nvim/event/rstream.h"
-#include "nvim/event/wstream.h"
-#include "nvim/shada.h"
-#include "nvim/lua/executor.h"
-#include "nvim/globals.h"
-#include "nvim/api/private/helpers.h"
static int quitmore = 0;
static bool ex_pressedreturn = false;
@@ -90,9 +90,9 @@ typedef struct ucmd {
char_u *uc_compl_arg; // completion argument if any
} ucmd_T;
-#define UC_BUFFER 1 /* -buffer: local to current buffer */
+#define UC_BUFFER 1 // -buffer: local to current buffer
-static garray_T ucmds = {0, 0, sizeof(ucmd_T), 4, NULL};
+static garray_T ucmds = { 0, 0, sizeof(ucmd_T), 4, NULL };
#define USER_CMD(i) (&((ucmd_T *)(ucmds.ga_data))[i])
#define USER_CMD_GA(gap, i) (&((ucmd_T *)((gap)->ga_data))[i])
@@ -100,10 +100,10 @@ static garray_T ucmds = {0, 0, sizeof(ucmd_T), 4, NULL};
// Whether a command index indicates a user command.
# define IS_USER_CMDIDX(idx) ((int)(idx) < 0)
-/* Struct for storing a line inside a while/for loop */
+// Struct for storing a line inside a while/for loop
typedef struct {
- char_u *line; /* command line */
- linenr_T lnum; /* sourcing_lnum of the line */
+ char_u *line; // command line
+ linenr_T lnum; // sourcing_lnum of the line
} wcmd_T;
#define FREE_WCMD(wcmd) xfree((wcmd)->line)
@@ -123,7 +123,7 @@ struct loop_cookie {
};
-/* Struct to save a few things while debugging. Used in do_cmdline() only. */
+// Struct to save a few things while debugging. Used in do_cmdline() only.
struct dbg_stuff {
int trylevel;
int force_abort;
@@ -152,7 +152,7 @@ struct dbg_stuff {
# include "ex_cmds_defs.generated.h"
#endif
-static char_u dollar_command[2] = {'$', 0};
+static char_u dollar_command[2] = { '$', 0 };
static void save_dbg_stuff(struct dbg_stuff *dsp)
{
@@ -198,8 +198,9 @@ void do_exmode(void)
/* When using ":global /pat/ visual" and then "Q" we return to continue
* the :global command. */
- if (global_busy)
+ if (global_busy) {
return;
+ }
save_msg_scroll = msg_scroll;
RedrawingDisabled++; // don't redisplay the window
@@ -207,7 +208,7 @@ void do_exmode(void)
MSG(_("Entering Ex mode. Type \"visual\" to go to Normal mode."));
while (exmode_active) {
- /* Check for a ":normal" command and no more characters left. */
+ // Check for a ":normal" command and no more characters left.
if (ex_normal_busy > 0 && typebuf.tb_len == 0) {
exmode_active = false;
break;
@@ -232,18 +233,20 @@ void do_exmode(void)
/* go up one line, to overwrite the ":<CR>" line, so the
* output doesn't contain empty lines. */
msg_row = prev_msg_row;
- if (prev_msg_row == Rows - 1)
+ if (prev_msg_row == Rows - 1) {
msg_row--;
+ }
}
msg_col = 0;
print_line_no_prefix(curwin->w_cursor.lnum, FALSE, FALSE);
msg_clr_eos();
}
- } else if (ex_pressedreturn && !ex_no_reprint) { /* must be at EOF */
- if (curbuf->b_ml.ml_flags & ML_EMPTY)
+ } else if (ex_pressedreturn && !ex_no_reprint) { // must be at EOF
+ if (curbuf->b_ml.ml_flags & ML_EMPTY) {
EMSG(_(e_emptybuf));
- else
+ } else {
EMSG(_("E501: At end-of-file"));
+ }
}
}
@@ -301,10 +304,10 @@ int do_cmdline_cmd(const char *cmd)
/// DOCMD_EXCRESET - Reset the exception environment (used for debugging).
/// DOCMD_KEEPLINE - Store first typed line (for repeating with ".").
///
+/// @param cookie argument for fgetline()
+///
/// @return FAIL if cmdline could not be executed, OK otherwise
-int do_cmdline(char_u *cmdline, LineGetter fgetline,
- void *cookie, /* argument for fgetline() */
- int flags)
+int do_cmdline(char_u *cmdline, LineGetter fgetline, void *cookie, int flags)
{
char_u *next_cmdline; // next cmd to execute
char_u *cmdline_copy = NULL; // copy of cmd line
@@ -333,7 +336,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
struct loop_cookie cmd_loop_cookie;
void *real_cookie;
int getline_is_func;
- static int call_depth = 0; /* recursiveness */
+ static int call_depth = 0; // recursiveness
/* For every pair of do_cmdline()/do_one_cmd() calls, use an extra memory
* location for storing error messages to be converted to an exception.
@@ -363,10 +366,11 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
real_cookie = getline_cookie(fgetline, cookie);
- /* Inside a function use a higher nesting level. */
+ // Inside a function use a higher nesting level.
getline_is_func = getline_equal(fgetline, cookie, get_func_line);
- if (getline_is_func && ex_nesting_level == func_level(real_cookie))
+ if (getline_is_func && ex_nesting_level == func_level(real_cookie)) {
++ex_nesting_level;
+ }
/* Get the function or script name and the address where the next breakpoint
* line and the debug tick for a function or script are stored. */
@@ -422,13 +426,14 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
do {
getline_is_func = getline_equal(fgetline, cookie, get_func_line);
- /* stop skipping cmds for an error msg after all endif/while/for */
+ // stop skipping cmds for an error msg after all endif/while/for
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;
+ }
/*
* 1. If repeating a line in a loop, get a line from lines_ga.
@@ -436,7 +441,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
* 3. If a line is given: Make a copy, so we can mess with it.
*/
- /* 1. If repeating, get a previous line from lines_ga. */
+ // 1. If repeating, get a previous line from lines_ga.
if (cstack.cs_looplevel > 0 && current_line < lines_ga.ga_len) {
/* Each '|' separated command is stored separately in lines_ga, to
* be able to jump to it. Don't use next_cmdline now. */
@@ -445,49 +450,50 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
/* Check if a function has returned or, unless it has an unclosed
* try conditional, aborted. */
if (getline_is_func) {
- if (do_profiling == PROF_YES)
+ if (do_profiling == PROF_YES) {
func_line_end(real_cookie);
+ }
if (func_has_ended(real_cookie)) {
retval = FAIL;
break;
}
} else if (do_profiling == PROF_YES
- && getline_equal(fgetline, cookie, getsourceline))
+ && getline_equal(fgetline, cookie, getsourceline)) {
script_line_end();
+ }
- /* Check if a sourced file hit a ":finish" command. */
+ // Check if a sourced file hit a ":finish" command.
if (source_finished(fgetline, cookie)) {
retval = FAIL;
break;
}
- /* If breakpoints have been added/deleted need to check for it. */
+ // If breakpoints have been added/deleted need to check for it.
if (breakpoint != NULL && dbg_tick != NULL
&& *dbg_tick != debug_tick) {
- *breakpoint = dbg_find_breakpoint(
- getline_equal(fgetline, cookie, getsourceline),
- fname, sourcing_lnum);
+ *breakpoint = dbg_find_breakpoint(getline_equal(fgetline, cookie, getsourceline),
+ fname, sourcing_lnum);
*dbg_tick = debug_tick;
}
next_cmdline = ((wcmd_T *)(lines_ga.ga_data))[current_line].line;
sourcing_lnum = ((wcmd_T *)(lines_ga.ga_data))[current_line].lnum;
- /* Did we encounter a breakpoint? */
+ // Did we encounter a breakpoint?
if (breakpoint != NULL && *breakpoint != 0
&& *breakpoint <= sourcing_lnum) {
dbg_breakpoint(fname, sourcing_lnum);
- /* Find next breakpoint. */
- *breakpoint = dbg_find_breakpoint(
- getline_equal(fgetline, cookie, getsourceline),
- fname, sourcing_lnum);
+ // Find next breakpoint.
+ *breakpoint = dbg_find_breakpoint(getline_equal(fgetline, cookie, getsourceline),
+ fname, sourcing_lnum);
*dbg_tick = debug_tick;
}
if (do_profiling == PROF_YES) {
- if (getline_is_func)
+ if (getline_is_func) {
func_line_start(real_cookie);
- else if (getline_equal(fgetline, cookie, getsourceline))
+ } else if (getline_equal(fgetline, cookie, getsourceline)) {
script_line_start();
+ }
}
}
@@ -509,7 +515,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
cmd_cookie = cookie;
}
- /* 2. If no line given, get an allocated line with fgetline(). */
+ // 2. If no line given, get an allocated line with fgetline().
if (next_cmdline == NULL) {
/*
* Need to set msg_didout for the first line after an ":if",
@@ -539,13 +545,14 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
*/
if (flags & DOCMD_KEEPLINE) {
xfree(repeat_cmdline);
- if (count == 0)
+ if (count == 0) {
repeat_cmdline = vim_strsave(next_cmdline);
- else
+ } else {
repeat_cmdline = NULL;
+ }
}
}
- /* 3. Make a copy of the command so we can mess with it. */
+ // 3. Make a copy of the command so we can mess with it.
else if (cmdline_copy == NULL) {
next_cmdline = vim_strsave(next_cmdline);
}
@@ -575,8 +582,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
msg_didout_before_start = msg_didout;
msg_didany = false; // no output yet
msg_start();
- msg_scroll = TRUE; /* put messages below each other */
- ++no_wait_return; /* don't wait for return until finished */
+ msg_scroll = TRUE; // put messages below each other
+ ++no_wait_return; // don't wait for return until finished
++RedrawingDisabled;
did_inc = TRUE;
}
@@ -602,10 +609,11 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
next_cmdline = NULL;
}
- if (cmd_cookie == (void *)&cmd_loop_cookie)
+ if (cmd_cookie == (void *)&cmd_loop_cookie) {
/* Use "current_line" from "cmd_loop_cookie", it may have been
* incremented when defining a function. */
current_line = cmd_loop_cookie.current_line;
+ }
if (next_cmdline == NULL) {
XFREE_CLEAR(cmdline_copy);
@@ -627,11 +635,12 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
}
- /* reset did_emsg for a function that is not aborted by an error */
+ // reset did_emsg for a function that is not aborted by an error
if (did_emsg && !force_abort
&& getline_equal(fgetline, cookie, get_func_line)
- && !func_has_abort(real_cookie))
+ && !func_has_abort(real_cookie)) {
did_emsg = FALSE;
+ }
if (cstack.cs_looplevel > 0) {
++current_line;
@@ -656,24 +665,24 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
&& cstack.cs_line[cstack.cs_idx] >= 0
&& (cstack.cs_flags[cstack.cs_idx] & CSF_ACTIVE)) {
current_line = cstack.cs_line[cstack.cs_idx];
- /* remember we jumped there */
+ // remember we jumped there
cstack.cs_lflags |= CSL_HAD_LOOP;
- line_breakcheck(); /* check if CTRL-C typed */
+ line_breakcheck(); // check if CTRL-C typed
/* Check for the next breakpoint at or after the ":while"
* or ":for". */
if (breakpoint != NULL) {
- *breakpoint = dbg_find_breakpoint(
- getline_equal(fgetline, cookie, getsourceline),
- fname,
- ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
+ *breakpoint = dbg_find_breakpoint(getline_equal(fgetline, cookie, getsourceline),
+ fname,
+ ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
*dbg_tick = debug_tick;
}
} else {
- /* can only get here with ":endwhile" or ":endfor" */
- if (cstack.cs_idx >= 0)
+ // can only get here with ":endwhile" or ":endfor"
+ if (cstack.cs_idx >= 0) {
rewind_conditionals(&cstack, cstack.cs_idx - 1,
- CSF_WHILE | CSF_FOR, &cstack.cs_looplevel);
+ CSF_WHILE | CSF_FOR, &cstack.cs_looplevel);
+ }
}
}
/*
@@ -726,9 +735,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
force_abort = false;
}
- /* Convert an interrupt to an exception if appropriate. */
+ // Convert an interrupt to an exception if appropriate.
(void)do_intthrow(&cstack);
-
}
/*
* Continue executing command lines when:
@@ -766,14 +774,15 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
&& !source_finished(fgetline, cookie))
|| (getline_equal(fgetline, cookie, get_func_line)
&& !func_has_ended(real_cookie)))) {
- if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY)
+ if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY) {
EMSG(_(e_endtry));
- else if (cstack.cs_flags[cstack.cs_idx] & CSF_WHILE)
+ } else if (cstack.cs_flags[cstack.cs_idx] & CSF_WHILE) {
EMSG(_(e_endwhile));
- else if (cstack.cs_flags[cstack.cs_idx] & CSF_FOR)
+ } else if (cstack.cs_flags[cstack.cs_idx] & CSF_FOR) {
EMSG(_(e_endfor));
- else
+ } else {
EMSG(_(e_endif));
+ }
}
/*
@@ -786,10 +795,11 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
do {
int idx = cleanup_conditionals(&cstack, 0, TRUE);
- if (idx >= 0)
- --idx; /* remove try block not in its finally clause */
+ if (idx >= 0) {
+ --idx; // remove try block not in its finally clause
+ }
rewind_conditionals(&cstack, idx, CSF_WHILE | CSF_FOR,
- &cstack.cs_looplevel);
+ &cstack.cs_looplevel);
} while (cstack.cs_idx >= 0);
trylevel = initial_trylevel;
}
@@ -821,8 +831,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
switch (current_exception->type) {
case ET_USER:
vim_snprintf((char *)IObuff, IOSIZE,
- _("E605: Exception not caught: %s"),
- current_exception->value);
+ _("E605: Exception not caught: %s"),
+ current_exception->value);
p = vim_strsave(IObuff);
break;
case ET_ERROR:
@@ -886,27 +896,30 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
check_cstack = true;
}
} else {
- /* When leaving a function, reduce nesting level. */
- if (getline_equal(fgetline, cookie, get_func_line))
+ // When leaving a function, reduce nesting level.
+ if (getline_equal(fgetline, cookie, get_func_line)) {
--ex_nesting_level;
+ }
/*
* Go to debug mode when returning from a function in which we are
* single-stepping.
*/
if ((getline_equal(fgetline, cookie, getsourceline)
|| getline_equal(fgetline, cookie, get_func_line))
- && ex_nesting_level + 1 <= debug_break_level)
+ && ex_nesting_level + 1 <= debug_break_level) {
do_debug(getline_equal(fgetline, cookie, getsourceline)
? (char_u *)_("End of sourced file")
: (char_u *)_("End of function"));
+ }
}
/*
* Restore the exception environment (done after returning from the
* debugger).
*/
- if (flags & DOCMD_EXCRESET)
+ if (flags & DOCMD_EXCRESET) {
restore_dbg_stuff(&debug_saved);
+ }
msg_list = saved_msg_list;
@@ -925,8 +938,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
* wait for hit-return. Also for an error situation.
*/
if (retval == FAIL
- || (did_endif && KeyTyped && !did_emsg)
- ) {
+ || (did_endif && KeyTyped && !did_emsg)) {
need_wait_return = false;
msg_didany = false; // don't wait when restarting edit
} else if (need_wait_return) {
@@ -957,9 +969,9 @@ static char_u *get_loop_line(int c, void *cookie, int indent, bool do_concat)
char_u *line;
if (cp->current_line + 1 >= cp->lines_gap->ga_len) {
- if (cp->repeating)
- return NULL; /* trying to read past ":endwhile"/":endfor" */
-
+ if (cp->repeating) {
+ return NULL; // trying to read past ":endwhile"/":endfor"
+ }
// First time inside the ":while"/":for": get line normally.
if (cp->getline == NULL) {
line = getcmdline(c, 0L, indent, do_concat);
@@ -991,13 +1003,11 @@ static void store_loop_line(garray_T *gap, char_u *line)
p->lnum = sourcing_lnum;
}
-/*
- * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals
- * "func". * Otherwise return TRUE when "fgetline" equals "func".
- */
-int getline_equal(LineGetter fgetline,
- void *cookie, /* argument for fgetline() */
- LineGetter func)
+/// If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals
+/// "func". * Otherwise return TRUE when "fgetline" equals "func".
+///
+/// @param cookie argument for fgetline()
+int getline_equal(LineGetter fgetline, void *cookie, LineGetter func)
{
LineGetter gp;
struct loop_cookie *cp;
@@ -1014,13 +1024,11 @@ int getline_equal(LineGetter fgetline,
return gp == func;
}
-/*
- * If "fgetline" is get_loop_line(), return the cookie used by the original
- * getline function. Otherwise return "cookie".
- */
-void * getline_cookie(LineGetter fgetline,
- void *cookie /* argument for fgetline() */
- )
+/// If "fgetline" is get_loop_line(), return the cookie used by the original
+/// getline function. Otherwise return "cookie".
+///
+/// @param cookie argument for fgetline()
+void * getline_cookie(LineGetter fgetline, void *cookie)
{
LineGetter gp;
struct loop_cookie *cp;
@@ -1049,16 +1057,18 @@ static int compute_buffer_local_count(int addr_type, int lnum, int offset)
int count = offset;
buf = firstbuf;
- while (buf->b_next != NULL && buf->b_fnum < lnum)
+ while (buf->b_next != NULL && buf->b_fnum < lnum) {
buf = buf->b_next;
+ }
while (count != 0) {
count += (count < 0) ? 1 : -1;
nextbuf = (offset < 0) ? buf->b_prev : buf->b_next;
- if (nextbuf == NULL)
+ if (nextbuf == NULL) {
break;
+ }
buf = nextbuf;
- if (addr_type == ADDR_LOADED_BUFFERS)
- /* skip over unloaded buffers */
+ if (addr_type == ADDR_LOADED_BUFFERS) {
+ // skip over unloaded buffers
while (buf->b_ml.ml_mfp == NULL) {
nextbuf = (offset < 0) ? buf->b_prev : buf->b_next;
if (nextbuf == NULL) {
@@ -1066,13 +1076,15 @@ static int compute_buffer_local_count(int addr_type, int lnum, int offset)
}
buf = nextbuf;
}
+ }
}
// we might have gone too far, last buffer is not loaded
if (addr_type == ADDR_LOADED_BUFFERS) {
while (buf->b_ml.ml_mfp == NULL) {
nextbuf = (offset >= 0) ? buf->b_prev : buf->b_next;
- if (nextbuf == NULL)
+ if (nextbuf == NULL) {
break;
+ }
buf = nextbuf;
}
}
@@ -1088,8 +1100,9 @@ static int current_win_nr(const win_T *win)
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
++nr;
- if (wp == win)
+ if (wp == win) {
break;
+ }
}
return nr;
}
@@ -1100,8 +1113,9 @@ static int current_tab_nr(tabpage_T *tab)
FOR_ALL_TABS(tp) {
++nr;
- if (tp == tab)
+ if (tp == tab) {
break;
+ }
}
return nr;
}
@@ -1116,87 +1130,87 @@ static int current_tab_nr(tabpage_T *tab)
static void get_wincmd_addr_type(char_u *arg, exarg_T *eap)
{
switch (*arg) {
- case 'S':
- case Ctrl_S:
- case 's':
- case Ctrl_N:
- case 'n':
- case 'j':
- case Ctrl_J:
- case 'k':
- case Ctrl_K:
- case 'T':
- case Ctrl_R:
- case 'r':
- case 'R':
- case 'K':
- case 'J':
- case '+':
- case '-':
- case Ctrl__:
- case '_':
- case '|':
- case ']':
- case Ctrl_RSB:
- case 'g':
- case Ctrl_G:
- case Ctrl_V:
- case 'v':
- case 'h':
- case Ctrl_H:
- case 'l':
- case Ctrl_L:
- case 'H':
- case 'L':
- case '>':
- case '<':
- case '}':
- case 'f':
- case 'F':
- case Ctrl_F:
- case 'i':
- case Ctrl_I:
- case 'd':
- case Ctrl_D:
- // window size or any count
- eap->addr_type = ADDR_OTHER; // -V1037
- break;
+ case 'S':
+ case Ctrl_S:
+ case 's':
+ case Ctrl_N:
+ case 'n':
+ case 'j':
+ case Ctrl_J:
+ case 'k':
+ case Ctrl_K:
+ case 'T':
+ case Ctrl_R:
+ case 'r':
+ case 'R':
+ case 'K':
+ case 'J':
+ case '+':
+ case '-':
+ case Ctrl__:
+ case '_':
+ case '|':
+ case ']':
+ case Ctrl_RSB:
+ case 'g':
+ case Ctrl_G:
+ case Ctrl_V:
+ case 'v':
+ case 'h':
+ case Ctrl_H:
+ case 'l':
+ case Ctrl_L:
+ case 'H':
+ case 'L':
+ case '>':
+ case '<':
+ case '}':
+ case 'f':
+ case 'F':
+ case Ctrl_F:
+ case 'i':
+ case Ctrl_I:
+ case 'd':
+ case Ctrl_D:
+ // window size or any count
+ eap->addr_type = ADDR_OTHER; // -V1037
+ break;
- case Ctrl_HAT:
- case '^':
- // buffer number
- eap->addr_type = ADDR_BUFFERS;
- break;
+ case Ctrl_HAT:
+ case '^':
+ // buffer number
+ eap->addr_type = ADDR_BUFFERS;
+ break;
- case Ctrl_Q:
- case 'q':
- case Ctrl_C:
- case 'c':
- case Ctrl_O:
- case 'o':
- case Ctrl_W:
- case 'w':
- case 'W':
- case 'x':
- case Ctrl_X:
- // window number
- eap->addr_type = ADDR_WINDOWS;
- break;
+ case Ctrl_Q:
+ case 'q':
+ case Ctrl_C:
+ case 'c':
+ case Ctrl_O:
+ case 'o':
+ case Ctrl_W:
+ case 'w':
+ case 'W':
+ case 'x':
+ case Ctrl_X:
+ // window number
+ eap->addr_type = ADDR_WINDOWS;
+ break;
- case Ctrl_Z:
- case 'z':
- case 'P':
- case 't':
- case Ctrl_T:
- case 'b':
- case Ctrl_B:
- case 'p':
- case Ctrl_P:
- case '=':
- case CAR:
- // no count
- eap->addr_type = ADDR_NONE;
- break;
+ case Ctrl_Z:
+ case 'z':
+ case 'P':
+ case 't':
+ case Ctrl_T:
+ case 'b':
+ case Ctrl_B:
+ case 'p':
+ case Ctrl_P:
+ case '=':
+ case CAR:
+ // no count
+ eap->addr_type = ADDR_NONE;
+ break;
}
}
@@ -1217,29 +1231,25 @@ static char_u *skip_colon_white(const char_u *p, bool skipleadingwhite)
return (char_u *)p;
}
-/*
- * Execute one Ex command.
- *
- * If 'sourcing' is TRUE, the command will be included in the error message.
- *
- * 1. skip comment lines and leading space
- * 2. handle command modifiers
- * 3. skip over the range to find the command
- * 4. parse the range
- * 5. parse the command
- * 6. parse arguments
- * 7. switch on command name
- *
- * Note: "fgetline" can be NULL.
- *
- * This function may be called recursively!
- */
-static char_u * do_one_cmd(char_u **cmdlinep,
- int flags,
- cstack_T *cstack,
- LineGetter fgetline,
- void *cookie /* argument for fgetline() */
- )
+/// Execute one Ex command.
+///
+/// If 'sourcing' is TRUE, the command will be included in the error message.
+///
+/// 1. skip comment lines and leading space
+/// 2. handle command modifiers
+/// 3. skip over the range to find the command
+/// 4. parse the range
+/// 5. parse the command
+/// 6. parse arguments
+/// 7. switch on command name
+///
+/// Note: "fgetline" can be NULL.
+///
+/// This function may be called recursively!
+///
+/// @param cookie argument for fgetline()
+static char_u * do_one_cmd(char_u **cmdlinep, int flags, cstack_T *cstack, LineGetter fgetline,
+ void *cookie)
{
char_u *p;
linenr_T lnum;
@@ -1257,14 +1267,15 @@ static char_u * do_one_cmd(char_u **cmdlinep,
ea.line2 = 1;
ex_nesting_level++;
- /* When the last file has not been edited :q has to be typed twice. */
+ // When the last file has not been edited :q has to be typed twice.
if (quitmore
- /* avoid that a function call in 'statusline' does this */
+ // avoid that a function call in 'statusline' does this
&& !getline_equal(fgetline, cookie, get_func_line)
- /* avoid that an autocommand, e.g. QuitPre, does this */
- && !getline_equal(fgetline, cookie, getnextac)
- )
+ // avoid that an autocommand, e.g. QuitPre, does this
+ && !getline_equal(fgetline, cookie,
+ getnextac)) {
--quitmore;
+ }
/*
* Reset browse, confirm, etc.. They are restored when returning, for
@@ -1421,13 +1432,14 @@ static char_u * do_one_cmd(char_u **cmdlinep,
ea.line2 = curbuf->b_ml.ml_line_count;
}
- if (ea.line2 < 0)
+ if (ea.line2 < 0) {
errormsg = (char_u *)_(e_invrange);
- else {
- if (ea.line2 == 0)
+ } else {
+ if (ea.line2 == 0) {
curwin->w_cursor.lnum = 1;
- else
+ } else {
curwin->w_cursor.lnum = ea.line2;
+ }
beginline(BL_SOL | BL_FIX);
}
}
@@ -1452,8 +1464,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
}
if (p == NULL) {
- if (!ea.skip)
+ if (!ea.skip) {
errormsg = (char_u *)_("E464: Ambiguous use of user-defined command");
+ }
goto doend;
}
// Check for wrong commands.
@@ -1475,8 +1488,8 @@ static char_u * do_one_cmd(char_u **cmdlinep,
// set when Not Implemented
const int ni = !IS_USER_CMDIDX(ea.cmdidx)
- && (cmdnames[ea.cmdidx].cmd_func == ex_ni
- || cmdnames[ea.cmdidx].cmd_func == ex_script_ni);
+ && (cmdnames[ea.cmdidx].cmd_func == ex_ni
+ || cmdnames[ea.cmdidx].cmd_func == ex_script_ni);
// Forced commands.
@@ -1502,7 +1515,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
if (!MODIFIABLE(curbuf) && (ea.argt & EX_MODIFY)
// allow :put in terminals
&& (!curbuf->terminal || ea.cmdidx != CMD_put)) {
- /* Command not allowed in non-'modifiable' buffer */
+ // Command not allowed in non-'modifiable' buffer
errormsg = (char_u *)_(e_modifiable);
goto doend;
}
@@ -1561,8 +1574,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
ea.line1 = ea.line2;
ea.line2 = lnum;
}
- if ((errormsg = invalid_range(&ea)) != NULL)
+ if ((errormsg = invalid_range(&ea)) != NULL) {
goto doend;
+ }
}
if ((ea.addr_type == ADDR_OTHER) && ea.addr_count == 0) {
@@ -1585,17 +1599,19 @@ static char_u * do_one_cmd(char_u **cmdlinep,
* option here, so things like % get expanded.
*/
p = replace_makeprg(&ea, p, cmdlinep);
- if (p == NULL)
+ if (p == NULL) {
goto doend;
+ }
/*
* Skip to start of argument.
* Don't do this for the ":!" command, because ":!! -l" needs the space.
*/
- if (ea.cmdidx == CMD_bang)
+ if (ea.cmdidx == CMD_bang) {
ea.arg = p;
- else
+ } else {
ea.arg = skipwhite(p);
+ }
// ":file" cannot be run with an argument when "curbuf->b_ro_locked" is set
if (ea.cmdidx == CMD_file && *ea.arg != NUL && curbuf_locked()) {
@@ -1616,14 +1632,14 @@ static char_u * do_one_cmd(char_u **cmdlinep,
}
if (ea.cmdidx == CMD_write || ea.cmdidx == CMD_update) {
- if (*ea.arg == '>') { /* append */
- if (*++ea.arg != '>') { /* typed wrong */
+ if (*ea.arg == '>') { // append
+ if (*++ea.arg != '>') { // typed wrong
errormsg = (char_u *)_("E494: Use w or w>>");
goto doend;
}
ea.arg = skipwhite(ea.arg + 1);
ea.append = TRUE;
- } else if (*ea.arg == '!' && ea.cmdidx == CMD_write) { /* :w !filter */
+ } else if (*ea.arg == '!' && ea.cmdidx == CMD_write) { // :w !filter
++ea.arg;
ea.usefilter = TRUE;
}
@@ -1631,9 +1647,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
if (ea.cmdidx == CMD_read) {
if (ea.forceit) {
- ea.usefilter = TRUE; /* :r! filter if ea.forceit */
+ ea.usefilter = TRUE; // :r! filter if ea.forceit
ea.forceit = FALSE;
- } else if (*ea.arg == '!') { /* :r !filter */
+ } else if (*ea.arg == '!') { // :r !filter
++ea.arg;
ea.usefilter = TRUE;
}
@@ -1641,7 +1657,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
if (ea.cmdidx == CMD_lshift || ea.cmdidx == CMD_rshift) {
ea.amount = 1;
- while (*ea.arg == *ea.cmd) { /* count number of '>' or '<' */
+ while (*ea.arg == *ea.cmd) { // count number of '>' or '<'
++ea.arg;
++ea.amount;
}
@@ -1692,67 +1708,67 @@ static char_u * do_one_cmd(char_u **cmdlinep,
ea.line1 = 1;
switch (ea.addr_type) {
- case ADDR_LINES:
- case ADDR_OTHER:
- ea.line2 = curbuf->b_ml.ml_line_count;
- break;
- case ADDR_LOADED_BUFFERS:
- buf = firstbuf;
- while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL) {
- buf = buf->b_next;
- }
- ea.line1 = buf->b_fnum;
- buf = lastbuf;
- while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL) {
- buf = buf->b_prev;
- }
- ea.line2 = buf->b_fnum;
- break;
- case ADDR_BUFFERS:
- ea.line1 = firstbuf->b_fnum;
- ea.line2 = lastbuf->b_fnum;
- break;
- case ADDR_WINDOWS:
- ea.line2 = LAST_WIN_NR;
- break;
- case ADDR_TABS:
- ea.line2 = LAST_TAB_NR;
- break;
- case ADDR_TABS_RELATIVE:
+ case ADDR_LINES:
+ case ADDR_OTHER:
+ ea.line2 = curbuf->b_ml.ml_line_count;
+ break;
+ case ADDR_LOADED_BUFFERS:
+ buf = firstbuf;
+ while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL) {
+ buf = buf->b_next;
+ }
+ ea.line1 = buf->b_fnum;
+ buf = lastbuf;
+ while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL) {
+ buf = buf->b_prev;
+ }
+ ea.line2 = buf->b_fnum;
+ break;
+ case ADDR_BUFFERS:
+ ea.line1 = firstbuf->b_fnum;
+ ea.line2 = lastbuf->b_fnum;
+ break;
+ case ADDR_WINDOWS:
+ ea.line2 = LAST_WIN_NR;
+ break;
+ case ADDR_TABS:
+ ea.line2 = LAST_TAB_NR;
+ break;
+ case ADDR_TABS_RELATIVE:
+ ea.line2 = 1;
+ break;
+ case ADDR_ARGUMENTS:
+ if (ARGCOUNT == 0) {
+ ea.line1 = ea.line2 = 0;
+ } else {
+ ea.line2 = ARGCOUNT;
+ }
+ break;
+ case ADDR_QUICKFIX_VALID:
+ ea.line2 = qf_get_valid_size(&ea);
+ if (ea.line2 == 0) {
ea.line2 = 1;
- break;
- case ADDR_ARGUMENTS:
- if (ARGCOUNT == 0) {
- ea.line1 = ea.line2 = 0;
- } else {
- ea.line2 = ARGCOUNT;
- }
- break;
- case ADDR_QUICKFIX_VALID:
- ea.line2 = qf_get_valid_size(&ea);
- if (ea.line2 == 0) {
- ea.line2 = 1;
- }
- break;
- case ADDR_NONE:
- case ADDR_UNSIGNED:
- case ADDR_QUICKFIX:
- IEMSG(_("INTERNAL: Cannot use EX_DFLALL "
- "with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX"));
- break;
+ }
+ break;
+ case ADDR_NONE:
+ case ADDR_UNSIGNED:
+ case ADDR_QUICKFIX:
+ IEMSG(_("INTERNAL: Cannot use EX_DFLALL "
+ "with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX"));
+ break;
}
}
// accept numbered register only when no count allowed (:put)
if ((ea.argt & EX_REGSTR)
&& *ea.arg != NUL
- /* Do not allow register = for user commands */
+ // Do not allow register = for user commands
&& (!IS_USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
&& !((ea.argt & EX_COUNT) && ascii_isdigit(*ea.arg))) {
if (valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
&& !IS_USER_CMDIDX(ea.cmdidx)))) {
ea.regname = *ea.arg++;
- /* for '=' register: accept the rest of the line as an expression */
+ // for '=' register: accept the rest of the line as an expression
if (ea.arg[-1] == '=' && ea.arg[0] != NUL) {
set_expr_line(vim_strsave(ea.arg));
ea.arg += STRLEN(ea.arg);
@@ -1776,8 +1792,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
}
if (ea.addr_type != ADDR_LINES) { // e.g. :buffer 2, :sleep 3
ea.line2 = n;
- if (ea.addr_count == 0)
+ if (ea.addr_count == 0) {
ea.addr_count = 1;
+ }
} else {
ea.line1 = ea.line2;
ea.line2 += n - 1;
@@ -1815,7 +1832,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
*/
if (ea.skip) {
switch (ea.cmdidx) {
- /* commands that need evaluation */
+ // commands that need evaluation
case CMD_while:
case CMD_endwhile:
case CMD_for:
@@ -1916,20 +1933,20 @@ static char_u * do_one_cmd(char_u **cmdlinep,
* number. Don't do this for a user command.
*/
if ((ea.argt & EX_BUFNAME) && *ea.arg != NUL && ea.addr_count == 0
- && !IS_USER_CMDIDX(ea.cmdidx)
- ) {
+ && !IS_USER_CMDIDX(ea.cmdidx)) {
/*
* :bdelete, :bwipeout and :bunload take several arguments, separated
* by spaces: find next space (skipping over escaped characters).
* The others take one argument: ignore trailing spaces.
*/
if (ea.cmdidx == CMD_bdelete || ea.cmdidx == CMD_bwipeout
- || ea.cmdidx == CMD_bunload)
+ || ea.cmdidx == CMD_bunload) {
p = skiptowhite_esc(ea.arg);
- else {
+ } else {
p = ea.arg + STRLEN(ea.arg);
- while (p > ea.arg && ascii_iswhite(p[-1]))
+ while (p > ea.arg && ascii_iswhite(p[-1])) {
--p;
+ }
}
ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & EX_BUFUNL) != 0,
false, false);
@@ -1962,8 +1979,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
*/
ea.errmsg = NULL;
(cmdnames[ea.cmdidx].cmd_func)(&ea);
- if (ea.errmsg != NULL)
+ if (ea.errmsg != NULL) {
errormsg = (char_u *)_(ea.errmsg);
+ }
}
/*
@@ -1973,14 +1991,15 @@ static char_u * do_one_cmd(char_u **cmdlinep,
* exception, or reanimate a returned function or finished script file and
* return or finish it again.
*/
- if (need_rethrow)
+ if (need_rethrow) {
do_throw(cstack);
- else if (check_cstack) {
- if (source_finished(fgetline, cookie))
+ } else if (check_cstack) {
+ if (source_finished(fgetline, cookie)) {
do_finish(&ea, TRUE);
- else if (getline_equal(fgetline, cookie, get_func_line)
- && current_func_returned())
+ } else if (getline_equal(fgetline, cookie, get_func_line)
+ && current_func_returned()) {
do_return(&ea, TRUE, FALSE, NULL);
+ }
}
need_rethrow = check_cstack = FALSE;
@@ -2002,7 +2021,7 @@ doend:
emsg(errormsg);
}
do_errthrow(cstack,
- (ea.cmdidx != CMD_SIZE && !IS_USER_CMDIDX(ea.cmdidx))
+ (ea.cmdidx != CMD_SIZE && !IS_USER_CMDIDX(ea.cmdidx))
? cmdnames[(int)ea.cmdidx].cmd_name
: (char_u *)NULL);
@@ -2014,8 +2033,9 @@ doend:
sandbox--;
}
- if (ea.nextcmd && *ea.nextcmd == NUL) /* not really a next command */
+ if (ea.nextcmd && *ea.nextcmd == NUL) { // not really a next command
ea.nextcmd = NULL;
+ }
--ex_nesting_level;
@@ -2074,12 +2094,15 @@ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, bool skip_only)
p = skip_range(eap->cmd, NULL);
switch (*p) {
// When adding an entry, also modify cmd_exists().
- case 'a': if (!checkforcmd(&eap->cmd, "aboveleft", 3))
+ case 'a':
+ if (!checkforcmd(&eap->cmd, "aboveleft", 3)) {
break;
+ }
cmdmod.split |= WSP_ABOVE;
continue;
- case 'b': if (checkforcmd(&eap->cmd, "belowright", 3)) {
+ case 'b':
+ if (checkforcmd(&eap->cmd, "belowright", 3)) {
cmdmod.split |= WSP_BELOW;
continue;
}
@@ -2093,15 +2116,18 @@ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, bool skip_only)
cmdmod.split |= WSP_BOT;
continue;
- case 'c': if (!checkforcmd(&eap->cmd, "confirm", 4))
+ case 'c':
+ if (!checkforcmd(&eap->cmd, "confirm", 4)) {
break;
+ }
cmdmod.confirm = true;
continue;
- case 'k': if (checkforcmd(&eap->cmd, "keepmarks", 3)) {
+ case 'k':
+ if (checkforcmd(&eap->cmd, "keepmarks", 3)) {
cmdmod.keepmarks = true;
continue;
- }
+ }
if (checkforcmd(&eap->cmd, "keepalt", 5)) {
cmdmod.keepalt = true;
continue;
@@ -2117,49 +2143,52 @@ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, bool skip_only)
continue;
case 'f': { // only accept ":filter {pat} cmd"
- char_u *reg_pat;
+ char_u *reg_pat;
- if (!checkforcmd(&p, "filter", 4) || *p == NUL || ends_excmd(*p)) {
- break;
- }
- if (*p == '!') {
- cmdmod.filter_force = true;
- p = skipwhite(p + 1);
- if (*p == NUL || ends_excmd(*p)) {
+ if (!checkforcmd(&p, "filter", 4) || *p == NUL || ends_excmd(*p)) {
break;
}
- }
- if (skip_only) {
- p = skip_vimgrep_pat(p, NULL, NULL);
- } else {
- // NOTE: This puts a NUL after the pattern.
- p = skip_vimgrep_pat(p, &reg_pat, NULL);
- }
- if (p == NULL || *p == NUL) {
- break;
- }
- if (!skip_only) {
- cmdmod.filter_regmatch.regprog = vim_regcomp(reg_pat, RE_MAGIC);
- if (cmdmod.filter_regmatch.regprog == NULL) {
+ if (*p == '!') {
+ cmdmod.filter_force = true;
+ p = skipwhite(p + 1);
+ if (*p == NUL || ends_excmd(*p)) {
+ break;
+ }
+ }
+ if (skip_only) {
+ p = skip_vimgrep_pat(p, NULL, NULL);
+ } else {
+ // NOTE: This puts a NUL after the pattern.
+ p = skip_vimgrep_pat(p, &reg_pat, NULL);
+ }
+ if (p == NULL || *p == NUL) {
break;
}
+ if (!skip_only) {
+ cmdmod.filter_regmatch.regprog = vim_regcomp(reg_pat, RE_MAGIC);
+ if (cmdmod.filter_regmatch.regprog == NULL) {
+ break;
+ }
+ }
+ eap->cmd = p;
+ continue;
}
- eap->cmd = p;
- continue;
- }
// ":hide" and ":hide | cmd" are not modifiers
- case 'h': if (p != eap->cmd || !checkforcmd(&p, "hide", 3)
- || *p == NUL || ends_excmd(*p))
+ case 'h':
+ if (p != eap->cmd || !checkforcmd(&p, "hide", 3)
+ || *p == NUL || ends_excmd(*p)) {
break;
+ }
eap->cmd = p;
cmdmod.hide = true;
continue;
- case 'l': if (checkforcmd(&eap->cmd, "lockmarks", 3)) {
+ case 'l':
+ if (checkforcmd(&eap->cmd, "lockmarks", 3)) {
cmdmod.lockmarks = true;
continue;
- }
+ }
if (!checkforcmd(&eap->cmd, "leftabove", 5)) {
break;
@@ -2184,12 +2213,15 @@ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, bool skip_only)
cmdmod.noswapfile = true;
continue;
- case 'r': if (!checkforcmd(&eap->cmd, "rightbelow", 6))
+ case 'r':
+ if (!checkforcmd(&eap->cmd, "rightbelow", 6)) {
break;
+ }
cmdmod.split |= WSP_BELOW;
continue;
- case 's': if (checkforcmd(&eap->cmd, "sandbox", 3)) {
+ case 's':
+ if (checkforcmd(&eap->cmd, "sandbox", 3)) {
if (!skip_only) {
if (!eap->did_sandbox) {
sandbox++;
@@ -2197,7 +2229,7 @@ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, bool skip_only)
eap->did_sandbox = true;
}
continue;
- }
+ }
if (!checkforcmd(&eap->cmd, "silent", 3)) {
break;
}
@@ -2217,32 +2249,34 @@ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, bool skip_only)
}
continue;
- case 't': if (checkforcmd(&p, "tab", 3)) {
- if (!skip_only) {
- long tabnr = get_address(
- eap, &eap->cmd, ADDR_TABS, eap->skip, skip_only, false, 1);
+ case 't':
+ if (checkforcmd(&p, "tab", 3)) {
+ if (!skip_only) {
+ long tabnr = get_address(eap, &eap->cmd, ADDR_TABS, eap->skip, skip_only, false, 1);
- if (tabnr == MAXLNUM) {
- cmdmod.tab = tabpage_index(curtab) + 1;
- } else {
- if (tabnr < 0 || tabnr > LAST_TAB_NR) {
- *errormsg = (char_u *)_(e_invrange);
- return false;
+ if (tabnr == MAXLNUM) {
+ cmdmod.tab = tabpage_index(curtab) + 1;
+ } else {
+ if (tabnr < 0 || tabnr > LAST_TAB_NR) {
+ *errormsg = (char_u *)_(e_invrange);
+ return false;
+ }
+ cmdmod.tab = tabnr + 1;
}
- cmdmod.tab = tabnr + 1;
}
+ eap->cmd = p;
+ continue;
}
- eap->cmd = p;
- continue;
- }
if (!checkforcmd(&eap->cmd, "topleft", 2)) {
break;
}
cmdmod.split |= WSP_TOP;
continue;
- case 'u': if (!checkforcmd(&eap->cmd, "unsilent", 3))
+ case 'u':
+ if (!checkforcmd(&eap->cmd, "unsilent", 3)) {
break;
+ }
if (!skip_only) {
if (eap->save_msg_silent == -1) {
eap->save_msg_silent = msg_silent;
@@ -2251,12 +2285,14 @@ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, bool skip_only)
}
continue;
- case 'v': if (checkforcmd(&eap->cmd, "vertical", 4)) {
+ case 'v':
+ if (checkforcmd(&eap->cmd, "vertical", 4)) {
cmdmod.split |= WSP_VERT;
continue;
- }
- if (!checkforcmd(&p, "verbose", 4))
+ }
+ if (!checkforcmd(&p, "verbose", 4)) {
break;
+ }
if (!skip_only) {
if (eap->verbose_save < 0) {
eap->verbose_save = p_verbose;
@@ -2328,40 +2364,40 @@ int parse_cmd_address(exarg_T *eap, char_u **errormsg, bool silent)
for (;;) {
eap->line1 = eap->line2;
switch (eap->addr_type) {
- case ADDR_LINES:
- case ADDR_OTHER:
- // default is current line number
- eap->line2 = curwin->w_cursor.lnum;
- break;
- case ADDR_WINDOWS:
- eap->line2 = CURRENT_WIN_NR;
- break;
- case ADDR_ARGUMENTS:
- eap->line2 = curwin->w_arg_idx + 1;
- if (eap->line2 > ARGCOUNT) {
- eap->line2 = ARGCOUNT;
- }
- break;
- case ADDR_LOADED_BUFFERS:
- case ADDR_BUFFERS:
- eap->line2 = curbuf->b_fnum;
- break;
- case ADDR_TABS:
- eap->line2 = CURRENT_TAB_NR;
- break;
- case ADDR_TABS_RELATIVE:
- case ADDR_UNSIGNED:
- eap->line2 = 1;
- break;
- case ADDR_QUICKFIX:
- eap->line2 = qf_get_cur_idx(eap);
- break;
- case ADDR_QUICKFIX_VALID:
- eap->line2 = qf_get_cur_valid_idx(eap);
- break;
- case ADDR_NONE:
- // Will give an error later if a range is found.
- break;
+ case ADDR_LINES:
+ case ADDR_OTHER:
+ // default is current line number
+ eap->line2 = curwin->w_cursor.lnum;
+ break;
+ case ADDR_WINDOWS:
+ eap->line2 = CURRENT_WIN_NR;
+ break;
+ case ADDR_ARGUMENTS:
+ eap->line2 = curwin->w_arg_idx + 1;
+ if (eap->line2 > ARGCOUNT) {
+ eap->line2 = ARGCOUNT;
+ }
+ break;
+ case ADDR_LOADED_BUFFERS:
+ case ADDR_BUFFERS:
+ eap->line2 = curbuf->b_fnum;
+ break;
+ case ADDR_TABS:
+ eap->line2 = CURRENT_TAB_NR;
+ break;
+ case ADDR_TABS_RELATIVE:
+ case ADDR_UNSIGNED:
+ eap->line2 = 1;
+ break;
+ case ADDR_QUICKFIX:
+ eap->line2 = qf_get_cur_idx(eap);
+ break;
+ case ADDR_QUICKFIX_VALID:
+ eap->line2 = qf_get_cur_valid_idx(eap);
+ break;
+ case ADDR_NONE:
+ // Will give an error later if a range is found.
+ break;
}
eap->cmd = skipwhite(eap->cmd);
lnum = get_address(eap, &eap->cmd, eap->addr_type, eap->skip, silent,
@@ -2373,12 +2409,12 @@ int parse_cmd_address(exarg_T *eap, char_u **errormsg, bool silent)
if (*eap->cmd == '%') { // '%' - all lines
eap->cmd++;
switch (eap->addr_type) {
- case ADDR_LINES:
- case ADDR_OTHER:
- eap->line1 = 1;
- eap->line2 = curbuf->b_ml.ml_line_count;
- break;
- case ADDR_LOADED_BUFFERS: {
+ case ADDR_LINES:
+ case ADDR_OTHER:
+ eap->line1 = 1;
+ eap->line2 = curbuf->b_ml.ml_line_count;
+ break;
+ case ADDR_LOADED_BUFFERS: {
buf_T *buf = firstbuf;
while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL) {
@@ -2392,46 +2428,46 @@ int parse_cmd_address(exarg_T *eap, char_u **errormsg, bool silent)
eap->line2 = buf->b_fnum;
break;
}
- case ADDR_BUFFERS:
- eap->line1 = firstbuf->b_fnum;
- eap->line2 = lastbuf->b_fnum;
- break;
- case ADDR_WINDOWS:
- case ADDR_TABS:
- if (IS_USER_CMDIDX(eap->cmdidx)) {
- eap->line1 = 1;
- eap->line2 = eap->addr_type == ADDR_WINDOWS
+ case ADDR_BUFFERS:
+ eap->line1 = firstbuf->b_fnum;
+ eap->line2 = lastbuf->b_fnum;
+ break;
+ case ADDR_WINDOWS:
+ case ADDR_TABS:
+ if (IS_USER_CMDIDX(eap->cmdidx)) {
+ eap->line1 = 1;
+ eap->line2 = eap->addr_type == ADDR_WINDOWS
? LAST_WIN_NR : LAST_TAB_NR;
- } else {
- // there is no Vim command which uses '%' and
- // ADDR_WINDOWS or ADDR_TABS
- *errormsg = (char_u *)_(e_invrange);
- return FAIL;
- }
- break;
- case ADDR_TABS_RELATIVE:
- case ADDR_UNSIGNED:
- case ADDR_QUICKFIX:
+ } else {
+ // there is no Vim command which uses '%' and
+ // ADDR_WINDOWS or ADDR_TABS
*errormsg = (char_u *)_(e_invrange);
return FAIL;
- case ADDR_ARGUMENTS:
- if (ARGCOUNT == 0) {
- eap->line1 = eap->line2 = 0;
- } else {
- eap->line1 = 1;
- eap->line2 = ARGCOUNT;
- }
- break;
- case ADDR_QUICKFIX_VALID:
+ }
+ break;
+ case ADDR_TABS_RELATIVE:
+ case ADDR_UNSIGNED:
+ case ADDR_QUICKFIX:
+ *errormsg = (char_u *)_(e_invrange);
+ return FAIL;
+ case ADDR_ARGUMENTS:
+ if (ARGCOUNT == 0) {
+ eap->line1 = eap->line2 = 0;
+ } else {
eap->line1 = 1;
- eap->line2 = qf_get_valid_size(eap);
- if (eap->line2 == 0) {
- eap->line2 = 1;
- }
- break;
- case ADDR_NONE:
- // Will give an error later if a range is found.
- break;
+ eap->line2 = ARGCOUNT;
+ }
+ break;
+ case ADDR_QUICKFIX_VALID:
+ eap->line1 = 1;
+ eap->line2 = qf_get_valid_size(eap);
+ if (eap->line2 == 0) {
+ eap->line2 = 1;
+ }
+ break;
+ case ADDR_NONE:
+ // Will give an error later if a range is found.
+ break;
}
eap->addr_count++;
} else if (*eap->cmd == '*') {
@@ -2487,22 +2523,21 @@ int parse_cmd_address(exarg_T *eap, char_u **errormsg, bool silent)
return OK;
}
-/*
- * Check for an Ex command with optional tail.
- * If there is a match advance "pp" to the argument and return TRUE.
- */
-int
-checkforcmd(
- char_u **pp, // start of command
- char *cmd, // name of command
- int len // required length
-)
+/// Check for an Ex command with optional tail.
+/// If there is a match advance "pp" to the argument and return TRUE.
+///
+/// @param pp start of command
+/// @param cmd name of command
+/// @param len required length
+int checkforcmd(char_u **pp, char *cmd, int len)
{
int i;
- for (i = 0; cmd[i] != NUL; ++i)
- if (((char_u *)cmd)[i] != (*pp)[i])
+ for (i = 0; cmd[i] != NUL; ++i) {
+ if (((char_u *)cmd)[i] != (*pp)[i]) {
break;
+ }
+ }
if (i >= len && !isalpha((*pp)[i])) {
*pp = skipwhite(*pp + i);
return TRUE;
@@ -2527,8 +2562,9 @@ static void append_command(char_u *cmd)
s += 2;
STRCPY(d, "<a0>");
d += 4;
- } else
+ } else {
MB_COPY_CHAR(s, d);
+ }
}
*d = NUL;
}
@@ -2550,8 +2586,8 @@ static char_u *find_command(exarg_T *eap, int *full)
* Exceptions:
* - the 'k' command can directly be followed by any character.
* - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
- * but :sre[wind] is another command, as are :scr[iptnames],
- * :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
+ * but :sre[wind] is another command, as are :scr[iptnames],
+ * :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
* - the "d" command can directly be followed by 'l' or 'p' flag.
*/
p = eap->cmd;
@@ -2571,29 +2607,36 @@ static char_u *find_command(exarg_T *eap, int *full)
eap->cmdidx = CMD_substitute;
++p;
} else {
- while (ASCII_ISALPHA(*p))
+ while (ASCII_ISALPHA(*p)) {
++p;
- /* for python 3.x support ":py3", ":python3", ":py3file", etc. */
- if (eap->cmd[0] == 'p' && eap->cmd[1] == 'y')
- while (ASCII_ISALNUM(*p))
+ }
+ // for python 3.x support ":py3", ":python3", ":py3file", etc.
+ if (eap->cmd[0] == 'p' && eap->cmd[1] == 'y') {
+ while (ASCII_ISALNUM(*p)) {
++p;
+ }
+ }
- /* check for non-alpha command */
- if (p == eap->cmd && vim_strchr((char_u *)"@!=><&~#", *p) != NULL)
+ // check for non-alpha command
+ if (p == eap->cmd && vim_strchr((char_u *)"@!=><&~#", *p) != NULL) {
++p;
+ }
len = (int)(p - eap->cmd);
if (*eap->cmd == 'd' && (p[-1] == 'l' || p[-1] == 'p')) {
/* Check for ":dl", ":dell", etc. to ":deletel": that's
* :delete with the 'l' flag. Same for 'p'. */
- for (i = 0; i < len; ++i)
- if (eap->cmd[i] != ((char_u *)"delete")[i])
+ for (i = 0; i < len; ++i) {
+ if (eap->cmd[i] != ((char_u *)"delete")[i]) {
break;
+ }
+ }
if (i == len - 1) {
--len;
- if (p[-1] == 'l')
+ if (p[-1] == 'l') {
eap->flags |= EXFLAG_LIST;
- else
+ } else {
eap->flags |= EXFLAG_PRINT;
+ }
}
}
@@ -2617,51 +2660,51 @@ static char_u *find_command(exarg_T *eap, int *full)
}
for (; (int)eap->cmdidx < (int)CMD_SIZE;
- eap->cmdidx = (cmdidx_T)((int)eap->cmdidx + 1))
+ eap->cmdidx = (cmdidx_T)((int)eap->cmdidx + 1)) {
if (STRNCMP(cmdnames[(int)eap->cmdidx].cmd_name, (char *)eap->cmd,
- (size_t)len) == 0) {
+ (size_t)len) == 0) {
if (full != NULL
- && cmdnames[(int)eap->cmdidx].cmd_name[len] == NUL)
+ && cmdnames[(int)eap->cmdidx].cmd_name[len] == NUL) {
*full = TRUE;
+ }
break;
}
+ }
// Look for a user defined command as a last resort.
if ((eap->cmdidx == CMD_SIZE)
&& *eap->cmd >= 'A' && *eap->cmd <= 'Z') {
- /* User defined commands may contain digits. */
- while (ASCII_ISALNUM(*p))
+ // User defined commands may contain digits.
+ while (ASCII_ISALNUM(*p)) {
++p;
+ }
p = find_ucmd(eap, p, full, NULL, NULL);
}
- if (p == eap->cmd)
+ if (p == eap->cmd) {
eap->cmdidx = CMD_SIZE;
+ }
}
return p;
}
-/*
- * Search for a user command that matches "eap->cmd".
- * Return cmdidx in "eap->cmdidx", flags in "eap->argt", idx in "eap->useridx".
- * Return a pointer to just after the command.
- * Return NULL if there is no matching command.
- */
-static char_u *
-find_ucmd (
- exarg_T *eap,
- char_u *p, // end of the command (possibly including count)
- int *full, // set to TRUE for a full match
- expand_T *xp, // used for completion, NULL otherwise
- int *complp // completion flags or NULL
-)
+/// Search for a user command that matches "eap->cmd".
+/// Return cmdidx in "eap->cmdidx", flags in "eap->argt", idx in "eap->useridx".
+/// Return a pointer to just after the command.
+/// Return NULL if there is no matching command.
+///
+/// @param *p end of the command (possibly including count)
+/// @param full set to TRUE for a full match
+/// @param xp used for completion, NULL otherwise
+/// @param complp completion flags or NULL
+static char_u *find_ucmd(exarg_T *eap, char_u *p, int *full, expand_T *xp, int *complp)
{
int len = (int)(p - eap->cmd);
int j, k, matchlen = 0;
ucmd_T *uc;
int found = FALSE;
int possible = FALSE;
- char_u *cp, *np; /* Point into typed cmd and test name */
+ char_u *cp, *np; // Point into typed cmd and test name
garray_T *gap;
int amb_local = FALSE; /* Found ambiguous buffer-local command,
only full match global is accepted. */
@@ -2676,15 +2719,17 @@ find_ucmd (
cp = eap->cmd;
np = uc->uc_name;
k = 0;
- while (k < len && *np != NUL && *cp++ == *np++)
+ while (k < len && *np != NUL && *cp++ == *np++) {
k++;
+ }
if (k == len || (*np == NUL && ascii_isdigit(eap->cmd[k]))) {
/* If finding a second match, the command is ambiguous. But
* not if a buffer-local command wasn't a full match and a
* global command is a full match. */
if (k == len && found && *np != NUL) {
- if (gap == &ucmds)
+ if (gap == &ucmds) {
return NULL;
+ }
amb_local = TRUE;
}
@@ -2693,15 +2738,17 @@ find_ucmd (
* be another command including the digit that we
* should use instead.
*/
- if (k == len)
+ if (k == len) {
found = TRUE;
- else
+ } else {
possible = TRUE;
+ }
- if (gap == &ucmds)
+ if (gap == &ucmds) {
eap->cmdidx = CMD_USER;
- else
+ } else {
eap->cmdidx = CMD_USER_BUF;
+ }
eap->argt = uc->uc_argt;
eap->useridx = j;
eap->addr_type = uc->uc_addr_type;
@@ -2718,8 +2765,9 @@ find_ucmd (
* if this is an exact match. */
matchlen = k;
if (k == len && *np == NUL) {
- if (full != NULL)
+ if (full != NULL) {
*full = TRUE;
+ }
amb_local = FALSE;
break;
}
@@ -2727,30 +2775,33 @@ find_ucmd (
}
}
- /* Stop if we found a full match or searched all. */
- if (j < gap->ga_len || gap == &ucmds)
+ // Stop if we found a full match or searched all.
+ if (j < gap->ga_len || gap == &ucmds) {
break;
+ }
gap = &ucmds;
}
- /* Only found ambiguous matches. */
+ // Only found ambiguous matches.
if (amb_local) {
- if (xp != NULL)
+ if (xp != NULL) {
xp->xp_context = EXPAND_UNSUCCESSFUL;
+ }
return NULL;
}
/* The match we found may be followed immediately by a number. Move "p"
* back to point to it. */
- if (found || possible)
+ if (found || possible) {
return p + (matchlen - len);
+ }
return p;
}
static struct cmdmod {
char *name;
int minlen;
- int has_count; /* :123verbose :3tab */
+ int has_count; // :123verbose :3tab
} cmdmods[] = {
{ "aboveleft", 3, false },
{ "belowright", 3, false },
@@ -2833,26 +2884,26 @@ int cmd_exists(const char *const name)
ea.cmdidx = (cmdidx_T)0;
int full = false;
p = find_command(&ea, &full);
- if (p == NULL)
+ if (p == NULL) {
return 3;
- if (ascii_isdigit(*name) && ea.cmdidx != CMD_match)
+ }
+ if (ascii_isdigit(*name) && ea.cmdidx != CMD_match) {
return 0;
- if (*skipwhite(p) != NUL)
- return 0; /* trailing garbage */
+ }
+ if (*skipwhite(p) != NUL) {
+ return 0; // trailing garbage
+ }
return ea.cmdidx == CMD_SIZE ? 0 : (full ? 2 : 1);
}
-/*
- * This is all pretty much copied from do_one_cmd(), with all the extra stuff
- * we don't need/want deleted. Maybe this could be done better if we didn't
- * repeat all this stuff. The only problem is that they may not stay
- * perfectly compatible with each other, but then the command line syntax
- * probably won't change that much -- webb.
- */
-const char * set_one_cmd_context(
- expand_T *xp,
- const char *buff // buffer for command string
-)
+/// This is all pretty much copied from do_one_cmd(), with all the extra stuff
+/// we don't need/want deleted. Maybe this could be done better if we didn't
+/// repeat all this stuff. The only problem is that they may not stay
+/// perfectly compatible with each other, but then the command line syntax
+/// probably won't change that much -- webb.
+///
+/// @param buff buffer for command string
+const char * set_one_cmd_context(expand_T *xp, const char *buff)
{
size_t len = 0;
exarg_T ea;
@@ -2871,9 +2922,10 @@ const char * set_one_cmd_context(
}
xp->xp_pattern = (char_u *)cmd;
- if (*cmd == NUL)
+ if (*cmd == NUL) {
return NULL;
- if (*cmd == '"') { /* ignore comment lines */
+ }
+ if (*cmd == '"') { // ignore comment lines
xp->xp_context = EXPAND_NOTHING;
return NULL;
}
@@ -2895,9 +2947,9 @@ const char * set_one_cmd_context(
return NULL;
}
- if (*cmd == '|' || *cmd == '\n')
- return cmd + 1; /* There's another command */
-
+ if (*cmd == '|' || *cmd == '\n') {
+ return cmd + 1; // There's another command
+ }
/*
* Isolate the command and search for it in the command table.
* Exceptions:
@@ -2972,12 +3024,12 @@ const char * set_one_cmd_context(
}
}
if (ea.cmdidx == CMD_SIZE) {
- /* Not still touching the command and it was an illegal one */
+ // Not still touching the command and it was an illegal one
xp->xp_context = EXPAND_UNSUCCESSFUL;
return NULL;
}
- xp->xp_context = EXPAND_NOTHING; /* Default now that we're past command */
+ xp->xp_context = EXPAND_NOTHING; // Default now that we're past command
if (*p == '!') { // forced commands
forceit = true;
@@ -3050,9 +3102,10 @@ const char * set_one_cmd_context(
*/
if ((ea.argt & EX_TRLBAR) && !usefilter) {
p = arg;
- /* ":redir @" is not the start of a comment */
- if (ea.cmdidx == CMD_redir && p[0] == '@' && p[1] == '"')
+ // ":redir @" is not the start of a comment
+ if (ea.cmdidx == CMD_redir && p[0] == '@' && p[1] == '"') {
p += 2;
+ }
while (*p) {
if (*p == Ctrl_V) {
if (p[1] != NUL) {
@@ -3062,9 +3115,10 @@ const char * set_one_cmd_context(
|| *p == '|'
|| *p == '\n') {
if (*(p - 1) != '\\') {
- if (*p == '|' || *p == '\n')
+ if (*p == '|' || *p == '\n') {
return p + 1;
- return NULL; /* It's a comment */
+ }
+ return NULL; // It's a comment
}
}
MB_PTR_ADV(p);
@@ -3076,7 +3130,7 @@ const char * set_one_cmd_context(
return NULL;
}
- /* Find start of last argument (argument just before cursor): */
+ // Find start of last argument (argument just before cursor):
p = buff;
xp->xp_pattern = (char_u *)p;
len = strlen(buff);
@@ -3117,10 +3171,10 @@ const char * set_one_cmd_context(
/* An argument can contain just about everything, except
* characters that end the command and white space. */
else if (c == '|'
- || c == '\n'
- || c == '"'
- || ascii_iswhite(c)) {
- len = 0; /* avoid getting stuck when space is in 'isfname' */
+ || c == '\n'
+ || c == '"'
+ || ascii_iswhite(c)) {
+ len = 0; // avoid getting stuck when space is in 'isfname'
while (*p != NUL) {
c = utf_ptr2char((const char_u *)p);
if (c == '`' || vim_isfilec_or_wc(c)) {
@@ -3148,7 +3202,7 @@ const char * set_one_cmd_context(
}
xp->xp_context = EXPAND_FILES;
- /* For a shell command more chars need to be escaped. */
+ // For a shell command more chars need to be escaped.
if (usefilter || ea.cmdidx == CMD_bang || ea.cmdidx == CMD_terminal) {
#ifndef BACKSLASH_IN_FILENAME
xp->xp_shell = TRUE;
@@ -3175,7 +3229,7 @@ const char * set_one_cmd_context(
}
}
}
- /* Check for user names */
+ // Check for user names
if (*xp->xp_pattern == '~') {
for (p = (const char *)xp->xp_pattern + 1; *p != NUL && *p != '/'; p++) {
}
@@ -3197,8 +3251,9 @@ const char * set_one_cmd_context(
case CMD_find:
case CMD_sfind:
case CMD_tabfind:
- if (xp->xp_context == EXPAND_FILES)
+ if (xp->xp_context == EXPAND_FILES) {
xp->xp_context = EXPAND_FILES_IN_PATH;
+ }
break;
case CMD_cd:
case CMD_chdir:
@@ -3263,7 +3318,7 @@ const char * set_one_cmd_context(
case CMD_match:
if (*arg == NUL || !ends_excmd(*arg)) {
- /* also complete "None" */
+ // also complete "None"
set_context_in_echohl_cmd(xp, arg);
arg = (const char *)skipwhite(skiptowhite((const char_u *)arg));
if (*arg != NUL) {
@@ -3279,7 +3334,7 @@ const char * set_one_cmd_context(
*/
case CMD_command:
- /* Check for attributes */
+ // Check for attributes
while (*arg == '-') {
arg++; // Skip "-".
p = (const char *)skiptowhite((const char_u *)arg);
@@ -3331,47 +3386,48 @@ const char * set_one_cmd_context(
case CMD_global:
case CMD_vglobal: {
- const int delim = (uint8_t)(*arg); // Get the delimiter.
- if (delim) {
- arg++; // Skip delimiter if there is one.
- }
+ const int delim = (uint8_t)(*arg); // Get the delimiter.
+ if (delim) {
+ arg++; // Skip delimiter if there is one.
+ }
- while (arg[0] != NUL && (uint8_t)arg[0] != delim) {
- if (arg[0] == '\\' && arg[1] != NUL) {
+ while (arg[0] != NUL && (uint8_t)arg[0] != delim) {
+ if (arg[0] == '\\' && arg[1] != NUL) {
+ arg++;
+ }
arg++;
}
- arg++;
+ if (arg[0] != NUL) {
+ return arg + 1;
+ }
+ break;
}
- if (arg[0] != NUL)
- return arg + 1;
- break;
- }
case CMD_and:
case CMD_substitute: {
- const int delim = (uint8_t)(*arg);
- if (delim) {
- // Skip "from" part.
- arg++;
- arg = (const char *)skip_regexp((char_u *)arg, delim, p_magic, NULL);
- }
- // Skip "to" part.
- while (arg[0] != NUL && (uint8_t)arg[0] != delim) {
- if (arg[0] == '\\' && arg[1] != NUL) {
+ const int delim = (uint8_t)(*arg);
+ if (delim) {
+ // Skip "from" part.
arg++;
+ arg = (const char *)skip_regexp((char_u *)arg, delim, p_magic, NULL);
}
- arg++;
- }
- if (arg[0] != NUL) { // Skip delimiter.
- arg++;
- }
- while (arg[0] && strchr("|\"#", arg[0]) == NULL) {
- arg++;
- }
- if (arg[0] != NUL) {
- return arg;
+ // Skip "to" part.
+ while (arg[0] != NUL && (uint8_t)arg[0] != delim) {
+ if (arg[0] == '\\' && arg[1] != NUL) {
+ arg++;
+ }
+ arg++;
+ }
+ if (arg[0] != NUL) { // Skip delimiter.
+ arg++;
+ }
+ while (arg[0] && strchr("|\"#", arg[0]) == NULL) {
+ arg++;
+ }
+ if (arg[0] != NUL) {
+ return arg;
+ }
+ break;
}
- break;
- }
case CMD_isearch:
case CMD_dsearch:
case CMD_ilist:
@@ -3528,9 +3584,9 @@ const char * set_one_cmd_context(
} else if (context == EXPAND_COMMANDS) {
return arg;
} else if (context == EXPAND_MAPPINGS) {
- return (const char *)set_context_in_map_cmd(
- xp, (char_u *)"map", (char_u *)arg, forceit, false, false,
- CMD_map);
+ return (const char *)set_context_in_map_cmd(xp, (char_u *)"map", (char_u *)arg, forceit,
+ false, false,
+ CMD_map);
}
// Find start of last argument.
p = arg;
@@ -3548,17 +3604,26 @@ const char * set_one_cmd_context(
xp->xp_context = context;
}
break;
- case CMD_map: case CMD_noremap:
- case CMD_nmap: case CMD_nnoremap:
- case CMD_vmap: case CMD_vnoremap:
- case CMD_omap: case CMD_onoremap:
- case CMD_imap: case CMD_inoremap:
- case CMD_cmap: case CMD_cnoremap:
- case CMD_lmap: case CMD_lnoremap:
- case CMD_smap: case CMD_snoremap:
- case CMD_xmap: case CMD_xnoremap:
- return (const char *)set_context_in_map_cmd(
- xp, (char_u *)cmd, (char_u *)arg, forceit, false, false, ea.cmdidx);
+ case CMD_map:
+ case CMD_noremap:
+ case CMD_nmap:
+ case CMD_nnoremap:
+ case CMD_vmap:
+ case CMD_vnoremap:
+ case CMD_omap:
+ case CMD_onoremap:
+ case CMD_imap:
+ case CMD_inoremap:
+ case CMD_cmap:
+ case CMD_cnoremap:
+ case CMD_lmap:
+ case CMD_lnoremap:
+ case CMD_smap:
+ case CMD_snoremap:
+ case CMD_xmap:
+ case CMD_xnoremap:
+ return (const char *)set_context_in_map_cmd(xp, (char_u *)cmd, (char_u *)arg, forceit, false,
+ false, ea.cmdidx);
case CMD_unmap:
case CMD_nunmap:
case CMD_vunmap:
@@ -3568,8 +3633,8 @@ const char * set_one_cmd_context(
case CMD_lunmap:
case CMD_sunmap:
case CMD_xunmap:
- return (const char *)set_context_in_map_cmd(
- xp, (char_u *)cmd, (char_u *)arg, forceit, false, true, ea.cmdidx);
+ return (const char *)set_context_in_map_cmd(xp, (char_u *)cmd, (char_u *)arg, forceit, false,
+ true, ea.cmdidx);
case CMD_mapclear:
case CMD_nmapclear:
case CMD_vmapclear:
@@ -3583,27 +3648,45 @@ const char * set_one_cmd_context(
xp->xp_pattern = (char_u *)arg;
break;
- case CMD_abbreviate: case CMD_noreabbrev:
- case CMD_cabbrev: case CMD_cnoreabbrev:
- case CMD_iabbrev: case CMD_inoreabbrev:
- return (const char *)set_context_in_map_cmd(
- xp, (char_u *)cmd, (char_u *)arg, forceit, true, false, ea.cmdidx);
+ case CMD_abbreviate:
+ case CMD_noreabbrev:
+ case CMD_cabbrev:
+ case CMD_cnoreabbrev:
+ case CMD_iabbrev:
+ case CMD_inoreabbrev:
+ return (const char *)set_context_in_map_cmd(xp, (char_u *)cmd, (char_u *)arg, forceit, true,
+ false, ea.cmdidx);
case CMD_unabbreviate:
case CMD_cunabbrev:
case CMD_iunabbrev:
- return (const char *)set_context_in_map_cmd(
- xp, (char_u *)cmd, (char_u *)arg, forceit, true, true, ea.cmdidx);
- case CMD_menu: case CMD_noremenu: case CMD_unmenu:
- case CMD_amenu: case CMD_anoremenu: case CMD_aunmenu:
- case CMD_nmenu: case CMD_nnoremenu: case CMD_nunmenu:
- case CMD_vmenu: case CMD_vnoremenu: case CMD_vunmenu:
- case CMD_omenu: case CMD_onoremenu: case CMD_ounmenu:
- case CMD_imenu: case CMD_inoremenu: case CMD_iunmenu:
- case CMD_cmenu: case CMD_cnoremenu: case CMD_cunmenu:
- case CMD_tmenu: case CMD_tunmenu:
- case CMD_popup: case CMD_emenu:
- return (const char *)set_context_in_menu_cmd(
- xp, cmd, (char_u *)arg, forceit);
+ return (const char *)set_context_in_map_cmd(xp, (char_u *)cmd, (char_u *)arg, forceit, true,
+ true, ea.cmdidx);
+ case CMD_menu:
+ case CMD_noremenu:
+ case CMD_unmenu:
+ case CMD_amenu:
+ case CMD_anoremenu:
+ case CMD_aunmenu:
+ case CMD_nmenu:
+ case CMD_nnoremenu:
+ case CMD_nunmenu:
+ case CMD_vmenu:
+ case CMD_vnoremenu:
+ case CMD_vunmenu:
+ case CMD_omenu:
+ case CMD_onoremenu:
+ case CMD_ounmenu:
+ case CMD_imenu:
+ case CMD_inoremenu:
+ case CMD_iunmenu:
+ case CMD_cmenu:
+ case CMD_cnoremenu:
+ case CMD_cunmenu:
+ case CMD_tmenu:
+ case CMD_tunmenu:
+ case CMD_popup:
+ case CMD_emenu:
+ return (const char *)set_context_in_menu_cmd(xp, cmd, (char_u *)arg, forceit);
case CMD_colorscheme:
xp->xp_context = EXPAND_COLORS;
@@ -3693,17 +3776,17 @@ const char * set_one_cmd_context(
return NULL;
}
-// Skip a range specifier of the form: addr [,addr] [;addr] ..
-//
-// Backslashed delimiters after / or ? will be skipped, and commands will
-// not be expanded between /'s and ?'s or after "'".
-//
-// Also skip white space and ":" characters.
-// Returns the "cmd" pointer advanced to beyond the range.
-char_u *skip_range(
- const char_u *cmd,
- int *ctx // pointer to xp_context or NULL
-)
+/// Skip a range specifier of the form: addr [,addr] [;addr] ..
+///
+/// Backslashed delimiters after / or ? will be skipped, and commands will
+/// not be expanded between /'s and ?'s or after "'".
+///
+/// Also skip white space and ":" characters.
+///
+/// @param ctx pointer to xp_context or NULL
+///
+/// @return the "cmd" pointer advanced to beyond the range.
+char_u *skip_range(const char_u *cmd, int *ctx)
{
unsigned delim;
@@ -3720,14 +3803,18 @@ char_u *skip_range(
}
} else if (*cmd == '/' || *cmd == '?') {
delim = *cmd++;
- while (*cmd != NUL && *cmd != delim)
- if (*cmd++ == '\\' && *cmd != NUL)
+ while (*cmd != NUL && *cmd != delim) {
+ if (*cmd++ == '\\' && *cmd != NUL) {
++cmd;
- if (*cmd == NUL && ctx != NULL)
+ }
+ }
+ if (*cmd == NUL && ctx != NULL) {
*ctx = EXPAND_NOTHING;
+ }
}
- if (*cmd != NUL)
+ if (*cmd != NUL) {
++cmd;
+ }
}
// Skip ":" and white space.
@@ -3745,20 +3832,20 @@ static void addr_error(cmd_addr_T addr_type)
}
}
-// Get a single EX address
-//
-// Set ptr to the next character after the part that was interpreted.
-// Set ptr to NULL when an error is encountered.
-// This may set the last used search pattern.
-//
-// Return MAXLNUM when no Ex address was found.
-static linenr_T get_address(exarg_T *eap,
- char_u **ptr,
- cmd_addr_T addr_type,
- int skip, // only skip the address, don't use it
- bool silent, // no errors or side effects
- int to_other_file, // flag: may jump to other file
- int address_count) // 1 for first, >1 after comma
+/// Get a single EX address
+///
+/// Set ptr to the next character after the part that was interpreted.
+/// Set ptr to NULL when an error is encountered.
+/// This may set the last used search pattern.
+///
+/// @param skip only skip the address, don't use it
+/// @param silent no errors or side effects
+/// @param to_other_file flag: may jump to other file
+/// @param address_count 1 for first, >1 after comma
+///
+/// @return MAXLNUM when no Ex address was found.
+static linenr_T get_address(exarg_T *eap, char_u **ptr, cmd_addr_T addr_type, int skip, bool silent,
+ int to_other_file, int address_count)
FUNC_ATTR_NONNULL_ALL
{
int c;
@@ -3774,94 +3861,94 @@ static linenr_T get_address(exarg_T *eap,
lnum = MAXLNUM;
do {
switch (*cmd) {
- case '.': /* '.' - Cursor position */
+ case '.': // '.' - Cursor position
++cmd;
switch (addr_type) {
- case ADDR_LINES:
- case ADDR_OTHER:
- lnum = curwin->w_cursor.lnum;
- break;
- case ADDR_WINDOWS:
- lnum = CURRENT_WIN_NR;
- break;
- case ADDR_ARGUMENTS:
- lnum = curwin->w_arg_idx + 1;
- break;
- case ADDR_LOADED_BUFFERS:
- case ADDR_BUFFERS:
- lnum = curbuf->b_fnum;
- break;
- case ADDR_TABS:
- lnum = CURRENT_TAB_NR;
- break;
- case ADDR_NONE:
- case ADDR_TABS_RELATIVE:
- case ADDR_UNSIGNED:
- addr_error(addr_type);
- cmd = NULL;
- goto error;
- break;
- case ADDR_QUICKFIX:
- lnum = qf_get_cur_idx(eap);
- break;
- case ADDR_QUICKFIX_VALID:
- lnum = qf_get_cur_valid_idx(eap);
- break;
+ case ADDR_LINES:
+ case ADDR_OTHER:
+ lnum = curwin->w_cursor.lnum;
+ break;
+ case ADDR_WINDOWS:
+ lnum = CURRENT_WIN_NR;
+ break;
+ case ADDR_ARGUMENTS:
+ lnum = curwin->w_arg_idx + 1;
+ break;
+ case ADDR_LOADED_BUFFERS:
+ case ADDR_BUFFERS:
+ lnum = curbuf->b_fnum;
+ break;
+ case ADDR_TABS:
+ lnum = CURRENT_TAB_NR;
+ break;
+ case ADDR_NONE:
+ case ADDR_TABS_RELATIVE:
+ case ADDR_UNSIGNED:
+ addr_error(addr_type);
+ cmd = NULL;
+ goto error;
+ break;
+ case ADDR_QUICKFIX:
+ lnum = qf_get_cur_idx(eap);
+ break;
+ case ADDR_QUICKFIX_VALID:
+ lnum = qf_get_cur_valid_idx(eap);
+ break;
}
break;
- case '$': /* '$' - last line */
+ case '$': // '$' - last line
++cmd;
switch (addr_type) {
- case ADDR_LINES:
- case ADDR_OTHER:
- lnum = curbuf->b_ml.ml_line_count;
- break;
- case ADDR_WINDOWS:
- lnum = LAST_WIN_NR;
- break;
- case ADDR_ARGUMENTS:
- lnum = ARGCOUNT;
- break;
- case ADDR_LOADED_BUFFERS:
- buf = lastbuf;
- while (buf->b_ml.ml_mfp == NULL) {
- if (buf->b_prev == NULL) {
- break;
- }
- buf = buf->b_prev;
- }
- lnum = buf->b_fnum;
- break;
- case ADDR_BUFFERS:
- lnum = lastbuf->b_fnum;
- break;
- case ADDR_TABS:
- lnum = LAST_TAB_NR;
- break;
- case ADDR_NONE:
- case ADDR_TABS_RELATIVE:
- case ADDR_UNSIGNED:
- addr_error(addr_type);
- cmd = NULL;
- goto error;
- break;
- case ADDR_QUICKFIX:
- lnum = qf_get_size(eap);
- if (lnum == 0) {
- lnum = 1;
- }
- break;
- case ADDR_QUICKFIX_VALID:
- lnum = qf_get_valid_size(eap);
- if (lnum == 0) {
- lnum = 1;
+ case ADDR_LINES:
+ case ADDR_OTHER:
+ lnum = curbuf->b_ml.ml_line_count;
+ break;
+ case ADDR_WINDOWS:
+ lnum = LAST_WIN_NR;
+ break;
+ case ADDR_ARGUMENTS:
+ lnum = ARGCOUNT;
+ break;
+ case ADDR_LOADED_BUFFERS:
+ buf = lastbuf;
+ while (buf->b_ml.ml_mfp == NULL) {
+ if (buf->b_prev == NULL) {
+ break;
}
- break;
+ buf = buf->b_prev;
+ }
+ lnum = buf->b_fnum;
+ break;
+ case ADDR_BUFFERS:
+ lnum = lastbuf->b_fnum;
+ break;
+ case ADDR_TABS:
+ lnum = LAST_TAB_NR;
+ break;
+ case ADDR_NONE:
+ case ADDR_TABS_RELATIVE:
+ case ADDR_UNSIGNED:
+ addr_error(addr_type);
+ cmd = NULL;
+ goto error;
+ break;
+ case ADDR_QUICKFIX:
+ lnum = qf_get_size(eap);
+ if (lnum == 0) {
+ lnum = 1;
+ }
+ break;
+ case ADDR_QUICKFIX_VALID:
+ lnum = qf_get_valid_size(eap);
+ if (lnum == 0) {
+ lnum = 1;
+ }
+ break;
}
break;
- case '\'': /* ''' - mark */
+ case '\'': // ''' - mark
if (*++cmd == NUL) {
cmd = NULL;
goto error;
@@ -3871,17 +3958,17 @@ static linenr_T get_address(exarg_T *eap,
cmd = NULL;
goto error;
}
- if (skip)
+ if (skip) {
++cmd;
- else {
+ } else {
/* Only accept a mark in another file when it is
* used by itself: ":'M". */
fp = getmark(*cmd, to_other_file && cmd[1] == NUL);
++cmd;
- if (fp == (pos_T *)-1)
- /* Jumped to another file. */
+ if (fp == (pos_T *)-1) {
+ // Jumped to another file.
lnum = curwin->w_cursor.lnum;
- else {
+ } else {
if (check_mark(fp) == FAIL) {
cmd = NULL;
goto error;
@@ -3892,17 +3979,18 @@ static linenr_T get_address(exarg_T *eap,
break;
case '/':
- case '?': /* '/' or '?' - search */
+ case '?': // '/' or '?' - search
c = *cmd++;
if (addr_type != ADDR_LINES) {
addr_error(addr_type);
cmd = NULL;
goto error;
}
- if (skip) { /* skip "/pat/" */
+ if (skip) { // skip "/pat/"
cmd = skip_regexp(cmd, c, p_magic, NULL);
- if (*cmd == c)
+ if (*cmd == c) {
++cmd;
+ }
} else {
int flags;
@@ -3934,23 +4022,23 @@ static linenr_T get_address(exarg_T *eap,
}
lnum = curwin->w_cursor.lnum;
curwin->w_cursor = pos;
- /* adjust command string pointer */
+ // adjust command string pointer
cmd += searchcmdlen;
}
break;
- case '\\': /* "\?", "\/" or "\&", repeat search */
+ case '\\': // "\?", "\/" or "\&", repeat search
++cmd;
if (addr_type != ADDR_LINES) {
addr_error(addr_type);
cmd = NULL;
goto error;
}
- if (*cmd == '&')
+ if (*cmd == '&') {
i = RE_SUBST;
- else if (*cmd == '?' || *cmd == '/')
+ } else if (*cmd == '?' || *cmd == '/') {
i = RE_SEARCH;
- else {
+ } else {
EMSG(_(e_backslash));
cmd = NULL;
goto error;
@@ -3988,37 +4076,37 @@ static linenr_T get_address(exarg_T *eap,
if (lnum == MAXLNUM) {
switch (addr_type) {
- case ADDR_LINES:
- case ADDR_OTHER:
- // "+1" is same as ".+1"
- lnum = curwin->w_cursor.lnum;
- break;
- case ADDR_WINDOWS:
- lnum = CURRENT_WIN_NR;
- break;
- case ADDR_ARGUMENTS:
- lnum = curwin->w_arg_idx + 1;
- break;
- case ADDR_LOADED_BUFFERS:
- case ADDR_BUFFERS:
- lnum = curbuf->b_fnum;
- break;
- case ADDR_TABS:
- lnum = CURRENT_TAB_NR;
- break;
- case ADDR_TABS_RELATIVE:
- lnum = 1;
- break;
- case ADDR_QUICKFIX:
- lnum = qf_get_cur_idx(eap);
- break;
- case ADDR_QUICKFIX_VALID:
- lnum = qf_get_cur_valid_idx(eap);
- break;
- case ADDR_NONE:
- case ADDR_UNSIGNED:
- lnum = 0;
- break;
+ case ADDR_LINES:
+ case ADDR_OTHER:
+ // "+1" is same as ".+1"
+ lnum = curwin->w_cursor.lnum;
+ break;
+ case ADDR_WINDOWS:
+ lnum = CURRENT_WIN_NR;
+ break;
+ case ADDR_ARGUMENTS:
+ lnum = curwin->w_arg_idx + 1;
+ break;
+ case ADDR_LOADED_BUFFERS:
+ case ADDR_BUFFERS:
+ lnum = curbuf->b_fnum;
+ break;
+ case ADDR_TABS:
+ lnum = CURRENT_TAB_NR;
+ break;
+ case ADDR_TABS_RELATIVE:
+ lnum = 1;
+ break;
+ case ADDR_QUICKFIX:
+ lnum = qf_get_cur_idx(eap);
+ break;
+ case ADDR_QUICKFIX_VALID:
+ lnum = qf_get_cur_valid_idx(eap);
+ break;
+ case ADDR_NONE:
+ case ADDR_UNSIGNED:
+ lnum = 0;
+ break;
}
}
@@ -4038,8 +4126,7 @@ static linenr_T get_address(exarg_T *eap,
cmd = NULL;
goto error;
} else if (addr_type == ADDR_LOADED_BUFFERS || addr_type == ADDR_BUFFERS) {
- lnum = compute_buffer_local_count(
- addr_type, lnum, (i == '-') ? -1 * n : n);
+ lnum = compute_buffer_local_count(addr_type, lnum, (i == '-') ? -1 * n : n);
} else {
// Relative line addressing, need to adjust for folded lines
// now, but only do it after the first address.
@@ -4067,12 +4154,13 @@ error:
static void get_flags(exarg_T *eap)
{
while (vim_strchr((char_u *)"lp#", *eap->arg) != NULL) {
- if (*eap->arg == 'l')
+ if (*eap->arg == 'l') {
eap->flags |= EXFLAG_LIST;
- else if (*eap->arg == 'p')
+ } else if (*eap->arg == 'p') {
eap->flags |= EXFLAG_PRINT;
- else
+ } else {
eap->flags |= EXFLAG_NR;
+ }
eap->arg = skipwhite(eap->arg + 1);
}
}
@@ -4080,9 +4168,9 @@ static void get_flags(exarg_T *eap)
/// Stub function for command which is Not Implemented. NI!
void ex_ni(exarg_T *eap)
{
- if (!eap->skip)
- eap->errmsg = (char_u *)N_(
- "E319: The command is not available in this version");
+ if (!eap->skip) {
+ eap->errmsg = (char_u *)N_("E319: The command is not available in this version");
+ }
}
/// Stub function for script command which is Not Implemented. NI!
@@ -4110,77 +4198,77 @@ static char_u *invalid_range(exarg_T *eap)
if (eap->argt & EX_RANGE) {
switch (eap->addr_type) {
- case ADDR_LINES:
- if (eap->line2 > (curbuf->b_ml.ml_line_count
- + (eap->cmdidx == CMD_diffget))) {
- return (char_u *)_(e_invrange);
- }
- break;
- case ADDR_ARGUMENTS:
- // add 1 if ARGCOUNT is 0
- if (eap->line2 > ARGCOUNT + (!ARGCOUNT)) {
- return (char_u *)_(e_invrange);
- }
- break;
- case ADDR_BUFFERS:
- if (eap->line1 < firstbuf->b_fnum
- || eap->line2 > lastbuf->b_fnum) {
- return (char_u *)_(e_invrange);
- }
- break;
- case ADDR_LOADED_BUFFERS:
- buf = firstbuf;
- while (buf->b_ml.ml_mfp == NULL) {
- if (buf->b_next == NULL) {
- return (char_u *)_(e_invrange);
- }
- buf = buf->b_next;
- }
- if (eap->line1 < buf->b_fnum) {
- return (char_u *)_(e_invrange);
- }
- buf = lastbuf;
- while (buf->b_ml.ml_mfp == NULL) {
- if (buf->b_prev == NULL) {
- return (char_u *)_(e_invrange);
- }
- buf = buf->b_prev;
- }
- if (eap->line2 > buf->b_fnum) {
- return (char_u *)_(e_invrange);
- }
- break;
- case ADDR_WINDOWS:
- if (eap->line2 > LAST_WIN_NR) {
- return (char_u *)_(e_invrange);
- }
- break;
- case ADDR_TABS:
- if (eap->line2 > LAST_TAB_NR) {
- return (char_u *)_(e_invrange);
- }
- break;
- case ADDR_TABS_RELATIVE:
- case ADDR_OTHER:
- // Any range is OK.
- break;
- case ADDR_QUICKFIX:
- assert(eap->line2 >= 0);
- // No error for value that is too big, will use the last entry.
- if (eap->line2 <= 0) {
+ case ADDR_LINES:
+ if (eap->line2 > (curbuf->b_ml.ml_line_count
+ + (eap->cmdidx == CMD_diffget))) {
+ return (char_u *)_(e_invrange);
+ }
+ break;
+ case ADDR_ARGUMENTS:
+ // add 1 if ARGCOUNT is 0
+ if (eap->line2 > ARGCOUNT + (!ARGCOUNT)) {
+ return (char_u *)_(e_invrange);
+ }
+ break;
+ case ADDR_BUFFERS:
+ if (eap->line1 < firstbuf->b_fnum
+ || eap->line2 > lastbuf->b_fnum) {
+ return (char_u *)_(e_invrange);
+ }
+ break;
+ case ADDR_LOADED_BUFFERS:
+ buf = firstbuf;
+ while (buf->b_ml.ml_mfp == NULL) {
+ if (buf->b_next == NULL) {
return (char_u *)_(e_invrange);
}
- break;
- case ADDR_QUICKFIX_VALID:
- if ((eap->line2 != 1 && (size_t)eap->line2 > qf_get_valid_size(eap))
- || eap->line2 < 0) {
+ buf = buf->b_next;
+ }
+ if (eap->line1 < buf->b_fnum) {
+ return (char_u *)_(e_invrange);
+ }
+ buf = lastbuf;
+ while (buf->b_ml.ml_mfp == NULL) {
+ if (buf->b_prev == NULL) {
return (char_u *)_(e_invrange);
}
- break;
- case ADDR_UNSIGNED:
- case ADDR_NONE:
- // Will give an error elsewhere.
- break;
+ buf = buf->b_prev;
+ }
+ if (eap->line2 > buf->b_fnum) {
+ return (char_u *)_(e_invrange);
+ }
+ break;
+ case ADDR_WINDOWS:
+ if (eap->line2 > LAST_WIN_NR) {
+ return (char_u *)_(e_invrange);
+ }
+ break;
+ case ADDR_TABS:
+ if (eap->line2 > LAST_TAB_NR) {
+ return (char_u *)_(e_invrange);
+ }
+ break;
+ case ADDR_TABS_RELATIVE:
+ case ADDR_OTHER:
+ // Any range is OK.
+ break;
+ case ADDR_QUICKFIX:
+ assert(eap->line2 >= 0);
+ // No error for value that is too big, will use the last entry.
+ if (eap->line2 <= 0) {
+ return (char_u *)_(e_invrange);
+ }
+ break;
+ case ADDR_QUICKFIX_VALID:
+ if ((eap->line2 != 1 && (size_t)eap->line2 > qf_get_valid_size(eap))
+ || eap->line2 < 0) {
+ return (char_u *)_(e_invrange);
+ }
+ break;
+ case ADDR_UNSIGNED:
+ case ADDR_NONE:
+ // Will give an error elsewhere.
+ break;
}
}
return NULL;
@@ -4215,8 +4303,9 @@ static char_u *skip_grep_pat(exarg_T *eap)
|| eap->cmdidx == CMD_lvimgrepadd
|| grep_internal(eap->cmdidx))) {
p = skip_vimgrep_pat(p, NULL, NULL);
- if (p == NULL)
+ if (p == NULL) {
p = eap->arg;
+ }
}
return p;
}
@@ -4244,24 +4333,27 @@ static char_u *replace_makeprg(exarg_T *eap, char_u *p, char_u **cmdlinep)
&& !grep_internal(eap->cmdidx)) {
if (eap->cmdidx == CMD_grep || eap->cmdidx == CMD_lgrep
|| eap->cmdidx == CMD_grepadd || eap->cmdidx == CMD_lgrepadd) {
- if (*curbuf->b_p_gp == NUL)
+ if (*curbuf->b_p_gp == NUL) {
program = p_gp;
- else
+ } else {
program = curbuf->b_p_gp;
+ }
} else {
- if (*curbuf->b_p_mp == NUL)
+ if (*curbuf->b_p_mp == NUL) {
program = p_mp;
- else
+ } else {
program = curbuf->b_p_mp;
+ }
}
p = skipwhite(p);
if ((pos = (char_u *)strstr((char *)program, "$*")) != NULL) {
- /* replace $* by given arguments */
+ // replace $* by given arguments
i = 1;
- while ((pos = (char_u *)strstr((char *)pos + 2, "$*")) != NULL)
+ while ((pos = (char_u *)strstr((char *)pos + 2, "$*")) != NULL) {
++i;
+ }
len = (int)STRLEN(p);
new_cmdline = xmalloc(STRLEN(program) + i * (len - 2) + 1);
ptr = new_cmdline;
@@ -4281,7 +4373,7 @@ static char_u *replace_makeprg(exarg_T *eap, char_u *p, char_u **cmdlinep)
}
msg_make(p);
- /* 'eap->cmd' is not set here, because it is not used at CMD_make */
+ // 'eap->cmd' is not set here, because it is not used at CMD_make
xfree(*cmdlinep);
*cmdlinep = new_cmdline;
p = new_cmdline;
@@ -4294,13 +4386,13 @@ static char_u *replace_makeprg(exarg_T *eap, char_u *p, char_u **cmdlinep)
// Return FAIL for failure, OK otherwise.
int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
{
- int has_wildcards; /* need to expand wildcards */
+ int has_wildcards; // need to expand wildcards
char_u *repl;
size_t srclen;
char_u *p;
int escaped;
- /* Skip a regexp pattern for ":vimgrep[add] pat file..." */
+ // Skip a regexp pattern for ":vimgrep[add] pat file..."
p = skip_grep_pat(eap);
/*
@@ -4310,12 +4402,13 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
*/
has_wildcards = path_has_wildcard(p);
while (*p != NUL) {
- /* Skip over `=expr`, wildcards in it are not expanded. */
+ // Skip over `=expr`, wildcards in it are not expanded.
if (p[0] == '`' && p[1] == '=') {
p += 2;
(void)skip_expr(&p);
- if (*p == '`')
+ if (*p == '`') {
++p;
+ }
continue;
}
/*
@@ -4331,10 +4424,11 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
* Try to find a match at this position.
*/
repl = eval_vars(p, eap->arg, &srclen, &(eap->do_ecmd_lnum),
- errormsgp, &escaped);
- if (*errormsgp != NULL) /* error detected */
+ errormsgp, &escaped);
+ if (*errormsgp != NULL) { // error detected
return FAIL;
- if (repl == NULL) { /* no match found */
+ }
+ if (repl == NULL) { // no match found
p += srclen;
continue;
}
@@ -4364,8 +4458,7 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
&& eap->cmdidx != CMD_lmake
&& eap->cmdidx != CMD_make
&& eap->cmdidx != CMD_terminal
- && !(eap->argt & EX_NOSPC)
- ) {
+ && !(eap->argt & EX_NOSPC)) {
char_u *l;
#ifdef BACKSLASH_IN_FILENAME
/* Don't escape a backslash here, because rem_backslash() doesn't
@@ -4376,13 +4469,14 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
# define ESCAPE_CHARS escape_chars
#endif
- for (l = repl; *l; ++l)
+ for (l = repl; *l; ++l) {
if (vim_strchr(ESCAPE_CHARS, *l) != NULL) {
l = vim_strsave_escaped(repl, ESCAPE_CHARS);
xfree(repl);
repl = l;
break;
}
+ }
}
// For a shell command a '!' must be escaped.
@@ -4418,11 +4512,12 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
if (vim_strchr(eap->arg, '$') != NULL
|| vim_strchr(eap->arg, '~') != NULL) {
expand_env_esc(eap->arg, NameBuff, MAXPATHL,
- TRUE, TRUE, NULL);
+ TRUE, TRUE, NULL);
has_wildcards = path_has_wildcard(NameBuff);
p = NameBuff;
- } else
+ } else {
p = NULL;
+ }
if (p != NULL) {
(void)repl_cmdline(eap, eap->arg, STRLEN(eap->arg), p, cmdlinep);
}
@@ -4444,8 +4539,9 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
ExpandInit(&xpc);
xpc.xp_context = EXPAND_FILES;
- if (p_wic)
+ if (p_wic) {
options += WILD_ICASE;
+ }
p = ExpandOne(&xpc, eap->arg, NULL, options, WILD_EXPAND_FREE);
if (p == NULL) {
return FAIL;
@@ -4464,8 +4560,8 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
* "repl" is the replacement string.
* Returns a pointer to the character after the replaced string.
*/
-static char_u *repl_cmdline(exarg_T *eap, char_u *src, size_t srclen,
- char_u *repl, char_u **cmdlinep)
+static char_u *repl_cmdline(exarg_T *eap, char_u *src, size_t srclen, char_u *repl,
+ char_u **cmdlinep)
{
/*
* The new command line is build in new_cmdline[].
@@ -4474,8 +4570,9 @@ static char_u *repl_cmdline(exarg_T *eap, char_u *src, size_t srclen,
*/
size_t len = STRLEN(repl);
size_t i = (size_t)(src - *cmdlinep) + STRLEN(src + srclen) + len + 3;
- if (eap->nextcmd != NULL)
- i += STRLEN(eap->nextcmd); /* add space for next command */
+ if (eap->nextcmd != NULL) {
+ i += STRLEN(eap->nextcmd); // add space for next command
+ }
char_u *new_cmdline = xmalloc(i);
/*
@@ -4484,23 +4581,24 @@ static char_u *repl_cmdline(exarg_T *eap, char_u *src, size_t srclen,
* Copy what came after the expanded part.
* Copy the next commands, if there are any.
*/
- i = (size_t)(src - *cmdlinep); /* length of part before match */
+ i = (size_t)(src - *cmdlinep); // length of part before match
memmove(new_cmdline, *cmdlinep, i);
memmove(new_cmdline + i, repl, len);
- i += len; /* remember the end of the string */
+ i += len; // remember the end of the string
STRCPY(new_cmdline + i, src + srclen);
- src = new_cmdline + i; /* remember where to continue */
+ src = new_cmdline + i; // remember where to continue
- if (eap->nextcmd != NULL) { /* append next command */
+ if (eap->nextcmd != NULL) { // append next command
i = STRLEN(new_cmdline) + 1;
STRCPY(new_cmdline + i, eap->nextcmd);
eap->nextcmd = new_cmdline + i;
}
eap->cmd = new_cmdline + (eap->cmd - *cmdlinep);
eap->arg = new_cmdline + (eap->arg - *cmdlinep);
- if (eap->do_ecmd_cmd != NULL && eap->do_ecmd_cmd != dollar_command)
+ if (eap->do_ecmd_cmd != NULL && eap->do_ecmd_cmd != dollar_command) {
eap->do_ecmd_cmd = new_cmdline + (eap->do_ecmd_cmd - *cmdlinep);
+ }
xfree(*cmdlinep);
*cmdlinep = new_cmdline;
@@ -4535,16 +4633,16 @@ void separate_nextcmd(exarg_T *eap)
break;
}
} else if (
- // Check for '"': start of comment or '|': next command */
- // :@" does not start a comment!
- // :redir @" doesn't either.
- (*p == '"'
- && !(eap->argt & EX_NOTRLCOM)
- && (eap->cmdidx != CMD_at || p != eap->arg)
- && (eap->cmdidx != CMD_redir
- || p != eap->arg + 1 || p[-1] != '@'))
- || *p == '|'
- || *p == '\n') {
+ // Check for '"': start of comment or '|': next command */
+ // :@" does not start a comment!
+ // :redir @" doesn't either.
+ (*p == '"'
+ && !(eap->argt & EX_NOTRLCOM)
+ && (eap->cmdidx != CMD_at || p != eap->arg)
+ && (eap->cmdidx != CMD_redir
+ || p != eap->arg + 1 || p[-1] != '@'))
+ || *p == '|'
+ || *p == '\n') {
// We remove the '\' before the '|', unless EX_CTRLV is used
// AND 'b' is present in 'cpoptions'.
if ((vim_strchr(p_cpo, CPO_BAR) == NULL
@@ -4572,38 +4670,36 @@ static char_u *getargcmd(char_u **argp)
char_u *arg = *argp;
char_u *command = NULL;
- if (*arg == '+') { /* +[command] */
+ if (*arg == '+') { // +[command]
++arg;
- if (ascii_isspace(*arg) || *arg == '\0')
+ if (ascii_isspace(*arg) || *arg == '\0') {
command = dollar_command;
- else {
+ } else {
command = arg;
arg = skip_cmd_arg(command, TRUE);
- if (*arg != NUL)
- *arg++ = NUL; /* terminate command with NUL */
+ if (*arg != NUL) {
+ *arg++ = NUL; // terminate command with NUL
+ }
}
- arg = skipwhite(arg); /* skip over spaces */
+ arg = skipwhite(arg); // skip over spaces
*argp = arg;
}
return command;
}
-/*
- * Find end of "+command" argument. Skip over "\ " and "\\".
- */
-static char_u *
-skip_cmd_arg (
- char_u *p,
- int rembs /* TRUE to halve the number of backslashes */
-)
+/// Find end of "+command" argument. Skip over "\ " and "\\".
+///
+/// @param rembs TRUE to halve the number of backslashes
+static char_u *skip_cmd_arg(char_u *p, int rembs)
{
while (*p && !ascii_isspace(*p)) {
if (*p == '\\' && p[1] != NUL) {
- if (rembs)
+ if (rembs) {
STRMOVE(p, p + 1);
- else
+ } else {
++p;
+ }
}
MB_PTR_ADV(p);
}
@@ -4636,20 +4732,22 @@ static int getargopt(exarg_T *eap)
int bad_char_idx;
char_u *p;
- /* ":edit ++[no]bin[ary] file" */
+ // ":edit ++[no]bin[ary] file"
if (STRNCMP(arg, "bin", 3) == 0 || STRNCMP(arg, "nobin", 5) == 0) {
if (*arg == 'n') {
arg += 2;
eap->force_bin = FORCE_NOBIN;
- } else
+ } else {
eap->force_bin = FORCE_BIN;
- if (!checkforcmd(&arg, "binary", 3))
+ }
+ if (!checkforcmd(&arg, "binary", 3)) {
return FAIL;
+ }
eap->arg = skipwhite(arg);
return OK;
}
- /* ":read ++edit file" */
+ // ":read ++edit file"
if (STRNCMP(arg, "edit", 4) == 0) {
eap->read_edit = TRUE;
eap->arg = skipwhite(arg + 4);
@@ -4663,18 +4761,20 @@ static int getargopt(exarg_T *eap)
arg += 10;
pp = &eap->force_ff;
} else if (STRNCMP(arg, "enc", 3) == 0) {
- if (STRNCMP(arg, "encoding", 8) == 0)
+ if (STRNCMP(arg, "encoding", 8) == 0) {
arg += 8;
- else
+ } else {
arg += 3;
+ }
pp = &eap->force_enc;
} else if (STRNCMP(arg, "bad", 3) == 0) {
arg += 3;
pp = &bad_char_idx;
}
- if (pp == NULL || *arg != '=')
+ if (pp == NULL || *arg != '=') {
return FAIL;
+ }
++arg;
*pp = (int)(arg - eap->cmd);
@@ -4688,9 +4788,10 @@ static int getargopt(exarg_T *eap)
}
eap->force_ff = eap->cmd[eap->force_ff];
} else if (pp == &eap->force_enc) {
- /* Make 'fileencoding' lower case. */
- for (p = eap->cmd + eap->force_enc; *p != NUL; ++p)
+ // Make 'fileencoding' lower case.
+ for (p = eap->cmd + eap->force_enc; *p != NUL; ++p) {
*p = TOLOWER_ASC(*p);
+ }
} else {
/* Check ++bad= argument. Must be a single-byte character, "keep" or
* "drop". */
@@ -4713,8 +4814,8 @@ static int get_tabpage_arg(exarg_T *eap)
if (eap->arg && *eap->arg != NUL) {
char_u *p = eap->arg;
char_u *p_save;
- int relative = 0; // argument +N/-N means: go to N places to the
- // right/left relative to the current position.
+ int relative = 0; // argument +N/-N means: go to N places to the
+ // right/left relative to the current position.
if (*p == '-') {
relative = -1;
@@ -4741,8 +4842,7 @@ static int get_tabpage_arg(exarg_T *eap)
} else {
if (*p_save == NUL) {
tab_number = 1;
- }
- else if (p == p_save || *p_save == '-' || *p != NUL || tab_number == 0) {
+ } else if (p == p_save || *p_save == '-' || *p != NUL || tab_number == 0) {
// No numbers as argument.
eap->errmsg = e_invarg;
goto theend;
@@ -4772,8 +4872,9 @@ static int get_tabpage_arg(exarg_T *eap)
switch (eap->cmdidx) {
case CMD_tabnext:
tab_number = tabpage_index(curtab) + 1;
- if (tab_number > LAST_TAB_NR)
+ if (tab_number > LAST_TAB_NR) {
tab_number = 1;
+ }
break;
case CMD_tabmove:
tab_number = LAST_TAB_NR;
@@ -4792,7 +4893,7 @@ theend:
*/
static void ex_abbreviate(exarg_T *eap)
{
- do_exmap(eap, TRUE); /* almost the same as mapping */
+ do_exmap(eap, TRUE); // almost the same as mapping
}
/*
@@ -4843,10 +4944,11 @@ static void ex_autocmd(exarg_T *eap)
if (secure) {
secure = 2;
eap->errmsg = e_curdir;
- } else if (eap->cmdidx == CMD_autocmd)
+ } else if (eap->cmdidx == CMD_autocmd) {
do_autocmd(eap->arg, eap->forceit);
- else
+ } else {
do_augroup(eap->arg, eap->forceit);
+ }
}
/*
@@ -4872,16 +4974,16 @@ static void ex_doautocmd(exarg_T *eap)
*/
static void ex_bunload(exarg_T *eap)
{
- eap->errmsg = do_bufdel(
- eap->cmdidx == CMD_bdelete ? DOBUF_DEL
- : eap->cmdidx == CMD_bwipeout ? DOBUF_WIPE
- : DOBUF_UNLOAD, eap->arg,
- eap->addr_count, (int)eap->line1, (int)eap->line2, eap->forceit);
+ eap->errmsg = do_bufdel(eap->cmdidx == CMD_bdelete ? DOBUF_DEL
+ : eap->cmdidx == CMD_bwipeout ? DOBUF_WIPE
+ : DOBUF_UNLOAD,
+ eap->arg,
+ eap->addr_count, (int)eap->line1, (int)eap->line2, eap->forceit);
}
/*
- * :[N]buffer [N] to buffer N
- * :[N]sbuffer [N] to buffer N
+ * :[N]buffer [N] to buffer N
+ * :[N]sbuffer [N] to buffer N
*/
static void ex_buffer(exarg_T *eap)
{
@@ -4900,8 +5002,8 @@ static void ex_buffer(exarg_T *eap)
}
/*
- * :[N]bmodified [N] to next mod. buffer
- * :[N]sbmodified [N] to next mod. buffer
+ * :[N]bmodified [N] to next mod. buffer
+ * :[N]sbmodified [N] to next mod. buffer
*/
static void ex_bmodified(exarg_T *eap)
{
@@ -4912,8 +5014,8 @@ static void ex_bmodified(exarg_T *eap)
}
/*
- * :[N]bnext [N] to next buffer
- * :[N]sbnext [N] split and to next buffer
+ * :[N]bnext [N] to next buffer
+ * :[N]sbnext [N] split and to next buffer
*/
static void ex_bnext(exarg_T *eap)
{
@@ -4924,10 +5026,10 @@ static void ex_bnext(exarg_T *eap)
}
/*
- * :[N]bNext [N] to previous buffer
- * :[N]bprevious [N] to previous buffer
- * :[N]sbNext [N] split and to previous buffer
- * :[N]sbprevious [N] split and to previous buffer
+ * :[N]bNext [N] to previous buffer
+ * :[N]bprevious [N] to previous buffer
+ * :[N]sbNext [N] split and to previous buffer
+ * :[N]sbprevious [N] split and to previous buffer
*/
static void ex_bprevious(exarg_T *eap)
{
@@ -4938,10 +5040,10 @@ static void ex_bprevious(exarg_T *eap)
}
/*
- * :brewind to first buffer
- * :bfirst to first buffer
- * :sbrewind split and to first buffer
- * :sbfirst split and to first buffer
+ * :brewind to first buffer
+ * :bfirst to first buffer
+ * :sbrewind split and to first buffer
+ * :sbfirst split and to first buffer
*/
static void ex_brewind(exarg_T *eap)
{
@@ -4952,8 +5054,8 @@ static void ex_brewind(exarg_T *eap)
}
/*
- * :blast to last buffer
- * :sblast split and to last buffer
+ * :blast to last buffer
+ * :sblast split and to last buffer
*/
static void ex_blast(exarg_T *eap)
{
@@ -4987,28 +5089,23 @@ char_u *find_nextcmd(const char_u *p)
/// Return NULL if it isn't, the following character if it is.
char_u *check_nextcmd(char_u *p)
{
- char_u *s = skipwhite(p);
+ char_u *s = skipwhite(p);
- if (*s == '|' || *s == '\n') {
- return (s + 1);
- } else {
- return NULL;
- }
+ if (*s == '|' || *s == '\n') {
+ return (s + 1);
+ } else {
+ return NULL;
+ }
}
-/*
- * - if there are more files to edit
- * - and this is the last window
- * - and forceit not used
- * - and not repeated twice on a row
- * return FAIL and give error message if 'message' TRUE
- * return OK otherwise
- */
-static int
-check_more(
- int message, // when FALSE check only, no messages
- bool forceit
-)
+/// - if there are more files to edit
+/// - and this is the last window
+/// - and forceit not used
+/// - and not repeated twice on a row
+/// @return FAIL and give error message if 'message' TRUE, return OK otherwise
+///
+/// @param message when FALSE check only, no messages
+static int check_more(int message, bool forceit)
{
int n = ARGCOUNT - curwin->w_arg_idx - 1;
@@ -5018,21 +5115,24 @@ check_more(
if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL) {
char_u buff[DIALOG_MSG_SIZE];
- if (n == 1)
+ if (n == 1) {
STRLCPY(buff, _("1 more file to edit. Quit anyway?"),
- DIALOG_MSG_SIZE);
- else
+ DIALOG_MSG_SIZE);
+ } else {
vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
- _("%d more files to edit. Quit anyway?"), n);
- if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
+ _("%d more files to edit. Quit anyway?"), n);
+ }
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES) {
return OK;
+ }
return FAIL;
}
- if (n == 1)
+ if (n == 1) {
EMSG(_("E173: 1 more file to edit"));
- else
+ } else {
EMSGN(_("E173: %" PRId64 " more files to edit"), n);
- quitmore = 2; /* next try to quit is allowed */
+ }
+ quitmore = 2; // next try to quit is allowed
}
return FAIL;
}
@@ -5044,14 +5144,14 @@ check_more(
*/
char_u *get_command_name(expand_T *xp, int idx)
{
- if (idx >= (int)CMD_SIZE)
+ if (idx >= (int)CMD_SIZE) {
return get_user_command_name(idx);
+ }
return cmdnames[idx].cmd_name;
}
-static int uc_add_command(char_u *name, size_t name_len, char_u *rep,
- uint32_t argt, long def, int flags, int compl,
- char_u *compl_arg, cmd_addr_T addr_type, bool force)
+static int uc_add_command(char_u *name, size_t name_len, char_u *rep, uint32_t argt, long def,
+ int flags, int compl, char_u *compl_arg, cmd_addr_T addr_type, bool force)
FUNC_ATTR_NONNULL_ARG(1, 3)
{
ucmd_T *cmd = NULL;
@@ -5063,19 +5163,21 @@ static int uc_add_command(char_u *name, size_t name_len, char_u *rep,
replace_termcodes(rep, STRLEN(rep), &rep_buf, false, false, true,
CPO_TO_CPO_FLAGS);
if (rep_buf == NULL) {
- /* Can't replace termcodes - try using the string as is */
+ // Can't replace termcodes - try using the string as is
rep_buf = vim_strsave(rep);
}
- /* get address of growarray: global or in curbuf */
+ // get address of growarray: global or in curbuf
if (flags & UC_BUFFER) {
gap = &curbuf->b_ucmds;
- if (gap->ga_itemsize == 0)
+ if (gap->ga_itemsize == 0) {
ga_init(gap, (int)sizeof(ucmd_T), 4);
- } else
+ }
+ } else {
gap = &ucmds;
+ }
- /* Search for the command in the already defined commands. */
+ // Search for the command in the already defined commands.
for (i = 0; i < gap->ga_len; ++i) {
size_t len;
@@ -5083,10 +5185,11 @@ static int uc_add_command(char_u *name, size_t name_len, char_u *rep,
len = STRLEN(cmd->uc_name);
cmp = STRNCMP(name, cmd->uc_name, name_len);
if (cmp == 0) {
- if (name_len < len)
+ if (name_len < len) {
cmp = -1;
- else if (name_len > len)
+ } else if (name_len > len) {
cmp = 1;
+ }
}
if (cmp == 0) {
@@ -5105,12 +5208,13 @@ static int uc_add_command(char_u *name, size_t name_len, char_u *rep,
break;
}
- /* Stop as soon as we pass the name to add */
- if (cmp < 0)
+ // Stop as soon as we pass the name to add
+ if (cmp < 0) {
break;
+ }
}
- /* Extend the array unless we're replacing an existing command */
+ // Extend the array unless we're replacing an existing command
if (cmp != 0) {
ga_grow(gap, 1);
@@ -5247,8 +5351,9 @@ static void uc_list(char_u *name, size_t name_len)
}
found = true;
msg_putchar('\n');
- if (got_int)
+ if (got_int) {
break;
+ }
// Special cases
int len = 4;
@@ -5287,21 +5392,21 @@ static void uc_list(char_u *name, size_t name_len)
// Arguments
switch (a & (EX_EXTRA | EX_NOSPC | EX_NEEDARG)) {
- case 0:
- IObuff[len++] = '0';
- break;
- case (EX_EXTRA):
- IObuff[len++] = '*';
- break;
- case (EX_EXTRA | EX_NOSPC):
- IObuff[len++] = '?';
- break;
- case (EX_EXTRA | EX_NEEDARG):
- IObuff[len++] = '+';
- break;
- case (EX_EXTRA | EX_NOSPC | EX_NEEDARG):
- IObuff[len++] = '1';
- break;
+ case 0:
+ IObuff[len++] = '0';
+ break;
+ case (EX_EXTRA):
+ IObuff[len++] = '*';
+ break;
+ case (EX_EXTRA | EX_NOSPC):
+ IObuff[len++] = '?';
+ break;
+ case (EX_EXTRA | EX_NEEDARG):
+ IObuff[len++] = '+';
+ break;
+ case (EX_EXTRA | EX_NOSPC | EX_NEEDARG):
+ IObuff[len++] = '1';
+ break;
}
do {
@@ -5369,18 +5474,19 @@ static void uc_list(char_u *name, size_t name_len)
break;
}
}
- if (gap == &ucmds || i < gap->ga_len)
+ if (gap == &ucmds || i < gap->ga_len) {
break;
+ }
gap = &ucmds;
}
- if (!found)
+ if (!found) {
MSG(_("No user-defined commands found"));
+ }
}
-static int uc_scan_attr(char_u *attr, size_t len, uint32_t *argt, long *def,
- int *flags, int *complp, char_u **compl_arg,
- cmd_addr_T *addr_type_arg)
+static int uc_scan_attr(char_u *attr, size_t len, uint32_t *argt, long *def, int *flags,
+ int *complp, char_u **compl_arg, cmd_addr_T *addr_type_arg)
FUNC_ATTR_NONNULL_ALL
{
char_u *p;
@@ -5469,17 +5575,20 @@ invalid_count:
if (val != NULL) {
p = val;
- if (*def >= 0)
+ if (*def >= 0) {
goto two_count;
+ }
*def = getdigits_long(&p, true, 0);
- if (p != val + vallen)
+ if (p != val + vallen) {
goto invalid_count;
+ }
}
- if (*def < 0)
+ if (*def < 0) {
*def = 0;
+ }
} else if (STRNICMP(attr, "complete", attrlen) == 0) {
if (val == NULL) {
EMSG(_("E179: argument required for -complete"));
@@ -5514,8 +5623,7 @@ invalid_count:
return OK;
}
-static char e_complete_used_without_nargs[] = N_(
- "E1208: -complete used without -nargs");
+static char e_complete_used_without_nargs[] = N_("E1208: -complete used without -nargs");
/*
* ":command ..."
@@ -5536,7 +5644,7 @@ static void ex_command(exarg_T *eap)
p = eap->arg;
- /* Check for attributes */
+ // Check for attributes
while (*p == '-') {
++p;
end = skiptowhite(p);
@@ -5614,11 +5722,13 @@ static void ex_delcommand(exarg_T *eap)
for (i = 0; i < gap->ga_len; ++i) {
cmd = USER_CMD_GA(gap, i);
cmp = STRCMP(eap->arg, cmd->uc_name);
- if (cmp <= 0)
+ if (cmp <= 0) {
break;
+ }
}
- if (gap == &ucmds || cmp == 0)
+ if (gap == &ucmds || cmp == 0) {
break;
+ }
gap = &ucmds;
}
@@ -5633,8 +5743,9 @@ static void ex_delcommand(exarg_T *eap)
--gap->ga_len;
- if (i < gap->ga_len)
+ if (i < gap->ga_len) {
memmove(cmd, cmd + 1, (gap->ga_len - i) * sizeof(ucmd_T));
+ }
}
/*
@@ -5647,9 +5758,9 @@ static char_u *uc_split_args(char_u *arg, size_t *lenp)
char_u *q;
int len;
- /* Precalculate length */
+ // Precalculate length
p = arg;
- len = 2; /* Initial and final quotes */
+ len = 2; // Initial and final quotes
while (*p) {
if (p[0] == '\\' && p[1] == '\\') {
@@ -5663,9 +5774,10 @@ static char_u *uc_split_args(char_u *arg, size_t *lenp)
p += 1;
} else if (ascii_iswhite(*p)) {
p = skipwhite(p);
- if (*p == NUL)
+ if (*p == NUL) {
break;
- len += 3; /* "," */
+ }
+ len += 3; // ","
} else {
const int charlen = utfc_ptr2len(p);
@@ -5692,8 +5804,9 @@ static char_u *uc_split_args(char_u *arg, size_t *lenp)
*q++ = *p++;
} else if (ascii_iswhite(*p)) {
p = skipwhite(p);
- if (*p == NUL)
+ if (*p == NUL) {
break;
+ }
*q++ = '"';
*q++ = ',';
*q++ = '"';
@@ -5726,25 +5839,19 @@ static size_t add_cmd_modifier(char_u *buf, char *mod_str, bool *multi_mods)
return result;
}
-/*
- * Check for a <> code in a user command.
- * "code" points to the '<'. "len" the length of the <> (inclusive).
- * "buf" is where the result is to be added.
- * "split_buf" points to a buffer used for splitting, caller should free it.
- * "split_len" is the length of what "split_buf" contains.
- * Returns the length of the replacement, which has been added to "buf".
- * Returns -1 if there was no match, and only the "<" has been copied.
- */
-static size_t
-uc_check_code(
- char_u *code,
- size_t len,
- char_u *buf,
- ucmd_T *cmd, /* the user command we're expanding */
- exarg_T *eap, /* ex arguments */
- char_u **split_buf,
- size_t *split_len
-)
+/// Check for a <> code in a user command.
+///
+/// @param code points to the '<'. "len" the length of the <> (inclusive).
+/// @param buf is where the result is to be added.
+/// @param cmd the user command we're expanding
+/// @param eap ex arguments
+/// @param split_buf points to a buffer used for splitting, caller should free it.
+/// @param split_len is the length of what "split_buf" contains.
+///
+/// @return the length of the replacement, which has been added to "buf".
+/// Return -1 if there was no match, and only the "<" has been copied.
+static size_t uc_check_code(char_u *code, size_t len, char_u *buf, ucmd_T *cmd, exarg_T *eap,
+ char_u **split_buf, size_t *split_len)
{
size_t result = 0;
char_u *p = code + 1;
@@ -5794,14 +5901,16 @@ uc_check_code(
switch (type) {
case ct_ARGS:
- /* Simple case first */
+ // Simple case first
if (*eap->arg == NUL) {
if (quote == 1) {
result = 2;
- if (buf != NULL)
+ if (buf != NULL) {
STRCPY(buf, "''");
- } else
+ }
+ } else {
result = 0;
+ }
break;
}
@@ -5812,12 +5921,13 @@ uc_check_code(
}
switch (quote) {
- case 0: /* No quoting, no splitting */
+ case 0: // No quoting, no splitting
result = STRLEN(eap->arg);
- if (buf != NULL)
+ if (buf != NULL) {
STRCPY(buf, eap->arg);
+ }
break;
- case 1: /* Quote, but don't split */
+ case 1: // Quote, but don't split
result = STRLEN(eap->arg) + 2;
for (p = eap->arg; *p; p++) {
if (*p == '\\' || *p == '"') {
@@ -5837,14 +5947,16 @@ uc_check_code(
}
break;
- case 2: /* Quote and split (<f-args>) */
- /* This is hard, so only do it once, and cache the result */
- if (*split_buf == NULL)
+ case 2: // Quote and split (<f-args>)
+ // This is hard, so only do it once, and cache the result
+ if (*split_buf == NULL) {
*split_buf = uc_split_args(eap->arg, split_len);
+ }
result = *split_len;
- if (buf != NULL && result != 0)
+ if (buf != NULL && result != 0) {
STRCPY(buf, *split_buf);
+ }
break;
}
@@ -5852,155 +5964,166 @@ uc_check_code(
case ct_BANG:
result = eap->forceit ? 1 : 0;
- if (quote)
+ if (quote) {
result += 2;
+ }
if (buf != NULL) {
- if (quote)
+ if (quote) {
*buf++ = '"';
- if (eap->forceit)
+ }
+ if (eap->forceit) {
*buf++ = '!';
- if (quote)
+ }
+ if (quote) {
*buf = '"';
+ }
}
break;
case ct_LINE1:
case ct_LINE2:
case ct_RANGE:
- case ct_COUNT:
- {
- char num_buf[20];
- long num = (type == ct_LINE1) ? eap->line1 :
- (type == ct_LINE2) ? eap->line2 :
- (type == ct_RANGE) ? eap->addr_count :
- (eap->addr_count > 0) ? eap->line2 : cmd->uc_def;
- size_t num_len;
-
- sprintf(num_buf, "%" PRId64, (int64_t)num);
- num_len = STRLEN(num_buf);
- result = num_len;
-
- if (quote)
- result += 2;
-
- if (buf != NULL) {
- if (quote)
- *buf++ = '"';
- STRCPY(buf, num_buf);
- buf += num_len;
- if (quote)
- *buf = '"';
- }
+ case ct_COUNT: {
+ char num_buf[20];
+ long num = (type == ct_LINE1) ? eap->line1 :
+ (type == ct_LINE2) ? eap->line2 :
+ (type == ct_RANGE) ? eap->addr_count :
+ (eap->addr_count > 0) ? eap->line2 : cmd->uc_def;
+ size_t num_len;
+
+ sprintf(num_buf, "%" PRId64, (int64_t)num);
+ num_len = STRLEN(num_buf);
+ result = num_len;
- break;
- }
-
- case ct_MODS:
- {
- result = quote ? 2 : 0;
- if (buf != NULL) {
if (quote) {
- *buf++ = '"';
+ result += 2;
}
- *buf = '\0';
- }
- bool multi_mods = false;
+ if (buf != NULL) {
+ if (quote) {
+ *buf++ = '"';
+ }
+ STRCPY(buf, num_buf);
+ buf += num_len;
+ if (quote) {
+ *buf = '"';
+ }
+ }
- // :aboveleft and :leftabove
- if (cmdmod.split & WSP_ABOVE) {
- result += add_cmd_modifier(buf, "aboveleft", &multi_mods);
- }
- // :belowright and :rightbelow
- if (cmdmod.split & WSP_BELOW) {
- result += add_cmd_modifier(buf, "belowright", &multi_mods);
- }
- // :botright
- if (cmdmod.split & WSP_BOT) {
- result += add_cmd_modifier(buf, "botright", &multi_mods);
+ break;
}
- typedef struct {
- bool *set;
- char *name;
- } mod_entry_T;
- static mod_entry_T mod_entries[] = {
- { &cmdmod.browse, "browse" },
- { &cmdmod.confirm, "confirm" },
- { &cmdmod.hide, "hide" },
- { &cmdmod.keepalt, "keepalt" },
- { &cmdmod.keepjumps, "keepjumps" },
- { &cmdmod.keepmarks, "keepmarks" },
- { &cmdmod.keeppatterns, "keeppatterns" },
- { &cmdmod.lockmarks, "lockmarks" },
- { &cmdmod.noswapfile, "noswapfile" }
- };
- // the modifiers that are simple flags
- for (size_t i = 0; i < ARRAY_SIZE(mod_entries); i++) {
- if (*mod_entries[i].set) {
- result += add_cmd_modifier(buf, mod_entries[i].name, &multi_mods);
+ case ct_MODS: {
+ result = quote ? 2 : 0;
+ if (buf != NULL) {
+ if (quote) {
+ *buf++ = '"';
+ }
+ *buf = '\0';
+ }
+
+ bool multi_mods = false;
+
+ // :aboveleft and :leftabove
+ if (cmdmod.split & WSP_ABOVE) {
+ result += add_cmd_modifier(buf, "aboveleft", &multi_mods);
+ }
+ // :belowright and :rightbelow
+ if (cmdmod.split & WSP_BELOW) {
+ result += add_cmd_modifier(buf, "belowright", &multi_mods);
+ }
+ // :botright
+ if (cmdmod.split & WSP_BOT) {
+ result += add_cmd_modifier(buf, "botright", &multi_mods);
+ }
+
+ typedef struct {
+ bool *set;
+ char *name;
+ } mod_entry_T;
+ static mod_entry_T mod_entries[] = {
+ { &cmdmod.browse, "browse" },
+ { &cmdmod.confirm, "confirm" },
+ { &cmdmod.hide, "hide" },
+ { &cmdmod.keepalt, "keepalt" },
+ { &cmdmod.keepjumps, "keepjumps" },
+ { &cmdmod.keepmarks, "keepmarks" },
+ { &cmdmod.keeppatterns, "keeppatterns" },
+ { &cmdmod.lockmarks, "lockmarks" },
+ { &cmdmod.noswapfile, "noswapfile" }
+ };
+ // the modifiers that are simple flags
+ for (size_t i = 0; i < ARRAY_SIZE(mod_entries); i++) {
+ if (*mod_entries[i].set) {
+ result += add_cmd_modifier(buf, mod_entries[i].name, &multi_mods);
+ }
}
- }
- // TODO(vim): How to support :noautocmd?
- // TODO(vim): How to support :sandbox?
+ // TODO(vim): How to support :noautocmd?
+ // TODO(vim): How to support :sandbox?
- // :silent
- if (msg_silent > 0) {
- result += add_cmd_modifier(buf, emsg_silent > 0 ? "silent!" : "silent",
- &multi_mods);
- }
- // :tab
- if (cmdmod.tab > 0) {
- result += add_cmd_modifier(buf, "tab", &multi_mods);
- }
- // :topleft
- if (cmdmod.split & WSP_TOP) {
- result += add_cmd_modifier(buf, "topleft", &multi_mods);
- }
+ // :silent
+ if (msg_silent > 0) {
+ result += add_cmd_modifier(buf, emsg_silent > 0 ? "silent!" : "silent",
+ &multi_mods);
+ }
+ // :tab
+ if (cmdmod.tab > 0) {
+ result += add_cmd_modifier(buf, "tab", &multi_mods);
+ }
+ // :topleft
+ if (cmdmod.split & WSP_TOP) {
+ result += add_cmd_modifier(buf, "topleft", &multi_mods);
+ }
- // TODO(vim): How to support :unsilent?
+ // TODO(vim): How to support :unsilent?
- // :verbose
- if (p_verbose > 0) {
- result += add_cmd_modifier(buf, "verbose", &multi_mods);
- }
- // :vertical
- if (cmdmod.split & WSP_VERT) {
- result += add_cmd_modifier(buf, "vertical", &multi_mods);
- }
- if (quote && buf != NULL) {
- buf += result - 2;
- *buf = '"';
+ // :verbose
+ if (p_verbose > 0) {
+ result += add_cmd_modifier(buf, "verbose", &multi_mods);
+ }
+ // :vertical
+ if (cmdmod.split & WSP_VERT) {
+ result += add_cmd_modifier(buf, "vertical", &multi_mods);
+ }
+ if (quote && buf != NULL) {
+ buf += result - 2;
+ *buf = '"';
+ }
+ break;
}
- break;
- }
case ct_REGISTER:
result = eap->regname ? 1 : 0;
- if (quote)
+ if (quote) {
result += 2;
+ }
if (buf != NULL) {
- if (quote)
+ if (quote) {
*buf++ = '\'';
- if (eap->regname)
+ }
+ if (eap->regname) {
*buf++ = eap->regname;
- if (quote)
+ }
+ if (quote) {
*buf = '\'';
+ }
}
break;
case ct_LT:
result = 1;
- if (buf != NULL)
+ if (buf != NULL) {
*buf = '<';
+ }
break;
default:
- /* Not recognized: just copy the '<' and return -1. */
+ // Not recognized: just copy the '<' and return -1.
result = (size_t)-1;
- if (buf != NULL)
+ if (buf != NULL) {
*buf = '<';
+ }
break;
}
@@ -6023,10 +6146,11 @@ static void do_ucmd(exarg_T *eap)
ucmd_T *cmd;
const sctx_T save_current_sctx = current_sctx;
- if (eap->cmdidx == CMD_USER)
+ if (eap->cmdidx == CMD_USER) {
cmd = USER_CMD(eap->useridx);
- else
+ } else {
cmd = USER_CMD_GA(&curbuf->b_ucmds, eap->useridx);
+ }
/*
* Replace <> in the command by the arguments.
@@ -6035,14 +6159,15 @@ static void do_ucmd(exarg_T *eap)
*/
buf = NULL;
for (;; ) {
- p = cmd->uc_rep; /* source */
- q = buf; /* destination */
+ p = cmd->uc_rep; // source
+ q = buf; // destination
totlen = 0;
for (;; ) {
start = vim_strchr(p, '<');
- if (start != NULL)
+ if (start != NULL) {
end = vim_strchr(start + 1, '>');
+ }
if (buf != NULL) {
for (ksp = p; *ksp != NUL && *ksp != K_SPECIAL; ksp++) {
}
@@ -6064,41 +6189,44 @@ static void do_ucmd(exarg_T *eap)
}
}
- /* break if there no <item> is found */
- if (start == NULL || end == NULL)
+ // break if there no <item> is found
+ if (start == NULL || end == NULL) {
break;
+ }
- /* Include the '>' */
+ // Include the '>'
++end;
- /* Take everything up to the '<' */
+ // Take everything up to the '<'
len = start - p;
- if (buf == NULL)
+ if (buf == NULL) {
totlen += len;
- else {
+ } else {
memmove(q, p, len);
q += len;
}
len = uc_check_code(start, end - start, q, cmd, eap,
- &split_buf, &split_len);
+ &split_buf, &split_len);
if (len == (size_t)-1) {
- /* no match, continue after '<' */
+ // no match, continue after '<'
p = start + 1;
len = 1;
- } else
+ } else {
p = end;
- if (buf == NULL)
+ }
+ if (buf == NULL) {
totlen += len;
- else
+ } else {
q += len;
+ }
}
- if (buf != NULL) { /* second time here, finished */
+ if (buf != NULL) { // second time here, finished
STRCPY(q, p);
break;
}
- totlen += STRLEN(p); /* Add on the trailing characters */
+ totlen += STRLEN(p); // Add on the trailing characters
buf = xmalloc(totlen + 1);
}
@@ -6149,12 +6277,13 @@ char_u *get_user_commands(expand_T *xp FUNC_ATTR_UNUSED, int idx)
*/
char_u *get_user_cmd_flags(expand_T *xp, int idx)
{
- static char *user_cmd_flags[] = {"addr", "bang", "bar",
- "buffer", "complete", "count",
- "nargs", "range", "register"};
+ static char *user_cmd_flags[] = { "addr", "bang", "bar",
+ "buffer", "complete", "count",
+ "nargs", "range", "register" };
- if (idx >= (int)ARRAY_SIZE(user_cmd_flags))
+ if (idx >= (int)ARRAY_SIZE(user_cmd_flags)) {
return NULL;
+ }
return (char_u *)user_cmd_flags[idx];
}
@@ -6163,10 +6292,11 @@ char_u *get_user_cmd_flags(expand_T *xp, int idx)
*/
char_u *get_user_cmd_nargs(expand_T *xp, int idx)
{
- static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"};
+ static char *user_cmd_nargs[] = { "0", "1", "*", "?", "+" };
- if (idx >= (int)ARRAY_SIZE(user_cmd_nargs))
+ if (idx >= (int)ARRAY_SIZE(user_cmd_nargs)) {
return NULL;
+ }
return (char_u *)user_cmd_nargs[idx];
}
@@ -6222,8 +6352,8 @@ int parse_addr_type_arg(char_u *value, int vallen, cmd_addr_T *addr_type_arg)
* copied to allocated memory and stored in "*compl_arg".
* Returns FAIL if something is wrong.
*/
-int parse_compl_arg(const char_u *value, int vallen, int *complp,
- uint32_t *argt, char_u **compl_arg)
+int parse_compl_arg(const char_u *value, int vallen, int *complp, uint32_t *argt,
+ char_u **compl_arg)
FUNC_ATTR_NONNULL_ALL
{
const char_u *arg = NULL;
@@ -6231,7 +6361,7 @@ int parse_compl_arg(const char_u *value, int vallen, int *complp,
int i;
int valend = vallen;
- /* Look for any argument part - which is the part after any ',' */
+ // Look for any argument part - which is the part after any ','
for (i = 0; i < vallen; ++i) {
if (value[i] == ',') {
arg = &value[i + 1];
@@ -6282,17 +6412,17 @@ int parse_compl_arg(const char_u *value, int vallen, int *complp,
int cmdcomplete_str_to_type(const char *complete_str)
{
- for (int i = 0; i < (int)(ARRAY_SIZE(command_complete)); i++) {
- char *cmd_compl = get_command_complete(i);
- if (cmd_compl == NULL) {
- continue;
- }
- if (strcmp(complete_str, command_complete[i]) == 0) {
- return i;
- }
+ for (int i = 0; i < (int)(ARRAY_SIZE(command_complete)); i++) {
+ char *cmd_compl = get_command_complete(i);
+ if (cmd_compl == NULL) {
+ continue;
}
+ if (strcmp(complete_str, command_complete[i]) == 0) {
+ return i;
+ }
+ }
- return EXPAND_NOTHING;
+ return EXPAND_NOTHING;
}
static void ex_colorscheme(exarg_T *eap)
@@ -6309,10 +6439,12 @@ static void ex_colorscheme(exarg_T *eap)
if (p != NULL) {
MSG(p);
xfree(p);
- } else
+ } else {
MSG("default");
- } else if (load_colors(eap->arg) == FAIL)
+ }
+ } else if (load_colors(eap->arg) == FAIL) {
EMSG2(_("E185: Cannot find color scheme '%s'"), eap->arg);
+ }
}
static void ex_highlight(exarg_T *eap)
@@ -6370,7 +6502,7 @@ static void ex_quit(exarg_T *eap)
cmdwin_result = Ctrl_C;
return;
}
- /* Don't quit while editing the command line. */
+ // Don't quit while editing the command line.
if (text_locked()) {
text_locked_msg();
return;
@@ -6382,8 +6514,9 @@ static void ex_quit(exarg_T *eap)
int wnr = eap->line2;
for (wp = firstwin; wp->w_next != NULL; wp = wp->w_next) {
- if (--wnr <= 0)
+ if (--wnr <= 0) {
break;
+ }
}
} else {
wp = curwin;
@@ -6445,7 +6578,7 @@ static void ex_quit_all(exarg_T *eap)
return;
}
- /* Don't quit while editing the command line. */
+ // Don't quit while editing the command line.
if (text_locked()) {
text_locked_msg();
return;
@@ -6482,8 +6615,9 @@ static void ex_close(exarg_T *eap)
break;
}
}
- if (win == NULL)
+ if (win == NULL) {
win = lastwin;
+ }
ex_win_close(eap->forceit, win, NULL);
}
}
@@ -6502,16 +6636,11 @@ static void ex_pclose(exarg_T *eap)
}
}
-/*
- * Close window "win" and take care of handling closing the last window for a
- * modified buffer.
- */
-void
-ex_win_close(
- int forceit,
- win_T *win,
- tabpage_T *tp /* NULL or the tab page "win" is in */
-)
+/// Close window "win" and take care of handling closing the last window for a
+/// modified buffer.
+///
+/// @param tp NULL or the tab page "win" is in
+void ex_win_close(int forceit, win_T *win, tabpage_T *tp)
{
int need_hide;
buf_T *buf = win->w_buffer;
@@ -6555,11 +6684,11 @@ static void ex_tabclose(exarg_T *eap)
{
tabpage_T *tp;
- if (cmdwin_type != 0)
+ if (cmdwin_type != 0) {
cmdwin_result = K_IGNORE;
- else if (first_tabpage->tp_next == NULL)
+ } else if (first_tabpage->tp_next == NULL) {
EMSG(_("E784: Cannot close last tab page"));
- else {
+ } else {
int tab_number = get_tabpage_arg(eap);
if (eap->errmsg == NULL) {
tp = find_tabpage(tab_number);
@@ -6583,7 +6712,7 @@ static void ex_tabonly(exarg_T *eap)
if (cmdwin_type != 0) {
cmdwin_result = K_IGNORE;
} else if (first_tabpage->tp_next == NULL) {
- MSG(_("Already only one tab page"));
+ MSG(_("Already only one tab page"));
} else {
int tab_number = get_tabpage_arg(eap);
if (eap->errmsg == NULL) {
@@ -6651,8 +6780,9 @@ void tabpage_close_other(tabpage_T *tp, int forceit)
/* Autocommands may delete the tab page under our fingers and we may
* fail to close a window with a modified buffer. */
- if (!valid_tabpage(tp) || tp->tp_firstwin == wp)
+ if (!valid_tabpage(tp) || tp->tp_firstwin == wp) {
break;
+ }
}
redraw_tabline = true;
@@ -6672,10 +6802,11 @@ static void ex_only(exarg_T *eap)
if (eap->addr_count > 0) {
wnr = eap->line2;
for (wp = firstwin; --wnr > 0;) {
- if (wp->w_next == NULL)
+ if (wp->w_next == NULL) {
break;
- else
+ } else {
wp = wp->w_next;
+ }
}
} else {
wp = curwin;
@@ -6692,34 +6823,35 @@ static void ex_only(exarg_T *eap)
*/
void ex_all(exarg_T *eap)
{
- if (eap->addr_count == 0)
+ if (eap->addr_count == 0) {
eap->line2 = 9999;
+ }
do_arg_all((int)eap->line2, eap->forceit, eap->cmdidx == CMD_drop);
}
static void ex_hide(exarg_T *eap)
{
- // ":hide" or ":hide | cmd": hide current window
- if (!eap->skip) {
- if (eap->addr_count == 0) {
- win_close(curwin, false); // don't free buffer
- } else {
- int winnr = 0;
- win_T *win = NULL;
-
- FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
- winnr++;
- if (winnr == eap->line2) {
- win = wp;
- break;
- }
- }
- if (win == NULL) {
- win = lastwin;
- }
- win_close(win, false);
+ // ":hide" or ":hide | cmd": hide current window
+ if (!eap->skip) {
+ if (eap->addr_count == 0) {
+ win_close(curwin, false); // don't free buffer
+ } else {
+ int winnr = 0;
+ win_T *win = NULL;
+
+ FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
+ winnr++;
+ if (winnr == eap->line2) {
+ win = wp;
+ break;
}
+ }
+ if (win == NULL) {
+ win = lastwin;
+ }
+ win_close(win, false);
}
+ }
}
/// ":stop" and ":suspend": Suspend Vim.
@@ -6750,7 +6882,7 @@ static void ex_exit(exarg_T *eap)
cmdwin_result = Ctrl_C;
return;
}
- /* Don't quit while editing the command line. */
+ // Don't quit while editing the command line.
if (text_locked()) {
text_locked_msg();
return;
@@ -6784,20 +6916,21 @@ static void ex_exit(exarg_T *eap)
*/
static void ex_print(exarg_T *eap)
{
- if (curbuf->b_ml.ml_flags & ML_EMPTY)
+ if (curbuf->b_ml.ml_flags & ML_EMPTY) {
EMSG(_(e_emptybuf));
- else {
+ } else {
for (; !got_int; os_breakcheck()) {
print_line(eap->line1,
- (eap->cmdidx == CMD_number || eap->cmdidx == CMD_pound
- || (eap->flags & EXFLAG_NR)),
- eap->cmdidx == CMD_list || (eap->flags & EXFLAG_LIST));
- if (++eap->line1 > eap->line2)
+ (eap->cmdidx == CMD_number || eap->cmdidx == CMD_pound
+ || (eap->flags & EXFLAG_NR)),
+ eap->cmdidx == CMD_list || (eap->flags & EXFLAG_LIST));
+ if (++eap->line1 > eap->line2) {
break;
- ui_flush(); /* show one line at a time */
+ }
+ ui_flush(); // show one line at a time
}
setpcmark();
- /* put cursor at last line */
+ // put cursor at last line
curwin->w_cursor.lnum = eap->line2;
beginline(BL_SOL | BL_FIX);
}
@@ -6872,15 +7005,16 @@ void alist_expand(int *fnum_list, int fnum_len)
* can't set the options. */
p_su = empty_option;
old_arg_files = xmalloc(sizeof(*old_arg_files) * GARGCOUNT);
- for (i = 0; i < GARGCOUNT; ++i)
+ for (i = 0; i < GARGCOUNT; ++i) {
old_arg_files[i] = vim_strsave(GARGLIST[i].ae_fname);
+ }
old_arg_count = GARGCOUNT;
if (expand_wildcards(old_arg_count, old_arg_files,
- &new_arg_file_count, &new_arg_files,
- EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
+ &new_arg_file_count, &new_arg_files,
+ EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
&& new_arg_file_count > 0) {
alist_set(&global_alist, new_arg_file_count, new_arg_files,
- TRUE, fnum_list, fnum_len);
+ TRUE, fnum_list, fnum_len);
FreeWild(old_arg_count, old_arg_files);
}
p_su = save_p_su;
@@ -6909,15 +7043,17 @@ void alist_set(alist_T *al, int count, char_u **files, int use_curbuf, int *fnum
if (got_int) {
/* When adding many buffers this can take a long time. Allow
* interrupting here. */
- while (i < count)
+ while (i < count) {
xfree(files[i++]);
+ }
break;
}
/* May set buffer name of a buffer previously used for the
* argument list, so that it's re-used by alist_add. */
- if (fnum_list != NULL && i < fnum_len)
+ if (fnum_list != NULL && i < fnum_len) {
buf_set_name(fnum_list[i], files[i]);
+ }
alist_add(al, files[i], use_curbuf ? 2 : 1);
os_breakcheck();
@@ -6931,26 +7067,23 @@ void alist_set(alist_T *al, int count, char_u **files, int use_curbuf, int *fnum
recursive--;
}
-/*
- * Add file "fname" to argument list "al".
- * "fname" must have been allocated and "al" must have been checked for room.
- */
-void
-alist_add(
- alist_T *al,
- char_u *fname,
- int set_fnum /* 1: set buffer number; 2: re-use curbuf */
-)
-{
- if (fname == NULL) /* don't add NULL file names */
+/// Add file "fname" to argument list "al".
+/// "fname" must have been allocated and "al" must have been checked for room.
+///
+/// @param set_fnum 1: set buffer number; 2: re-use curbuf
+void alist_add(alist_T *al, char_u *fname, int set_fnum)
+{
+ if (fname == NULL) { // don't add NULL file names
return;
+ }
#ifdef BACKSLASH_IN_FILENAME
slash_adjust(fname);
#endif
AARGLIST(al)[al->al_ga.ga_len].ae_fname = fname;
- if (set_fnum > 0)
+ if (set_fnum > 0) {
AARGLIST(al)[al->al_ga.ga_len].ae_fnum =
buflist_add(fname, BLN_LISTED | (set_fnum == 2 ? BLN_CURBUF : 0));
+ }
++al->al_ga.ga_len;
}
@@ -6992,9 +7125,9 @@ static void ex_recover(exarg_T *eap)
// Set recoverymode right away to avoid the ATTENTION prompt.
recoverymode = true;
if (!check_changed(curbuf, (p_awa ? CCGD_AW : 0)
- | CCGD_MULTWIN
- | (eap->forceit ? CCGD_FORCEIT : 0)
- | CCGD_EXCMD)
+ | CCGD_MULTWIN
+ | (eap->forceit ? CCGD_FORCEIT : 0)
+ | CCGD_EXCMD)
&& (*eap->arg == NUL
|| setfname(curbuf, eap->arg, NULL, true) == OK)) {
@@ -7012,40 +7145,43 @@ static void ex_wrongmodifier(exarg_T *eap)
}
/*
- * :sview [+command] file split window with new file, read-only
- * :split [[+command] file] split window with current or new file
- * :vsplit [[+command] file] split window vertically with current or new file
- * :new [[+command] file] split window with no or new file
- * :vnew [[+command] file] split vertically window with no or new file
- * :sfind [+command] file split window with file in 'path'
+ * :sview [+command] file split window with new file, read-only
+ * :split [[+command] file] split window with current or new file
+ * :vsplit [[+command] file] split window vertically with current or new file
+ * :new [[+command] file] split window with no or new file
+ * :vnew [[+command] file] split vertically window with no or new file
+ * :sfind [+command] file split window with file in 'path'
*
- * :tabedit open new Tab page with empty window
- * :tabedit [+command] file open new Tab page and edit "file"
- * :tabnew [[+command] file] just like :tabedit
- * :tabfind [+command] file open new Tab page and find "file"
+ * :tabedit open new Tab page with empty window
+ * :tabedit [+command] file open new Tab page and edit "file"
+ * :tabnew [[+command] file] just like :tabedit
+ * :tabfind [+command] file open new Tab page and find "file"
*/
void ex_splitview(exarg_T *eap)
{
win_T *old_curwin = curwin;
char_u *fname = NULL;
const bool use_tab = eap->cmdidx == CMD_tabedit
- || eap->cmdidx == CMD_tabfind
- || eap->cmdidx == CMD_tabnew;
+ || eap->cmdidx == CMD_tabfind
+ || eap->cmdidx == CMD_tabnew;
/* A ":split" in the quickfix window works like ":new". Don't want two
* quickfix windows. But it's OK when doing ":tab split". */
if (bt_quickfix(curbuf) && cmdmod.tab == 0) {
- if (eap->cmdidx == CMD_split)
+ if (eap->cmdidx == CMD_split) {
eap->cmdidx = CMD_new;
- if (eap->cmdidx == CMD_vsplit)
+ }
+ if (eap->cmdidx == CMD_vsplit) {
eap->cmdidx = CMD_vnew;
+ }
}
if (eap->cmdidx == CMD_sfind || eap->cmdidx == CMD_tabfind) {
fname = find_file_in_path(eap->arg, STRLEN(eap->arg),
FNAME_MESS, TRUE, curbuf->b_ffname);
- if (fname == NULL)
+ if (fname == NULL) {
goto theend;
+ }
eap->arg = fname;
}
@@ -7058,15 +7194,16 @@ void ex_splitview(exarg_T *eap)
do_exedit(eap, old_curwin);
apply_autocmds(EVENT_TABNEWENTERED, NULL, NULL, FALSE, curbuf);
- /* set the alternate buffer for the window we came from */
+ // set the alternate buffer for the window we came from
if (curwin != old_curwin
&& win_valid(old_curwin)
&& old_curwin->w_buffer != curbuf
- && !cmdmod.keepalt)
+ && !cmdmod.keepalt) {
old_curwin->w_alt_fnum = curbuf->b_fnum;
+ }
}
} else if (win_split(eap->addr_count > 0 ? (int)eap->line2 : 0,
- *eap->cmd == 'v' ? WSP_VERT : 0) != FAIL) {
+ *eap->cmd == 'v' ? WSP_VERT : 0) != FAIL) {
/* Reset 'scrollbind' when editing another file, but keep it when
* doing ":split" without arguments. */
if (*eap->arg != NUL
@@ -7173,7 +7310,7 @@ static void ex_tabs(exarg_T *eap)
FOR_ALL_TABS(tp) {
if (got_int) {
- break;
+ break;
}
msg_putchar('\n');
@@ -7192,13 +7329,14 @@ static void ex_tabs(exarg_T *eap)
msg_putchar(' ');
msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
msg_putchar(' ');
- if (buf_spname(wp->w_buffer) != NULL)
+ if (buf_spname(wp->w_buffer) != NULL) {
STRLCPY(IObuff, buf_spname(wp->w_buffer), IOSIZE);
- else
+ } else {
home_replace(wp->w_buffer, wp->w_buffer->b_fname,
- IObuff, IOSIZE, TRUE);
+ IObuff, IOSIZE, TRUE);
+ }
msg_outtrans(IObuff);
- ui_flush(); /* output one line at a time */
+ ui_flush(); // output one line at a time
os_breakcheck();
}
}
@@ -7230,8 +7368,9 @@ static void ex_resize(exarg_T *eap)
if (eap->addr_count > 0) {
n = eap->line2;
- for (wp = firstwin; wp->w_next != NULL && --n > 0; wp = wp->w_next)
+ for (wp = firstwin; wp->w_next != NULL && --n > 0; wp = wp->w_next) {
;
+ }
}
n = atol((char *)eap->arg);
@@ -7285,14 +7424,10 @@ static void ex_edit(exarg_T *eap)
do_exedit(eap, NULL);
}
-/*
- * ":edit <file>" command and alikes.
- */
-void
-do_exedit(
- exarg_T *eap,
- win_T *old_curwin /* curwin before doing a split or NULL */
-)
+/// ":edit <file>" command and alikes.
+///
+/// @param old_curwin curwin before doing a split or NULL
+void do_exedit(exarg_T *eap, win_T *old_curwin)
{
int n;
int need_hide;
@@ -7305,7 +7440,7 @@ do_exedit(
exmode_active = false;
ex_pressedreturn = false;
if (*eap->arg == NUL) {
- /* Special case: ":global/pat/visual\NLvi-commands" */
+ // Special case: ":global/pat/visual\NLvi-commands"
if (global_busy) {
int rd = RedrawingDisabled;
int nwr = no_wait_return;
@@ -7337,11 +7472,11 @@ do_exedit(
|| eap->cmdidx == CMD_tabedit
|| eap->cmdidx == CMD_vnew
) && *eap->arg == NUL) {
- /* ":new" or ":tabnew" without argument: edit an new empty buffer */
+ // ":new" or ":tabnew" without argument: edit an new empty buffer
setpcmark();
(void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
- ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0),
- old_curwin == NULL ? curwin : NULL);
+ ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0),
+ old_curwin == NULL ? curwin : NULL);
} else if ((eap->cmdidx != CMD_split && eap->cmdidx != CMD_vsplit)
|| *eap->arg != NUL) {
// Can't edit another file when "curbuf->b_ro_lockec" is set. Only ":edit"
@@ -7394,12 +7529,14 @@ do_exedit(
}
readonlymode = n;
} else {
- if (eap->do_ecmd_cmd != NULL)
+ if (eap->do_ecmd_cmd != NULL) {
do_cmdline_cmd((char *)eap->do_ecmd_cmd);
+ }
n = curwin->w_arg_idx_invalid;
check_arg_idx(curwin);
- if (n != curwin->w_arg_idx_invalid)
+ if (n != curwin->w_arg_idx_invalid) {
maketitle();
+ }
}
/*
@@ -7411,8 +7548,9 @@ do_exedit(
&& curwin != old_curwin
&& win_valid(old_curwin)
&& old_curwin->w_buffer != curbuf
- && !cmdmod.keepalt)
+ && !cmdmod.keepalt) {
old_curwin->w_alt_fnum = curbuf->b_fnum;
+ }
ex_no_reprint = true;
}
@@ -7427,10 +7565,11 @@ static void ex_nogui(exarg_T *eap)
static void ex_swapname(exarg_T *eap)
{
- if (curbuf->b_ml.ml_mfp == NULL || curbuf->b_ml.ml_mfp->mf_fname == NULL)
+ if (curbuf->b_ml.ml_mfp == NULL || curbuf->b_ml.ml_mfp->mf_fname == NULL) {
MSG(_("No swap file"));
- else
+ } else {
msg(curbuf->b_ml.ml_mfp->mf_fname);
+ }
}
/*
@@ -7477,10 +7616,11 @@ static void ex_syncbind(exarg_T *eap)
if (curwin->w_p_scb) {
curbuf = curwin->w_buffer;
y = topline - curwin->w_topline;
- if (y > 0)
+ if (y > 0) {
scrollup(y, TRUE);
- else
+ } else {
scrolldown(-y, TRUE);
+ }
curwin->w_scbind_pos = topline;
redraw_later(curwin, VALID);
cursor_correct();
@@ -7521,13 +7661,13 @@ static void ex_read(exarg_T *eap)
return;
}
i = readfile(curbuf->b_ffname, curbuf->b_fname,
- eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
+ eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
} else {
- if (vim_strchr(p_cpo, CPO_ALTREAD) != NULL)
+ if (vim_strchr(p_cpo, CPO_ALTREAD) != NULL) {
(void)setaltfname(eap->arg, eap->arg, (linenr_T)1);
+ }
i = readfile(eap->arg, NULL,
- eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
-
+ eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
}
if (i != OK) {
if (!aborting()) {
@@ -7537,10 +7677,11 @@ static void ex_read(exarg_T *eap)
if (empty && exmode_active) {
/* Delete the empty line that remains. Historically ex does
* this but vi doesn't. */
- if (eap->line2 == 0)
+ if (eap->line2 == 0) {
lnum = curbuf->b_ml.ml_line_count;
- else
+ } else {
lnum = 1;
+ }
if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK) {
ml_delete(lnum, false);
if (curwin->w_cursor.lnum > 1
@@ -7620,16 +7761,17 @@ void ex_cd(exarg_T *eap)
new_dir = eap->arg;
#if !defined(UNIX)
- /* for non-UNIX ":cd" means: print current directory */
- if (*new_dir == NUL)
+ // for non-UNIX ":cd" means: print current directory
+ if (*new_dir == NUL) {
ex_pwd(NULL);
- else
+ } else
#endif
{
- if (allbuf_locked())
+ if (allbuf_locked()) {
return;
+ }
- /* ":cd -": Change to previous directory */
+ // ":cd -": Change to previous directory
if (STRCMP(new_dir, "-") == 0) {
if (prev_dir == NULL) {
EMSG(_("E186: No previous directory"));
@@ -7638,12 +7780,13 @@ void ex_cd(exarg_T *eap)
new_dir = prev_dir;
}
- /* Save current directory for next ":cd -" */
+ // Save current directory for next ":cd -"
tofree = prev_dir;
- if (os_dirname(NameBuff, MAXPATHL) == OK)
+ if (os_dirname(NameBuff, MAXPATHL) == OK) {
prev_dir = vim_strsave(NameBuff);
- else
+ } else {
prev_dir = NULL;
+ }
#if defined(UNIX)
// On Unix ":cd" means: go to home directory.
@@ -7692,8 +7835,9 @@ static void ex_pwd(exarg_T *eap)
slash_adjust(NameBuff);
#endif
msg(NameBuff);
- } else
+ } else {
EMSG(_("E187: Unknown"));
+ }
}
/*
@@ -7712,15 +7856,19 @@ static void ex_sleep(exarg_T *eap)
if (cursor_valid()) {
n = curwin->w_winrow + curwin->w_wrow - msg_scrolled;
- if (n >= 0)
+ if (n >= 0) {
ui_cursor_goto(n, curwin->w_wincol + curwin->w_wcol);
+ }
}
len = eap->line2;
switch (*eap->arg) {
- case 'm': break;
- case NUL: len *= 1000L; break;
- default: EMSG2(_(e_invarg2), eap->arg); return;
+ case 'm':
+ break;
+ case NUL:
+ len *= 1000L; break;
+ default:
+ EMSG2(_(e_invarg2), eap->arg); return;
}
do_sleep(len);
}
@@ -7753,10 +7901,12 @@ static void do_exmap(exarg_T *eap, int isabbrev)
mode = get_map_mode(&cmdp, eap->forceit || isabbrev);
switch (do_map((*cmdp == 'n') ? 2 : (*cmdp == 'u'),
- eap->arg, mode, isabbrev)) {
- case 1: EMSG(_(e_invarg));
+ eap->arg, mode, isabbrev)) {
+ case 1:
+ EMSG(_(e_invarg));
break;
- case 2: EMSG(isabbrev ? _(e_noabbr) : _(e_nomap));
+ case 2:
+ EMSG(isabbrev ? _(e_noabbr) : _(e_nomap));
break;
}
}
@@ -7789,22 +7939,23 @@ static void ex_wincmd(exarg_T *eap)
char_u *p;
if (*eap->arg == 'g' || *eap->arg == Ctrl_G) {
- /* CTRL-W g and CTRL-W CTRL-G have an extra command character */
+ // CTRL-W g and CTRL-W CTRL-G have an extra command character
if (eap->arg[1] == NUL) {
EMSG(_(e_invarg));
return;
}
xchar = eap->arg[1];
p = eap->arg + 2;
- } else
+ } else {
p = eap->arg + 1;
+ }
eap->nextcmd = check_nextcmd(p);
p = skipwhite(p);
- if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
+ if (*p != NUL && *p != '"' && eap->nextcmd == NULL) {
EMSG(_(e_invarg));
- else if (!eap->skip) {
- /* Pass flags on for ":vertical wincmd ]". */
+ } else if (!eap->skip) {
+ // Pass flags on for ":vertical wincmd ]".
postponed_split_flags = cmdmod.split;
postponed_split_tab = cmdmod.tab;
do_window(*eap->arg, eap->addr_count > 0 ? eap->line2 : 0L, xchar);
@@ -7833,8 +7984,9 @@ static void ex_operators(exarg_T *eap)
beginline(BL_SOL | BL_FIX);
}
- if (VIsual_active)
+ if (VIsual_active) {
end_visual_mode();
+ }
switch (eap->cmdidx) {
case CMD_delete:
@@ -7847,13 +7999,14 @@ static void ex_operators(exarg_T *eap)
(void)op_yank(&oa, true, false);
break;
- default: /* CMD_rshift or CMD_lshift */
+ default: // CMD_rshift or CMD_lshift
if (
- (eap->cmdidx == CMD_rshift) ^ curwin->w_p_rl
- )
+ (eap->cmdidx == CMD_rshift) ^ curwin->w_p_rl
+ ) {
oa.op_type = OP_RSHIFT;
- else
+ } else {
oa.op_type = OP_LSHIFT;
+ }
op_shift(&oa, FALSE, eap->amount);
break;
}
@@ -7866,7 +8019,7 @@ static void ex_operators(exarg_T *eap)
*/
static void ex_put(exarg_T *eap)
{
- /* ":0put" works like ":1put!". */
+ // ":0put" works like ":1put!".
if (eap->line2 == 0) {
eap->line2 = 1;
eap->forceit = TRUE;
@@ -7897,10 +8050,12 @@ static void ex_copymove(exarg_T *eap)
}
if (eap->cmdidx == CMD_move) {
- if (do_move(eap->line1, eap->line2, n) == FAIL)
+ if (do_move(eap->line1, eap->line2, n) == FAIL) {
return;
- } else
+ }
+ } else {
ex_copy(eap->line1, eap->line2, n);
+ }
u_clearline();
beginline(BL_SOL | BL_FIX);
ex_may_print(eap);
@@ -7935,8 +8090,9 @@ static void ex_join(exarg_T *eap)
{
curwin->w_cursor.lnum = eap->line1;
if (eap->line1 == eap->line2) {
- if (eap->addr_count >= 2) /* :2,2join does nothing */
+ if (eap->addr_count >= 2) { // :2,2join does nothing
return;
+ }
if (eap->line2 == curbuf->b_ml.ml_line_count) {
beep_flush();
return;
@@ -7964,7 +8120,7 @@ static void ex_at(exarg_T *eap)
c = '@';
}
- /* Put the register in the typeahead buffer with the "silent" flag. */
+ // Put the register in the typeahead buffer with the "silent" flag.
if (do_execreg(c, TRUE, vim_strchr(p_cpo, CPO_EXECBUF) != NULL, TRUE)
== FAIL) {
beep_flush();
@@ -7978,8 +8134,9 @@ static void ex_at(exarg_T *eap)
* Continue until the stuff buffer is empty and all added characters
* have been consumed.
*/
- while (!stuff_empty() || typebuf.tb_len > prev_len)
+ while (!stuff_empty() || typebuf.tb_len > prev_len) {
(void)do_cmdline(NULL, getexline, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
+ }
exec_from_reg = save_efr;
}
@@ -8040,11 +8197,16 @@ static void ex_later(exarg_T *eap)
} else if (isdigit(*p)) {
count = getdigits_long(&p, false, 0);
switch (*p) {
- case 's': ++p; sec = true; break;
- case 'm': ++p; sec = true; count *= 60; break;
- case 'h': ++p; sec = true; count *= 60 * 60; break;
- case 'd': ++p; sec = true; count *= 24 * 60 * 60; break;
- case 'f': ++p; file = true; break;
+ case 's':
+ ++p; sec = true; break;
+ case 'm':
+ ++p; sec = true; count *= 60; break;
+ case 'h':
+ ++p; sec = true; count *= 60 * 60; break;
+ case 'd':
+ ++p; sec = true; count *= 24 * 60 * 60; break;
+ case 'f':
+ ++p; file = true; break;
}
}
@@ -8065,39 +8227,42 @@ static void ex_redir(exarg_T *eap)
char_u *fname;
char_u *arg = eap->arg;
- if (STRICMP(eap->arg, "END") == 0)
+ if (STRICMP(eap->arg, "END") == 0) {
close_redir();
- else {
+ } else {
if (*arg == '>') {
++arg;
if (*arg == '>') {
++arg;
mode = "a";
- } else
+ } else {
mode = "w";
+ }
arg = skipwhite(arg);
close_redir();
- /* Expand environment variables and "~/". */
+ // Expand environment variables and "~/".
fname = expand_env_save(arg);
- if (fname == NULL)
+ if (fname == NULL) {
return;
+ }
redir_fd = open_exfile(fname, eap->forceit, mode);
xfree(fname);
} else if (*arg == '@') {
- /* redirect to a register a-z (resp. A-Z for appending) */
+ // redirect to a register a-z (resp. A-Z for appending)
close_redir();
++arg;
if (valid_yank_reg(*arg, true) && *arg != '_') {
redir_reg = *arg++;
- if (*arg == '>' && arg[1] == '>') /* append */
+ if (*arg == '>' && arg[1] == '>') { // append
arg += 2;
- else {
- /* Can use both "@a" and "@a>". */
- if (*arg == '>')
+ } else {
+ // Can use both "@a" and "@a>".
+ if (*arg == '>') {
arg++;
+ }
// Make register empty when not using @A-@Z and the
// command is valid.
if (*arg == NUL && !isupper(redir_reg)) {
@@ -8112,30 +8277,33 @@ static void ex_redir(exarg_T *eap)
} else if (*arg == '=' && arg[1] == '>') {
int append;
- /* redirect to a variable */
+ // redirect to a variable
close_redir();
arg += 2;
if (*arg == '>') {
++arg;
append = TRUE;
- } else
+ } else {
append = FALSE;
+ }
- if (var_redir_start(skipwhite(arg), append) == OK)
+ if (var_redir_start(skipwhite(arg), append) == OK) {
redir_vname = 1;
+ }
}
- /* TODO: redirect to a buffer */
- else
+ // TODO: redirect to a buffer
+ else {
EMSG2(_(e_invarg2), eap->arg);
+ }
}
/* Make sure redirection is not off. Can happen for cmdline completion
* that indirectly invokes a command to catch its output. */
if (redir_fd != NULL
- || redir_reg || redir_vname
- )
+ || redir_reg || redir_vname) {
redir_off = false;
+ }
}
/// ":redraw": force redraw
@@ -8155,7 +8323,7 @@ static void ex_redraw(exarg_T *eap)
redraw_all_later(NOT_VALID);
}
update_screen(eap->forceit ? NOT_VALID
- : VIsual_active ? INVERTED : 0);
+ : VIsual_active ? INVERTED : 0);
if (need_maketitle) {
maketitle();
}
@@ -8183,13 +8351,13 @@ static void ex_redrawstatus(exarg_T *eap)
RedrawingDisabled = 0;
p_lz = FALSE;
- if (eap->forceit)
+ if (eap->forceit) {
status_redraw_all();
- else
+ } else {
status_redraw_curbuf();
- update_screen(
- VIsual_active ? INVERTED :
- 0);
+ }
+ update_screen(VIsual_active ? INVERTED :
+ 0);
RedrawingDisabled = r;
p_lz = p;
ui_flush();
@@ -8241,21 +8409,17 @@ int vim_mkdir_emsg(const char *const name, const int prot)
return OK;
}
-/*
- * Open a file for writing for an Ex command, with some checks.
- * Return file descriptor, or NULL on failure.
- */
-FILE *
-open_exfile (
- char_u *fname,
- int forceit,
- char *mode /* "w" for create new file or "a" for append */
-)
+/// Open a file for writing for an Ex command, with some checks.
+///
+/// @param mode "w" for create new file or "a" for append
+///
+/// @return file descriptor, or NULL on failure.
+FILE *open_exfile(char_u *fname, int forceit, char *mode)
{
FILE *fd;
#ifdef UNIX
- /* with Unix it is possible to open a directory */
+ // with Unix it is possible to open a directory
if (os_isdir(fname)) {
EMSG2(_(e_isadir2), fname);
return NULL;
@@ -8280,17 +8444,18 @@ static void ex_mark(exarg_T *eap)
{
pos_T pos;
- if (*eap->arg == NUL) /* No argument? */
+ if (*eap->arg == NUL) { // No argument?
EMSG(_(e_argreq));
- else if (eap->arg[1] != NUL) /* more than one character? */
+ } else if (eap->arg[1] != NUL) { // more than one character?
EMSG(_(e_trailing));
- else {
- pos = curwin->w_cursor; /* save curwin->w_cursor */
+ } else {
+ pos = curwin->w_cursor; // save curwin->w_cursor
curwin->w_cursor.lnum = eap->line2;
beginline(BL_WHITE | BL_FIX);
- if (setmark(*eap->arg) == FAIL) /* set mark */
+ if (setmark(*eap->arg) == FAIL) { // set mark
EMSG(_("E191: Argument must be a letter or forward/backward quote"));
- curwin->w_cursor = pos; /* restore curwin->w_cursor */
+ }
+ curwin->w_cursor = pos; // restore curwin->w_cursor
}
}
@@ -8389,12 +8554,14 @@ static void ex_normal(exarg_T *eap)
{
int len = 0;
- /* Count the number of characters to be escaped. */
+ // Count the number of characters to be escaped.
for (p = eap->arg; *p != NUL; ++p) {
- for (l = (*mb_ptr2len)(p) - 1; l > 0; --l)
- if (*++p == K_SPECIAL /* trailbyte K_SPECIAL or CSI */
- )
+ for (l = (*mb_ptr2len)(p) - 1; l > 0; --l) {
+ if (*++p == K_SPECIAL // trailbyte K_SPECIAL or CSI
+ ) {
len += 2;
+ }
+ }
}
if (len > 0) {
arg = xmalloc(STRLEN(eap->arg) + len + 1);
@@ -8430,7 +8597,7 @@ static void ex_normal(exarg_T *eap)
} while (eap->addr_count > 0 && eap->line1 <= eap->line2 && !got_int);
}
- /* Might not return to the main loop when in an event handler. */
+ // Might not return to the main loop when in an event handler.
update_topline_cursor();
restore_current_state(&save_state);
@@ -8461,16 +8628,18 @@ static void ex_startinsert(exarg_T *eap)
return;
}
- if (eap->cmdidx == CMD_startinsert)
+ if (eap->cmdidx == CMD_startinsert) {
restart_edit = 'a';
- else if (eap->cmdidx == CMD_startreplace)
+ } else if (eap->cmdidx == CMD_startreplace) {
restart_edit = 'R';
- else
+ } else {
restart_edit = 'V';
+ }
if (!eap->forceit) {
- if (eap->cmdidx == CMD_startinsert)
+ if (eap->cmdidx == CMD_startinsert) {
restart_edit = 'i';
+ }
curwin->w_curswant = 0; // avoid MAXCOL
}
@@ -8543,19 +8712,20 @@ static void ex_findpat(exarg_T *eap)
int action;
switch (cmdnames[eap->cmdidx].cmd_name[2]) {
- case 'e': /* ":psearch", ":isearch" and ":dsearch" */
- if (cmdnames[eap->cmdidx].cmd_name[0] == 'p')
+ case 'e': // ":psearch", ":isearch" and ":dsearch"
+ if (cmdnames[eap->cmdidx].cmd_name[0] == 'p') {
action = ACTION_GOTO;
- else
+ } else {
action = ACTION_SHOW;
+ }
break;
- case 'i': /* ":ilist" and ":dlist" */
+ case 'i': // ":ilist" and ":dlist"
action = ACTION_SHOW_ALL;
break;
- case 'u': /* ":ijump" and ":djump" */
+ case 'u': // ":ijump" and ":djump"
action = ACTION_GOTO;
break;
- default: /* ":isplit" and ":dsplit" */
+ default: // ":isplit" and ":dsplit"
action = ACTION_SPLIT;
break;
}
@@ -8581,10 +8751,11 @@ static void ex_findpat(exarg_T *eap)
}
}
}
- if (!eap->skip)
+ if (!eap->skip) {
find_pattern_in_path(eap->arg, 0, STRLEN(eap->arg), whole, !eap->forceit,
*eap->cmd == 'd' ? FIND_DEFINE : FIND_ANY,
n, action, eap->line1, eap->line2);
+ }
}
@@ -8593,7 +8764,7 @@ static void ex_findpat(exarg_T *eap)
*/
static void ex_ptag(exarg_T *eap)
{
- g_do_tagpreview = p_pvh; /* will be reset to 0 in ex_tag_cmd() */
+ g_do_tagpreview = p_pvh; // will be reset to 0 in ex_tag_cmd()
ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
}
@@ -8646,21 +8817,28 @@ static void ex_tag_cmd(exarg_T *eap, char_u *name)
int cmd;
switch (name[1]) {
- case 'j': cmd = DT_JUMP; // ":tjump"
+ case 'j':
+ cmd = DT_JUMP; // ":tjump"
break;
- case 's': cmd = DT_SELECT; // ":tselect"
+ case 's':
+ cmd = DT_SELECT; // ":tselect"
break;
case 'p': // ":tprevious"
- case 'N': cmd = DT_PREV; // ":tNext"
+ case 'N':
+ cmd = DT_PREV; // ":tNext"
break;
- case 'n': cmd = DT_NEXT; // ":tnext"
+ case 'n':
+ cmd = DT_NEXT; // ":tnext"
break;
- case 'o': cmd = DT_POP; // ":pop"
+ case 'o':
+ cmd = DT_POP; // ":pop"
break;
case 'f': // ":tfirst"
- case 'r': cmd = DT_FIRST; // ":trewind"
+ case 'r':
+ cmd = DT_FIRST; // ":trewind"
break;
- case 'l': cmd = DT_LAST; // ":tlast"
+ case 'l':
+ cmd = DT_LAST; // ":tlast"
break;
default: // ":tag"
if (p_cst && *eap->arg != NUL) {
@@ -8676,7 +8854,7 @@ static void ex_tag_cmd(exarg_T *eap, char_u *name)
}
do_tag(eap->arg, cmd, eap->addr_count > 0 ? (int)eap->line2 : 1,
- eap->forceit, TRUE);
+ eap->forceit, TRUE);
}
enum {
@@ -8735,37 +8913,35 @@ ssize_t find_cmdline_var(const char_u *src, size_t *usedlen)
return -1;
}
-/*
- * Evaluate cmdline variables.
- *
- * change '%' to curbuf->b_ffname
- * '#' to curwin->w_alt_fnum
- * '<cword>' to word under the cursor
- * '<cWORD>' to WORD under the cursor
- * '<cexpr>' to C-expression under the cursor
- * '<cfile>' to path name under the cursor
- * '<sfile>' to sourced file name
- * '<slnum>' to sourced file line number
- * '<afile>' to file name for autocommand
- * '<abuf>' to buffer number for autocommand
- * '<amatch>' to matching name for autocommand
- *
- * When an error is detected, "errormsg" is set to a non-NULL pointer (may be
- * "" for error without a message) and NULL is returned.
- * Returns 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, /* pointer into commandline */
- char_u *srcstart, /* beginning of valid memory for src */
- size_t *usedlen, /* characters after src that are used */
- linenr_T *lnump, /* line number for :e command, or NULL */
- char_u **errormsg, /* pointer to error message */
- int *escaped /* return value has escaped white space (can
- * be NULL) */
-)
+/// Evaluate cmdline variables.
+///
+/// change '%' to curbuf->b_ffname
+/// '#' to curwin->w_alt_fnum
+/// '<cword>' to word under the cursor
+/// '<cWORD>' to WORD under the cursor
+/// '<cexpr>' to C-expression under the cursor
+/// '<cfile>' to path name under the cursor
+/// '<sfile>' to sourced file name
+/// '<slnum>' to sourced file line number
+/// '<afile>' to file name for autocommand
+/// '<abuf>' to buffer number for autocommand
+/// '<amatch>' to matching name for autocommand
+///
+/// When an error is detected, "errormsg" is set to a non-NULL pointer (may be
+/// "" for error without a message) and NULL is returned.
+///
+/// @param src pointer into commandline
+/// @param srcstart beginning of valid memory for src
+/// @param usedlen characters after src that are used
+/// @param lnump line number for :e command, or NULL
+/// @param errormsg pointer to error message
+/// @param escaped return value has escaped white space (can be NULL)
+///
+/// @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_u **errormsg, int *escaped)
{
int i;
char_u *s;
@@ -8779,14 +8955,15 @@ eval_vars (
char strbuf[30];
*errormsg = NULL;
- if (escaped != NULL)
+ if (escaped != NULL) {
*escaped = FALSE;
+ }
/*
* Check if there is something to do.
*/
ssize_t spec_idx = find_cmdline_var(src, usedlen);
- if (spec_idx < 0) { /* no match */
+ if (spec_idx < 0) { // no match
*usedlen = 1;
return NULL;
}
@@ -8797,7 +8974,7 @@ eval_vars (
*/
if (src > srcstart && src[-1] == '\\') {
*usedlen = 0;
- STRMOVE(src - 1, src); /* remove backslash */
+ STRMOVE(src - 1, src); // remove backslash
return NULL;
}
@@ -8807,9 +8984,8 @@ eval_vars (
if (spec_idx == SPEC_CWORD
|| spec_idx == SPEC_CCWORD
|| spec_idx == SPEC_CEXPR) {
- resultlen = find_ident_under_cursor(
- &result,
- spec_idx == SPEC_CWORD
+ resultlen = find_ident_under_cursor(&result,
+ spec_idx == SPEC_CWORD
? (FIND_IDENT | FIND_STRING)
: (spec_idx == SPEC_CEXPR
? (FIND_IDENT | FIND_STRING | FIND_EVAL)
@@ -8818,13 +8994,13 @@ eval_vars (
*errormsg = (char_u *)"";
return NULL;
}
- //
- // '#': Alternate file name
- // '%': Current file name
- // File name under the cursor
- // File name for autocommand
- // and following modifiers
- //
+ //
+ // '#': Alternate file name
+ // '%': Current file name
+ // File name under the cursor
+ // File name for autocommand
+ // and following modifiers
+ //
} else {
switch (spec_idx) {
case SPEC_PERC: // '%': current file
@@ -8837,13 +9013,14 @@ eval_vars (
}
break;
- case SPEC_HASH: /* '#' or "#99": alternate file */
- if (src[1] == '#') { /* "##": the argument list */
+ case SPEC_HASH: // '#' or "#99": alternate file
+ if (src[1] == '#') { // "##": the argument list
result = arg_all();
resultbuf = result;
*usedlen = 2;
- if (escaped != NULL)
+ if (escaped != NULL) {
*escaped = TRUE;
+ }
skip_mod = TRUE;
break;
}
@@ -8860,7 +9037,7 @@ eval_vars (
if (src[1] == '<' && i != 0) {
if (*usedlen < 2) {
- /* Should we give an error message for #<text? */
+ // Should we give an error message for #<text?
*usedlen = 1;
return NULL;
}
@@ -8876,12 +9053,12 @@ eval_vars (
}
buf = buflist_findnr(i);
if (buf == NULL) {
- *errormsg = (char_u *)_(
- "E194: No alternate file name to substitute for '#'");
+ *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
return NULL;
}
- if (lnump != NULL)
+ if (lnump != NULL) {
*lnump = ECMD_LAST;
+ }
if (buf->b_fname == NULL) {
result = (char_u *)"";
valid = 0; // Must have ":p:h" to be valid
@@ -8892,13 +9069,13 @@ eval_vars (
}
break;
- case SPEC_CFILE: /* file name under cursor */
+ case SPEC_CFILE: // file name under cursor
result = file_name_at_cursor(FNAME_MESS|FNAME_HYP, 1L, NULL);
if (result == NULL) {
*errormsg = (char_u *)"";
return NULL;
}
- resultbuf = result; /* remember allocated string */
+ resultbuf = result; // remember allocated string
break;
case SPEC_AFILE: // file name for autocommand
@@ -8915,37 +9092,33 @@ eval_vars (
}
result = autocmd_fname;
if (result == NULL) {
- *errormsg = (char_u *)_(
- "E495: no autocommand file name to substitute for \"<afile>\"");
+ *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"<afile>\"");
return NULL;
}
result = path_try_shorten_fname(result);
break;
- case SPEC_ABUF: /* buffer number for autocommand */
+ case SPEC_ABUF: // buffer number for autocommand
if (autocmd_bufnr <= 0) {
- *errormsg = (char_u *)_(
- "E496: no autocommand buffer number to substitute for \"<abuf>\"");
+ *errormsg = (char_u *)_("E496: no autocommand buffer number to substitute for \"<abuf>\"");
return NULL;
}
snprintf(strbuf, sizeof(strbuf), "%d", autocmd_bufnr);
result = (char_u *)strbuf;
break;
- case SPEC_AMATCH: /* match name for autocommand */
+ case SPEC_AMATCH: // match name for autocommand
result = autocmd_match;
if (result == NULL) {
- *errormsg = (char_u *)_(
- "E497: no autocommand match name to substitute for \"<amatch>\"");
+ *errormsg = (char_u *)_("E497: no autocommand match name to substitute for \"<amatch>\"");
return NULL;
}
break;
- case SPEC_SFILE: /* file name for ":so" command */
+ case SPEC_SFILE: // file name for ":so" command
result = sourcing_name;
if (result == NULL) {
- *errormsg = (char_u *)_(
- "E498: no :source file name to substitute for \"<sfile>\"");
+ *errormsg = (char_u *)_("E498: no :source file name to substitute for \"<sfile>\"");
return NULL;
}
break;
@@ -9005,15 +9178,16 @@ eval_vars (
}
if (resultlen == 0 || valid != VALID_HEAD + VALID_PATH) {
- if (valid != VALID_HEAD + VALID_PATH)
- /* xgettext:no-c-format */
- *errormsg = (char_u *)_(
- "E499: Empty file name for '%' or '#', only works with \":p:h\"");
- else
+ if (valid != VALID_HEAD + VALID_PATH) {
+ // xgettext:no-c-format
+ *errormsg = (char_u *)_("E499: Empty file name for '%' or '#', only works with \":p:h\"");
+ } else {
*errormsg = (char_u *)_("E500: Evaluates to an empty string");
+ }
result = NULL;
- } else
+ } else {
result = vim_strnsave(result, resultlen);
+ }
xfree(resultbuf);
return result;
}
@@ -9043,9 +9217,10 @@ static char_u *arg_all(void)
continue;
}
if (len > 0) {
- /* insert a space in between names */
- if (retval != NULL)
+ // insert a space in between names
+ if (retval != NULL) {
retval[len] = ' ';
+ }
++len;
}
for (; *p != NUL; p++) {
@@ -9067,13 +9242,13 @@ static char_u *arg_all(void)
}
}
- /* second time: break here */
+ // second time: break here
if (retval != NULL) {
retval[len] = NUL;
break;
}
- /* allocate memory */
+ // allocate memory
retval = xmalloc(len + 1);
}
@@ -9098,18 +9273,19 @@ char_u *expand_sfile(char_u *arg)
result = vim_strsave(arg);
for (p = result; *p; ) {
- if (STRNCMP(p, "<sfile>", 7) != 0)
+ if (STRNCMP(p, "<sfile>", 7) != 0) {
++p;
- else {
- /* replace "<sfile>" with the sourced file name, and do ":" stuff */
+ } else {
+ // replace "<sfile>" with the sourced file name, and do ":" stuff
repl = eval_vars(p, result, &srclen, NULL, &errormsg, NULL);
if (errormsg != NULL) {
- if (*errormsg)
+ if (*errormsg) {
emsg(errormsg);
+ }
xfree(result);
return NULL;
}
- if (repl == NULL) { /* no match (cannot happen) */
+ if (repl == NULL) { // no match (cannot happen)
p += srclen;
continue;
}
@@ -9122,7 +9298,7 @@ char_u *expand_sfile(char_u *arg)
xfree(repl);
xfree(result);
result = newres;
- p = newres + len; /* continue after the match */
+ p = newres + len; // continue after the match
}
}
@@ -9137,12 +9313,13 @@ static void ex_shada(exarg_T *eap)
char_u *save_shada;
save_shada = p_shada;
- if (*p_shada == NUL)
+ if (*p_shada == NUL) {
p_shada = (char_u *)"'100";
+ }
if (eap->cmdidx == CMD_rviminfo || eap->cmdidx == CMD_rshada) {
- (void) shada_read_everything((char *) eap->arg, eap->forceit, false);
+ (void)shada_read_everything((char *)eap->arg, eap->forceit, false);
} else {
- shada_write_file((char *) eap->arg, eap->forceit);
+ shada_write_file((char *)eap->arg, eap->forceit);
}
p_shada = save_shada;
}
@@ -9153,8 +9330,9 @@ static void ex_shada(exarg_T *eap)
*/
void dialog_msg(char_u *buff, char *format, char_u *fname)
{
- if (fname == NULL)
+ if (fname == NULL) {
fname = (char_u *)_("Untitled");
+ }
vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
}
@@ -9184,10 +9362,12 @@ static void ex_behave(exarg_T *eap)
*/
char_u *get_behave_arg(expand_T *xp, int idx)
{
- if (idx == 0)
+ if (idx == 0) {
return (char_u *)"mswin";
- if (idx == 1)
+ }
+ if (idx == 1) {
return (char_u *)"xterm";
+ }
return NULL;
}
@@ -9229,7 +9409,7 @@ static void ex_filetype(exarg_T *eap)
bool indent = false;
if (*eap->arg == NUL) {
- /* Print current status. */
+ // Print current status.
smsg("filetype detection:%s plugin:%s indent:%s",
filetype_detect == kTrue ? "ON" : "OFF",
filetype_plugin == kTrue ? (filetype_detect == kTrue ? "ON" : "(on)") : "OFF", // NOLINT(whitespace/line_length)
@@ -9237,7 +9417,7 @@ static void ex_filetype(exarg_T *eap)
return;
}
- /* Accept "plugin" and "indent" in any order. */
+ // Accept "plugin" and "indent" in any order.
for (;; ) {
if (STRNCMP(arg, "plugin", 6) == 0) {
plugin = true;
@@ -9282,8 +9462,9 @@ static void ex_filetype(exarg_T *eap)
source_runtime((char_u *)FTOFF_FILE, DIP_ALL);
filetype_detect = kFalse;
}
- } else
+ } else {
EMSG2(_(e_invarg2), arg);
+ }
}
/// Set all :filetype options ON if user did not explicitly set any to OFF.
@@ -9333,10 +9514,11 @@ static void ex_set(exarg_T *eap)
{
int flags = 0;
- if (eap->cmdidx == CMD_setlocal)
+ if (eap->cmdidx == CMD_setlocal) {
flags = OPT_LOCAL;
- else if (eap->cmdidx == CMD_setglobal)
+ } else if (eap->cmdidx == CMD_setglobal) {
flags = OPT_GLOBAL;
+ }
(void)do_set(eap->arg, flags);
}
@@ -9536,16 +9718,16 @@ bool cmd_can_preview(char_u *cmd)
char_u *end = find_command(&ea, NULL);
switch (ea.cmdidx) {
- case CMD_substitute:
- case CMD_smagic:
- case CMD_snomagic:
- // Only preview once the pattern delimiter has been typed
- if (*end && !ASCII_ISALNUM(*end)) {
- return true;
- }
- break;
- default:
- break;
+ case CMD_substitute:
+ case CMD_smagic:
+ case CMD_snomagic:
+ // Only preview once the pattern delimiter has been typed
+ if (*end && !ASCII_ISALNUM(*end)) {
+ return true;
+ }
+ break;
+ default:
+ break;
}
return false;
@@ -9576,11 +9758,16 @@ Dictionary commands_array(buf_T *buf)
PUT(d, "register", BOOLEAN_OBJ(!!(cmd->uc_argt & EX_REGSTR)));
switch (cmd->uc_argt & (EX_EXTRA | EX_NOSPC | EX_NEEDARG)) {
- case 0: arg[0] = '0'; break;
- case(EX_EXTRA): arg[0] = '*'; break;
- case(EX_EXTRA | EX_NOSPC): arg[0] = '?'; break;
- case(EX_EXTRA | EX_NEEDARG): arg[0] = '+'; break;
- case(EX_EXTRA | EX_NOSPC | EX_NEEDARG): arg[0] = '1'; break;
+ case 0:
+ arg[0] = '0'; break;
+ case (EX_EXTRA):
+ arg[0] = '*'; break;
+ case (EX_EXTRA | EX_NOSPC):
+ arg[0] = '?'; break;
+ case (EX_EXTRA | EX_NEEDARG):
+ arg[0] = '+'; break;
+ case (EX_EXTRA | EX_NOSPC | EX_NEEDARG):
+ arg[0] = '1'; break;
}
PUT(d, "nargs", STRING_OBJ(cstr_to_string(arg)));