aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_cmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/ex_cmds.c')
-rw-r--r--src/nvim/ex_cmds.c1372
1 files changed, 745 insertions, 627 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index f7a1327c87..8a93eafc81 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -7,52 +7,55 @@
#include <assert.h>
#include <float.h>
-#include <stdbool.h>
-#include <string.h>
-#include <stdlib.h>
#include <inttypes.h>
#include <math.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include "nvim/api/buffer.h"
#include "nvim/api/private/defs.h"
#include "nvim/api/vim.h"
-#include "nvim/api/buffer.h"
-#include "nvim/log.h"
-#include "nvim/vim.h"
#include "nvim/ascii.h"
-#include "nvim/ex_cmds.h"
#include "nvim/buffer.h"
+#include "nvim/buffer_updates.h"
#include "nvim/change.h"
#include "nvim/charset.h"
#include "nvim/cursor.h"
+#include "nvim/decoration.h"
#include "nvim/diff.h"
#include "nvim/digraph.h"
#include "nvim/edit.h"
#include "nvim/eval.h"
+#include "nvim/ex_cmds.h"
#include "nvim/ex_cmds2.h"
#include "nvim/ex_docmd.h"
#include "nvim/ex_eval.h"
#include "nvim/ex_getln.h"
+#include "nvim/extmark.h"
#include "nvim/fileio.h"
#include "nvim/fold.h"
+#include "nvim/garray.h"
#include "nvim/getchar.h"
#include "nvim/highlight.h"
#include "nvim/indent.h"
-#include "nvim/buffer_updates.h"
+#include "nvim/log.h"
#include "nvim/main.h"
#include "nvim/mark.h"
-#include "nvim/extmark.h"
-#include "nvim/decoration.h"
#include "nvim/mbyte.h"
#include "nvim/memline.h"
+#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/garray.h"
-#include "nvim/memory.h"
-#include "nvim/move.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/shell.h"
+#include "nvim/os/time.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
#include "nvim/plines.h"
@@ -66,11 +69,8 @@
#include "nvim/tag.h"
#include "nvim/ui.h"
#include "nvim/undo.h"
+#include "nvim/vim.h"
#include "nvim/window.h"
-#include "nvim/os/os.h"
-#include "nvim/os/shell.h"
-#include "nvim/os/input.h"
-#include "nvim/os/time.h"
/// Case matching style to use for :substitute
@@ -147,17 +147,17 @@ void do_ascii(const exarg_T *const eap)
dig = get_digraph_for_char(cval);
if (dig != NULL) {
- iobuff_len += (
- vim_snprintf((char *)IObuff + iobuff_len,
- sizeof(IObuff) - iobuff_len,
- _("<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s"),
- transchar(c), buf1, buf2, cval, cval, cval, dig));
+ iobuff_len += (
+ vim_snprintf((char *)IObuff + iobuff_len,
+ sizeof(IObuff) - iobuff_len,
+ _("<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s"),
+ transchar(c), buf1, buf2, cval, cval, cval, dig));
} else {
- iobuff_len += (
- vim_snprintf((char *)IObuff + iobuff_len,
- sizeof(IObuff) - iobuff_len,
- _("<%s>%s%s %d, Hex %02x, Octal %03o"),
- transchar(c), buf1, buf2, cval, cval, cval));
+ iobuff_len += (
+ vim_snprintf((char *)IObuff + iobuff_len,
+ sizeof(IObuff) - iobuff_len,
+ _("<%s>%s%s %d, Hex %02x, Octal %03o"),
+ transchar(c), buf1, buf2, cval, cval, cval));
}
c = cc[ci++];
@@ -197,21 +197,21 @@ void do_ascii(const exarg_T *const eap)
dig = get_digraph_for_char(c);
if (dig != NULL) {
- iobuff_len += (
- vim_snprintf((char *)IObuff + iobuff_len,
- sizeof(IObuff) - iobuff_len,
- (c < 0x10000
+ iobuff_len += (
+ vim_snprintf((char *)IObuff + iobuff_len,
+ sizeof(IObuff) - iobuff_len,
+ (c < 0x10000
? _("> %d, Hex %04x, Oct %o, Digr %s")
: _("> %d, Hex %08x, Oct %o, Digr %s")),
- c, c, c, dig));
+ c, c, c, dig));
} else {
- iobuff_len += (
- vim_snprintf((char *)IObuff + iobuff_len,
- sizeof(IObuff) - iobuff_len,
- (c < 0x10000
+ iobuff_len += (
+ vim_snprintf((char *)IObuff + iobuff_len,
+ sizeof(IObuff) - iobuff_len,
+ (c < 0x10000
? _("> %d, Hex %04x, Octal %o")
: _("> %d, Hex %08x, Octal %o")),
- c, c, c));
+ c, c, c));
}
if (ci == MAX_MCO) {
break;
@@ -238,26 +238,29 @@ void ex_align(exarg_T *eap)
int width;
if (curwin->w_p_rl) {
- /* switch left and right aligning */
- if (eap->cmdidx == CMD_right)
+ // switch left and right aligning
+ if (eap->cmdidx == CMD_right) {
eap->cmdidx = CMD_left;
- else if (eap->cmdidx == CMD_left)
+ } else if (eap->cmdidx == CMD_left) {
eap->cmdidx = CMD_right;
+ }
}
width = atoi((char *)eap->arg);
save_curpos = curwin->w_cursor;
- if (eap->cmdidx == CMD_left) { /* width is used for new indent */
- if (width >= 0)
+ if (eap->cmdidx == CMD_left) { // width is used for new indent
+ if (width >= 0) {
indent = width;
+ }
} else {
/*
* if 'textwidth' set, use it
* else if 'wrapmargin' set, use it
* if invalid value, use 80
*/
- if (width <= 0)
+ if (width <= 0) {
width = curbuf->b_p_tw;
+ }
if (width == 0 && curbuf->b_p_wm > 0) {
width = curwin->w_width_inner - curbuf->b_p_wm;
}
@@ -266,31 +269,33 @@ void ex_align(exarg_T *eap)
}
}
- if (u_save((linenr_T)(eap->line1 - 1), (linenr_T)(eap->line2 + 1)) == FAIL)
+ if (u_save((linenr_T)(eap->line1 - 1), (linenr_T)(eap->line2 + 1)) == FAIL) {
return;
+ }
for (curwin->w_cursor.lnum = eap->line1;
curwin->w_cursor.lnum <= eap->line2; ++curwin->w_cursor.lnum) {
- if (eap->cmdidx == CMD_left) /* left align */
+ if (eap->cmdidx == CMD_left) { // left align
new_indent = indent;
- else {
- has_tab = FALSE; /* avoid uninit warnings */
+ } else {
+ has_tab = FALSE; // avoid uninit warnings
len = linelen(eap->cmdidx == CMD_right ? &has_tab
- : NULL) - get_indent();
+ : NULL) - get_indent();
- if (len <= 0) /* skip blank lines */
+ if (len <= 0) { // skip blank lines
continue;
+ }
- if (eap->cmdidx == CMD_center)
+ if (eap->cmdidx == CMD_center) {
new_indent = (width - len) / 2;
- else {
- new_indent = width - len; /* right align */
+ } else {
+ new_indent = width - len; // right align
/*
* Make sure that embedded TABs don't make the text go too far
* to the right.
*/
- if (has_tab)
+ if (has_tab) {
while (new_indent > 0) {
(void)set_indent(new_indent, 0);
if (linelen(NULL) <= width) {
@@ -306,11 +311,13 @@ void ex_align(exarg_T *eap)
}
--new_indent;
}
+ }
}
}
- if (new_indent < 0)
+ if (new_indent < 0) {
new_indent = 0;
- (void)set_indent(new_indent, 0); /* set indent */
+ }
+ (void)set_indent(new_indent, 0); // set indent
}
changed_lines(eap->line1, 0, eap->line2 + 1, 0L, true);
curwin->w_cursor = save_curpos;
@@ -400,11 +407,13 @@ static int sort_compare(const void *s1, const void *s2)
/* If the user interrupts, there's no way to stop qsort() immediately, but
* if we return 0 every time, qsort will assume it's done sorting and
* exit. */
- if (sort_abort)
+ if (sort_abort) {
return 0;
+ }
fast_breakcheck();
- if (got_int)
+ if (got_int) {
sort_abort = TRUE;
+ }
// When sorting numbers "start_col_nr" is the number, not the column
// number.
@@ -436,9 +445,10 @@ static int sort_compare(const void *s1, const void *s2)
result = string_compare(sortbuf1, sortbuf2);
}
- /* If two lines have the same value, preserve the original line order. */
- if (result == 0)
+ // If two lines have the same value, preserve the original line order.
+ if (result == 0) {
return (int)(l1.lnum - l2.lnum);
+ }
return result;
}
@@ -623,10 +633,12 @@ void ex_sort(exarg_T *eap)
nrs[lnum - eap->line1].lnum = lnum;
- if (regmatch.regprog != NULL)
+ if (regmatch.regprog != NULL) {
fast_breakcheck();
- if (got_int)
+ }
+ if (got_int) {
goto sortend;
+ }
}
// Allocate a buffer that can hold the longest line.
@@ -636,8 +648,9 @@ void ex_sort(exarg_T *eap)
// Sort the array of line numbers. Note: can't be interrupted!
qsort((void *)nrs, count, sizeof(sorti_T), sort_compare);
- if (sort_abort)
+ if (sort_abort) {
goto sortend;
+ }
bcount_t old_count = 0, new_count = 0;
@@ -665,8 +678,9 @@ void ex_sort(exarg_T *eap)
new_count += bytelen;
}
fast_breakcheck();
- if (got_int)
+ if (got_int) {
goto sortend;
+ }
}
// delete the original lines if appending worked
@@ -731,11 +745,11 @@ void ex_retab(exarg_T *eap)
char_u *new_ts_str; // string value of tab argument
int save_list;
- linenr_T first_line = 0; /* first changed line */
- linenr_T last_line = 0; /* last changed line */
+ linenr_T first_line = 0; // first changed line
+ linenr_T last_line = 0; // last changed line
save_list = curwin->w_p_list;
- curwin->w_p_list = 0; /* don't want list mode here */
+ curwin->w_p_list = 0; // don't want list mode here
new_ts_str = eap->arg;
if (!tabstop_set(eap->arg, &new_vts_array)) {
@@ -762,7 +776,7 @@ void ex_retab(exarg_T *eap)
for (;; ) {
if (ascii_iswhite(ptr[col])) {
if (!got_tab && num_spaces == 0) {
- /* First consecutive white-space */
+ // First consecutive white-space
start_vcol = vcol;
start_col = col;
}
@@ -773,9 +787,9 @@ void ex_retab(exarg_T *eap)
}
} else {
if (got_tab || (eap->forceit && num_spaces > 1)) {
- /* Retabulate this string of white-space */
+ // Retabulate this string of white-space
- /* len is virtual length of white string */
+ // len is virtual length of white string
len = num_spaces = vcol - start_vcol;
num_tabs = 0;
if (!curbuf->b_p_et) {
@@ -797,16 +811,17 @@ void ex_retab(exarg_T *eap)
}
}
- /* len is actual number of white characters used */
+ // len is actual number of white characters used
len = num_spaces + num_tabs;
old_len = (long)STRLEN(ptr);
long new_len = old_len - col + start_col + len + 1;
new_line = xmalloc(new_len);
- if (start_col > 0)
+ if (start_col > 0) {
memmove(new_line, ptr, (size_t)start_col);
+ }
memmove(new_line + start_col + len,
- ptr + col, (size_t)(old_len - col + 1));
+ ptr + col, (size_t)(old_len - col + 1));
ptr = new_line + start_col;
for (col = 0; col < len; col++) {
ptr[col] = (col < num_tabs) ? '\t' : ' ';
@@ -828,17 +843,20 @@ void ex_retab(exarg_T *eap)
got_tab = false;
num_spaces = 0;
}
- if (ptr[col] == NUL)
+ if (ptr[col] == NUL) {
break;
+ }
vcol += win_chartabsize(curwin, ptr + col, (colnr_T)vcol);
col += utfc_ptr2len(ptr + col);
}
- if (new_line == NULL) /* out of memory */
+ if (new_line == NULL) { // out of memory
break;
+ }
line_breakcheck();
}
- if (got_int)
+ if (got_int) {
EMSG(_(e_interr));
+ }
// If a single value was given then it can be considered equal to
// either the value of 'tabstop' or the value of 'vartabstop'.
@@ -856,7 +874,7 @@ void ex_retab(exarg_T *eap)
changed_lines(first_line, 0, last_line + 1, 0L, true);
}
- curwin->w_p_list = save_list; /* restore 'list' */
+ curwin->w_p_list = save_list; // restore 'list'
if (new_ts_str != NULL) { // set the new tabstop
// If 'vartabstop' is in use or if the value given to retab has more
@@ -923,14 +941,16 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)
* First we copy the old text to its new location -- webb
* Also copy the flag that ":global" command uses.
*/
- if (u_save(dest, dest + 1) == FAIL)
+ if (u_save(dest, dest + 1) == FAIL) {
return FAIL;
+ }
for (extra = 0, l = line1; l <= line2; l++) {
str = vim_strsave(ml_get(l + extra));
ml_append(dest + l - line1, str, (colnr_T)0, false);
xfree(str);
- if (dest < line1)
+ if (dest < line1) {
extra++;
+ }
}
/*
@@ -986,17 +1006,19 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)
/*
* Now we delete the original text -- webb
*/
- if (u_save(line1 + extra - 1, line2 + extra + 1) == FAIL)
+ if (u_save(line1 + extra - 1, line2 + extra + 1) == FAIL) {
return FAIL;
+ }
for (l = line1; l <= line2; l++) {
ml_delete(line1 + extra, true);
}
if (!global_busy && num_lines > p_report) {
- if (num_lines == 1)
+ if (num_lines == 1) {
MSG(_("1 line moved"));
- else
+ } else {
smsg(_("%" PRId64 " lines moved"), (int64_t)num_lines);
+ }
}
extmark_move_region(curbuf, line1-1, 0, start_byte,
@@ -1007,16 +1029,18 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)
/*
* Leave the cursor on the last of the moved lines.
*/
- if (dest >= line1)
+ if (dest >= line1) {
curwin->w_cursor.lnum = dest;
- else
+ } else {
curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
+ }
if (line1 < dest) {
dest += num_lines + 1;
last_line = curbuf->b_ml.ml_line_count;
- if (dest > last_line + 1)
+ if (dest > last_line + 1) {
dest = last_line + 1;
+ }
changed_lines(line1, 0, dest, 0L, false);
} else {
changed_lines(dest + 1, 0, line1 + num_lines, 0L, false);
@@ -1052,8 +1076,9 @@ void ex_copy(linenr_T line1, linenr_T line2, linenr_T n)
* line1 = start of source (while copying)
* line2 = end of source (while copying)
*/
- if (u_save(n, n + 1) == FAIL)
+ if (u_save(n, n + 1) == FAIL) {
return;
+ }
curwin->w_cursor.lnum = n;
while (line1 <= line2) {
@@ -1063,14 +1088,17 @@ void ex_copy(linenr_T line1, linenr_T line2, linenr_T n)
ml_append(curwin->w_cursor.lnum, p, (colnr_T)0, false);
xfree(p);
- /* situation 2: skip already copied lines */
- if (line1 == n)
+ // situation 2: skip already copied lines
+ if (line1 == n) {
line1 = curwin->w_cursor.lnum;
+ }
++line1;
- if (curwin->w_cursor.lnum < line1)
+ if (curwin->w_cursor.lnum < line1) {
++line1;
- if (curwin->w_cursor.lnum < line2)
+ }
+ if (curwin->w_cursor.lnum < line2) {
++line2;
+ }
++curwin->w_cursor.lnum;
}
@@ -1079,7 +1107,7 @@ void ex_copy(linenr_T line1, linenr_T line2, linenr_T n)
msgmore((long)count);
}
-static char_u *prevcmd = NULL; /* the previous command */
+static char_u *prevcmd = NULL; // the previous command
#if defined(EXITFREE)
void free_prev_shellcmd(void)
@@ -1090,12 +1118,11 @@ void free_prev_shellcmd(void)
#endif
/*
- * Handle the ":!cmd" command. Also for ":r !cmd" and ":w !cmd"
+ * Handle the ":!cmd" command. Also for ":r !cmd" and ":w !cmd"
* Bangs in the argument are replaced with the previously entered command.
* Remember the argument.
*/
-void do_bang(int addr_count, exarg_T *eap, bool forceit,
- bool do_in, bool do_out)
+void do_bang(int addr_count, exarg_T *eap, bool forceit, bool do_in, bool do_out)
FUNC_ATTR_NONNULL_ALL
{
char_u *arg = eap->arg; // command
@@ -1117,8 +1144,8 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit,
return;
}
- if (addr_count == 0) { /* :! */
- msg_scroll = FALSE; /* don't scroll here */
+ if (addr_count == 0) { // :!
+ msg_scroll = FALSE; // don't scroll here
autowrite_all();
msg_scroll = scroll_save;
}
@@ -1131,8 +1158,9 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit,
trailarg = arg;
do {
len = (int)STRLEN(trailarg) + 1;
- if (newcmd != NULL)
+ if (newcmd != NULL) {
len += (int)STRLEN(newcmd);
+ }
if (ins_prevcmd) {
if (prevcmd == NULL) {
EMSG(_(e_noprev));
@@ -1143,10 +1171,12 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit,
}
t = xmalloc(len);
*t = NUL;
- if (newcmd != NULL)
+ if (newcmd != NULL) {
STRCAT(t, newcmd);
- if (ins_prevcmd)
+ }
+ if (ins_prevcmd) {
STRCAT(t, prevcmd);
+ }
p = t + STRLEN(t);
STRCAT(t, trailarg);
xfree(newcmd);
@@ -1159,9 +1189,9 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit,
trailarg = NULL;
while (*p) {
if (*p == '!') {
- if (p > newcmd && p[-1] == '\\')
+ if (p > newcmd && p[-1] == '\\') {
STRMOVE(p - 1, p);
- else {
+ } else {
trailarg = p;
*trailarg++ = NUL;
ins_prevcmd = true;
@@ -1175,7 +1205,7 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit,
xfree(prevcmd);
prevcmd = newcmd;
- if (bangredo) { /* put cmd in redo buffer for ! command */
+ if (bangredo) { // put cmd in redo buffer for ! command
/* If % or # appears in the command, it must have been escaped.
* Reescape them, so that redoing them does not substitute them by the
* buffername. */
@@ -1196,8 +1226,8 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit,
STRCAT(newcmd, p_shq);
free_newcmd = true;
}
- if (addr_count == 0) { /* :! */
- /* echo the command */
+ if (addr_count == 0) { // :!
+ // echo the command
msg_start();
msg_putchar(':');
msg_putchar('!');
@@ -1206,36 +1236,34 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit,
ui_cursor_goto(msg_row, msg_col);
do_shell(newcmd, 0);
- } else { /* :range! */
+ } else { // :range!
/* Careful: This may recursively call do_bang() again! (because of
* autocommands) */
do_filter(line1, line2, eap, newcmd, do_in, do_out);
apply_autocmds(EVENT_SHELLFILTERPOST, NULL, NULL, FALSE, curbuf);
}
- if (free_newcmd)
+ if (free_newcmd) {
xfree(newcmd);
+ }
}
-// do_filter: filter lines through a command given by the user
-//
-// We mostly use temp files and the call_shell() routine here. This would
-// normally be done using pipes on a Unix system, but this is more portable
-// to non-Unix systems. The call_shell() routine needs to be able
-// to deal with redirection somehow, and should handle things like looking
-// at the PATH env. variable, and adding reasonable extensions to the
-// command name given by the user. All reasonable versions of call_shell()
-// do this.
-// Alternatively, if on Unix and redirecting input or output, but not both,
-// and the 'shelltemp' option isn't set, use pipes.
-// We use input redirection if do_in is true.
-// We use output redirection if do_out is true.
-static void do_filter(
- linenr_T line1,
- linenr_T line2,
- exarg_T *eap, /* for forced 'ff' and 'fenc' */
- char_u *cmd,
- bool do_in,
- bool do_out)
+/// do_filter: filter lines through a command given by the user
+///
+/// We mostly use temp files and the call_shell() routine here. This would
+/// normally be done using pipes on a Unix system, but this is more portable
+/// to non-Unix systems. The call_shell() routine needs to be able
+/// to deal with redirection somehow, and should handle things like looking
+/// at the PATH env. variable, and adding reasonable extensions to the
+/// command name given by the user. All reasonable versions of call_shell()
+/// do this.
+/// Alternatively, if on Unix and redirecting input or output, but not both,
+/// and the 'shelltemp' option isn't set, use pipes.
+/// We use input redirection if do_in is true.
+/// We use output redirection if do_out is true.
+///
+/// @param eap for forced 'ff' and 'fenc'
+static void do_filter(linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, bool do_in,
+ bool do_out)
{
char_u *itmp = NULL;
char_u *otmp = NULL;
@@ -1247,8 +1275,9 @@ static void do_filter(
int shell_flags = 0;
const int stmp = p_stmp;
- if (*cmd == NUL) /* no filter command */
+ if (*cmd == NUL) { // no filter command
return;
+ }
cursor_save = curwin->w_cursor;
@@ -1271,8 +1300,9 @@ static void do_filter(
* pipe only need to do 3.
*/
- if (do_out)
+ if (do_out) {
shell_flags |= kShellOptDoOut;
+ }
if (!do_in && do_out && !stmp) {
// Use a pipe to fetch stdout of the command, do not use a temp file.
@@ -1291,7 +1321,7 @@ static void do_filter(
curbuf->b_op_end.lnum = line2;
curwin->w_cursor.lnum = line2;
} else if ((do_in && (itmp = vim_tempname()) == NULL)
- || (do_out && (otmp = vim_tempname()) == NULL)) {
+ || (do_out && (otmp = vim_tempname()) == NULL)) {
EMSG(_(e_notmp));
goto filterend;
}
@@ -1300,7 +1330,7 @@ static void do_filter(
* The writing and reading of temp files will not be shown.
* Vi also doesn't do this and the messages are not very informative.
*/
- ++no_wait_return; /* don't call wait_return() while busy */
+ ++no_wait_return; // don't call wait_return() while busy
if (itmp != NULL && buf_write(curbuf, itmp, NULL, line1, line2, eap,
false, false, false, true) == FAIL) {
msg_putchar('\n'); // Keep message from buf_write().
@@ -1310,13 +1340,15 @@ static void do_filter(
}
goto filterend;
}
- if (curbuf != old_curbuf)
+ if (curbuf != old_curbuf) {
goto filterend;
+ }
- if (!do_out)
+ if (!do_out) {
msg_putchar('\n');
+ }
- /* Create the shell command in allocated memory. */
+ // Create the shell command in allocated memory.
cmd_buf = make_filter_cmd(cmd, itmp, otmp);
ui_cursor_goto(Rows - 1, 0);
@@ -1352,8 +1384,9 @@ static void do_filter(
}
goto error;
}
- if (curbuf != old_curbuf)
+ if (curbuf != old_curbuf) {
goto filterend;
+ }
}
read_linecount = curbuf->b_ml.ml_line_count - read_linecount;
@@ -1401,22 +1434,24 @@ static void do_filter(
curwin->w_cursor.lnum = curbuf->b_op_end.lnum;
}
- beginline(BL_WHITE | BL_FIX); /* cursor on first non-blank */
+ beginline(BL_WHITE | BL_FIX); // cursor on first non-blank
--no_wait_return;
if (linecount > p_report) {
if (do_in) {
vim_snprintf((char *)msg_buf, sizeof(msg_buf),
- _("%" PRId64 " lines filtered"), (int64_t)linecount);
- if (msg(msg_buf) && !msg_scroll)
- /* save message to display it after redraw */
+ _("%" PRId64 " lines filtered"), (int64_t)linecount);
+ if (msg(msg_buf) && !msg_scroll) {
+ // save message to display it after redraw
set_keep_msg(msg_buf, 0);
- } else
+ }
+ } else {
msgmore((long)linecount);
+ }
}
} else {
error:
- /* put cursor back in same position for ":w !cmd" */
+ // put cursor back in same position for ":w !cmd"
curwin->w_cursor = cursor_save;
--no_wait_return;
wait_return(FALSE);
@@ -1428,21 +1463,21 @@ filterend:
--no_wait_return;
EMSG(_("E135: *Filter* Autocommands must not change current buffer"));
}
- if (itmp != NULL)
+ if (itmp != NULL) {
os_remove((char *)itmp);
- if (otmp != NULL)
+ }
+ if (otmp != NULL) {
os_remove((char *)otmp);
+ }
xfree(itmp);
xfree(otmp);
}
-// Call a shell to execute a command.
-// When "cmd" is NULL start an interactive shell.
-void
-do_shell(
- char_u *cmd,
- int flags // may be SHELL_DOOUT when output is redirected
-)
+/// Call a shell to execute a command.
+/// When "cmd" is NULL start an interactive shell.
+///
+/// @param flags may be SHELL_DOOUT when output is redirected
+void do_shell(char_u *cmd, int flags)
{
// Disallow shell commands from .exrc and .vimrc in current directory for
// security reasons.
@@ -1524,11 +1559,11 @@ char_u *make_filter_cmd(char_u *cmd, char_u *itmp, char_u *otmp)
size_t len = STRLEN(cmd) + 1; // At least enough space for cmd + NULL.
- len += is_fish_shell ? sizeof("begin; ""; end") - 1
- : sizeof("("")") - 1;
+ len += is_fish_shell ? sizeof("begin; " "; end") - 1
+ : sizeof("(" ")") - 1;
if (itmp != NULL) {
- len += STRLEN(itmp) + sizeof(" { "" < "" } ") - 1;
+ len += STRLEN(itmp) + sizeof(" { " " < " " } ") - 1;
}
if (otmp != NULL) {
len += STRLEN(otmp) + STRLEN(p_srr) + 2; // two extra spaces (" "),
@@ -1576,9 +1611,9 @@ char_u *make_filter_cmd(char_u *cmd, char_u *itmp, char_u *otmp)
}
#endif
if (otmp != NULL) {
- append_redir(buf, len, (char *) p_srr, (char *) otmp);
+ append_redir(buf, len, (char *)p_srr, (char *)otmp);
}
- return (char_u *) buf;
+ return (char_u *)buf;
}
/// Append output redirection for the given file to the end of the buffer
@@ -1590,8 +1625,8 @@ char_u *make_filter_cmd(char_u *cmd, char_u *itmp, char_u *otmp)
/// a space, opt, a space and then fname if `%s` is not found
/// there.
/// @param[in] fname File name to append.
-void append_redir(char *const buf, const size_t buflen,
- const char *const opt, const char *const fname)
+void append_redir(char *const buf, const size_t buflen, const char *const opt,
+ const char *const fname)
{
char *const end = buf + strlen(buf);
// find "%s"
@@ -1605,9 +1640,9 @@ void append_redir(char *const buf, const size_t buflen,
}
if (p != NULL) {
*end = ' '; // not really needed? Not with sh, ksh or bash
- vim_snprintf(end + 1, (size_t) (buflen - (end + 1 - buf)), opt, fname);
+ vim_snprintf(end + 1, (size_t)(buflen - (end + 1 - buf)), opt, fname);
} else {
- vim_snprintf(end, (size_t) (buflen - (end - buf)), " %s %s", opt, fname);
+ vim_snprintf(end, (size_t)(buflen - (end - buf)), " %s %s", opt, fname);
}
}
@@ -1654,11 +1689,13 @@ int rename_buffer(char_u *new_fname)
buf = curbuf;
apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
- /* buffer changed, don't change name now */
- if (buf != curbuf)
+ // buffer changed, don't change name now
+ if (buf != curbuf) {
return FAIL;
- if (aborting()) /* autocmds may abort script processing */
+ }
+ if (aborting()) { // autocmds may abort script processing
return FAIL;
+ }
/*
* The name of the current buffer will be changed.
* A new (unlisted) buffer entry needs to be made to hold the old file
@@ -1686,7 +1723,7 @@ int rename_buffer(char_u *new_fname)
xfree(fname);
xfree(sfname);
apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
- /* Change directories when the 'acd' option is set. */
+ // Change directories when the 'acd' option is set.
do_autochdir();
return OK;
}
@@ -1724,8 +1761,9 @@ void ex_file(exarg_T *eap)
*/
void ex_update(exarg_T *eap)
{
- if (curbufIsChanged())
+ if (curbufIsChanged()) {
(void)do_write(eap);
+ }
}
/*
@@ -1757,15 +1795,16 @@ void ex_write(exarg_T *eap)
int do_write(exarg_T *eap)
{
int other;
- char_u *fname = NULL; /* init to shut up gcc */
+ char_u *fname = NULL; // init to shut up gcc
char_u *ffname;
int retval = FAIL;
char_u *free_fname = NULL;
buf_T *alt_buf = NULL;
int name_was_missing;
- if (not_writing()) /* check 'write' option */
+ if (not_writing()) { // check 'write' option
return FAIL;
+ }
ffname = eap->arg;
if (*ffname == NUL) {
@@ -1781,8 +1820,9 @@ int do_write(exarg_T *eap)
* When out-of-memory, keep unexpanded file name, because we MUST be
* able to write the file in this situation.
*/
- if (free_fname != NULL)
+ if (free_fname != NULL) {
ffname = free_fname;
+ }
other = otherfile(ffname);
}
@@ -1791,10 +1831,11 @@ int do_write(exarg_T *eap)
*/
if (other) {
if (vim_strchr(p_cpo, CPO_ALTWRITE) != NULL
- || eap->cmdidx == CMD_saveas)
+ || eap->cmdidx == CMD_saveas) {
alt_buf = setaltfname(ffname, fname, (linenr_T)1);
- else
+ } else {
alt_buf = buflist_findname(ffname);
+ }
if (alt_buf != NULL && alt_buf->b_ml.ml_mfp != NULL) {
/* Overwriting a file that is loaded in another buffer is not a
* good idea. */
@@ -1825,8 +1866,9 @@ int do_write(exarg_T *eap)
&& !p_wa) {
if (p_confirm || cmdmod.confirm) {
if (vim_dialog_yesno(VIM_QUESTION, NULL,
- (char_u *)_("Write partial file?"), 2) != VIM_YES)
+ (char_u *)_("Write partial file?"), 2) != VIM_YES) {
goto theend;
+ }
eap->forceit = TRUE;
} else {
EMSG(_("E140: Use ! to write partial buffer"));
@@ -1842,7 +1884,7 @@ int do_write(exarg_T *eap)
apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, alt_buf);
if (curbuf != was_curbuf || aborting()) {
- /* buffer changed, don't change name now */
+ // buffer changed, don't change name now
retval = FAIL;
goto theend;
}
@@ -1868,7 +1910,7 @@ int do_write(exarg_T *eap)
apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, alt_buf);
}
if (curbuf != was_curbuf || aborting()) {
- /* buffer changed, don't write the file */
+ // buffer changed, don't write the file
retval = FAIL;
goto theend;
}
@@ -1888,9 +1930,9 @@ int do_write(exarg_T *eap)
name_was_missing = curbuf->b_ffname == NULL;
retval = buf_write(curbuf, ffname, fname, eap->line1, eap->line2,
- eap, eap->append, eap->forceit, TRUE, FALSE);
+ eap, eap->append, eap->forceit, TRUE, FALSE);
- /* After ":saveas fname" reset 'readonly'. */
+ // After ":saveas fname" reset 'readonly'.
if (eap->cmdidx == CMD_saveas) {
if (retval == OK) {
curbuf->b_p_ro = FALSE;
@@ -1910,21 +1952,16 @@ theend:
return retval;
}
-/*
- * Check if it is allowed to overwrite a file. If b_flags has BF_NOTEDITED,
- * BF_NEW or BF_READERR, check for overwriting current file.
- * May set eap->forceit if a dialog says it's OK to overwrite.
- * Return OK if it's OK, FAIL if it is not.
- */
-int
-check_overwrite(
- exarg_T *eap,
- buf_T *buf,
- char_u *fname, // file name to be used (can differ from
- // buf->ffname)
- char_u *ffname, // full path version of fname
- int other // writing under other name
-)
+/// Check if it is allowed to overwrite a file. If b_flags has BF_NOTEDITED,
+/// BF_NEW or BF_READERR, check for overwriting current file.
+/// May set eap->forceit if a dialog says it's OK to overwrite.
+///
+/// @param fname file name to be used (can differ from buf->ffname)
+/// @param ffname full path version of fname
+/// @param other writing under other name
+///
+/// @return OK if it's OK, FAIL if it is not.
+int check_overwrite(exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other)
{
/*
* write to other file or b_flags set or not writing the whole file:
@@ -1950,8 +1987,9 @@ check_overwrite(
char_u buff[DIALOG_MSG_SIZE];
dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
- if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES) {
return FAIL;
+ }
eap->forceit = TRUE;
} else {
EMSG(_(e_exists));
@@ -1959,7 +1997,7 @@ check_overwrite(
}
}
- /* For ":w! filename" check that no swap file exists for "filename". */
+ // For ":w! filename" check that no swap file exists for "filename".
if (other && !emsg_silent) {
char_u *dir;
char_u *p;
@@ -1985,8 +2023,8 @@ check_overwrite(
char_u buff[DIALOG_MSG_SIZE];
dialog_msg(buff,
- _("Swap file \"%s\" exists, overwrite anyway?"),
- swapname);
+ _("Swap file \"%s\" exists, overwrite anyway?"),
+ swapname);
if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2)
!= VIM_YES) {
xfree(swapname);
@@ -1995,7 +2033,7 @@ check_overwrite(
eap->forceit = TRUE;
} else {
EMSG2(_("E768: Swap file exists: %s (:silent! overrides)"),
- swapname);
+ swapname);
xfree(swapname);
return FAIL;
}
@@ -2013,14 +2051,16 @@ void ex_wnext(exarg_T *eap)
{
int i;
- if (eap->cmd[1] == 'n')
+ if (eap->cmd[1] == 'n') {
i = curwin->w_arg_idx + (int)eap->line2;
- else
+ } else {
i = curwin->w_arg_idx - (int)eap->line2;
+ }
eap->line1 = 1;
eap->line2 = curbuf->b_ml.ml_line_count;
- if (do_write(eap) != FAIL)
+ if (do_write(eap) != FAIL) {
do_argfile(eap, i);
+ }
}
/*
@@ -2060,7 +2100,7 @@ void do_wqall(exarg_T *eap)
++error;
} else if (check_readonly(&eap->forceit, buf)
|| check_overwrite(eap, buf, buf->b_fname, buf->b_ffname,
- FALSE) == FAIL) {
+ FALSE) == FAIL) {
++error;
} else {
bufref_T bufref;
@@ -2073,11 +2113,12 @@ void do_wqall(exarg_T *eap)
buf = firstbuf;
}
}
- eap->forceit = save_forceit; /* check_overwrite() may set it */
+ eap->forceit = save_forceit; // check_overwrite() may set it
}
if (exiting) {
- if (!error)
- getout(0); /* exit Vim */
+ if (!error) {
+ getout(0); // exit Vim
+ }
not_exiting();
}
}
@@ -2088,8 +2129,9 @@ void do_wqall(exarg_T *eap)
*/
int not_writing(void)
{
- if (p_write)
+ if (p_write) {
return FALSE;
+ }
EMSG(_("E142: File not written: Writing is disabled by 'write' option"));
return TRUE;
}
@@ -2109,28 +2151,30 @@ static int check_readonly(int *forceit, buf_T *buf)
if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL) {
char_u buff[DIALOG_MSG_SIZE];
- if (buf->b_p_ro)
+ if (buf->b_p_ro) {
dialog_msg(buff,
- _(
- "'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
- buf->b_fname);
- else
+ _( "'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
+ buf->b_fname);
+ } else {
dialog_msg(buff,
- _(
- "File permissions of \"%s\" are read-only.\nIt may still be possible to write it.\nDo you wish to try?"),
- buf->b_fname);
+ _(
+ "File permissions of \"%s\" are read-only.\nIt may still be possible to write it.\nDo you wish to try?"),
+ buf->b_fname);
+ }
if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) == VIM_YES) {
- /* Set forceit, to force the writing of a readonly file */
+ // Set forceit, to force the writing of a readonly file
*forceit = TRUE;
return FALSE;
- } else
+ } else {
return TRUE;
- } else if (buf->b_p_ro)
+ }
+ } else if (buf->b_p_ro) {
EMSG(_(e_readonly));
- else
+ } else {
EMSG2(_("E505: \"%s\" is read-only (add ! to override)"),
- buf->b_fname);
+ buf->b_fname);
+ }
return TRUE;
}
@@ -2146,8 +2190,7 @@ static int check_readonly(int *forceit, buf_T *buf)
// GETFILE_NOT_WRITTEN for "not written" error,
// GETFILE_SAME_FILE for success
// GETFILE_OPEN_OTHER for successfully opening another file.
-int getfile(int fnum, char_u *ffname_arg, char_u *sfname_arg, int setpm,
- linenr_T lnum, int forceit)
+int getfile(int fnum, char_u *ffname_arg, char_u *sfname_arg, int setpm, linenr_T lnum, int forceit)
{
char_u *ffname = ffname_arg;
char_u *sfname = sfname_arg;
@@ -2163,12 +2206,13 @@ int getfile(int fnum, char_u *ffname_arg, char_u *sfname_arg, int setpm,
}
if (fnum == 0) {
- /* make ffname full path, set sfname */
+ // make ffname full path, set sfname
fname_expand(curbuf, &ffname, &sfname);
other = otherfile(ffname);
- free_me = ffname; /* has been allocated, free() later */
- } else
+ free_me = ffname; // has been allocated, free() later
+ } else {
other = (fnum != curbuf->b_fnum);
+ }
if (other) {
no_wait_return++; // don't wait for autowrite message
@@ -2185,10 +2229,12 @@ int getfile(int fnum, char_u *ffname_arg, char_u *sfname_arg, int setpm,
goto theend;
}
}
- if (other)
+ if (other) {
--no_wait_return;
- if (setpm)
+ }
+ if (setpm) {
setpcmark();
+ }
if (!other) {
if (lnum != 0) {
curwin->w_cursor.lnum = lnum;
@@ -2220,7 +2266,7 @@ theend:
/// - NULL to start an empty buffer
/// @param sfname the short file name (or NULL)
/// @param eap contains the command to be executed after loading the file
-/// and forced 'ff' and 'fenc'
+/// and forced 'ff' and 'fenc'. Can be NULL!
/// @param newlnum if > 0: put cursor on this line number (if possible)
/// ECMD_LASTL: use last position in loaded file
/// ECMD_LAST: use last position in all files
@@ -2238,18 +2284,11 @@ theend:
/// info of the previous buffer for "oldwin" is stored.
///
/// @return FAIL for failure, OK otherwise
-int do_ecmd(
- int fnum,
- char_u *ffname,
- char_u *sfname,
- exarg_T *eap, /* can be NULL! */
- linenr_T newlnum,
- int flags,
- win_T *oldwin
-)
+int do_ecmd(int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags,
+ win_T *oldwin)
{
- int other_file; /* TRUE if editing another file */
- int oldbuf; /* TRUE if using existing buffer */
+ int other_file; // TRUE if editing another file
+ int oldbuf; // TRUE if using existing buffer
int auto_buf = FALSE; /* TRUE if autocommands brought us
into the buffer unexpectedly */
char_u *new_name = NULL;
@@ -2271,22 +2310,26 @@ int do_ecmd(
bool did_inc_redrawing_disabled = false;
long *so_ptr = curwin->w_p_so >= 0 ? &curwin->w_p_so : &p_so;
- if (eap != NULL)
+ if (eap != NULL) {
command = eap->do_ecmd_cmd;
+ }
set_bufref(&old_curbuf, curbuf);
if (fnum != 0) {
- if (fnum == curbuf->b_fnum) /* file is already being edited */
- return OK; /* nothing to do */
+ if (fnum == curbuf->b_fnum) { // file is already being edited
+ return OK; // nothing to do
+ }
other_file = TRUE;
} else {
- /* if no short name given, use ffname for short name */
- if (sfname == NULL)
+ // if no short name given, use ffname for short name
+ if (sfname == NULL) {
sfname = ffname;
+ }
#ifdef USE_FNAME_CASE
- if (sfname != NULL)
+ if (sfname != NULL) {
path_fix_case(sfname); // set correct case for sfname
+ }
#endif
if ((flags & (ECMD_ADDBUF | ECMD_ALTBUF))
@@ -2294,19 +2337,21 @@ int do_ecmd(
goto theend;
}
- if (ffname == NULL)
+ if (ffname == NULL) {
other_file = TRUE;
- /* there is no file name */
- else if (*ffname == NUL && curbuf->b_ffname == NULL)
+ }
+ // there is no file name
+ else if (*ffname == NUL && curbuf->b_ffname == NULL) {
other_file = FALSE;
- else {
- if (*ffname == NUL) { /* re-edit with same file name */
+ } else {
+ if (*ffname == NUL) { // re-edit with same file name
ffname = curbuf->b_ffname;
sfname = curbuf->b_fname;
}
- free_fname = (char_u *)fix_fname((char *)ffname); /* may expand to full path name */
- if (free_fname != NULL)
+ free_fname = (char_u *)fix_fname((char *)ffname); // may expand to full path name
+ if (free_fname != NULL) {
ffname = free_fname;
+ }
other_file = otherfile(ffname);
}
}
@@ -2380,13 +2425,14 @@ int do_ecmd(
if (command != NULL) {
tlnum = atol((char *)command);
- if (tlnum <= 0)
+ if (tlnum <= 0) {
tlnum = 1L;
+ }
}
// Add BLN_NOCURWIN to avoid a new wininfo items are associated
// with the current window.
const buf_T *const newbuf
- = buflist_new(ffname, sfname, tlnum, BLN_LISTED | BLN_NOCURWIN);
+ = buflist_new(ffname, sfname, tlnum, BLN_LISTED | BLN_NOCURWIN);
if (newbuf != NULL && (flags & ECMD_ALTBUF)) {
curwin->w_alt_fnum = newbuf->b_fnum;
}
@@ -2400,8 +2446,9 @@ int do_ecmd(
}
set_bufref(&old_curbuf, curbuf);
}
- if (buf == NULL)
+ if (buf == NULL) {
goto theend;
+ }
if (buf->b_ml.ml_mfp == NULL) {
// No memfile yet.
oldbuf = false;
@@ -2460,7 +2507,7 @@ int do_ecmd(
delbuf_msg(new_name); // Frees new_name.
goto theend;
}
- if (aborting()) { /* autocmds may abort script processing */
+ if (aborting()) { // autocmds may abort script processing
xfree(new_name);
goto theend;
}
@@ -2482,10 +2529,9 @@ int do_ecmd(
// Close the link to the current buffer. This will set
// oldwin->w_buffer to NULL.
u_sync(false);
- const bool did_decrement = close_buffer(
- oldwin, curbuf,
- (flags & ECMD_HIDE) || curbuf->terminal ? 0 : DOBUF_UNLOAD,
- false);
+ const bool did_decrement = close_buffer(oldwin, curbuf,
+ (flags & ECMD_HIDE) || curbuf->terminal ? 0 : DOBUF_UNLOAD,
+ false);
// Autocommands may have closed the window.
if (win_valid(the_curwin)) {
@@ -2526,7 +2572,7 @@ int do_ecmd(
curbuf = buf;
++curbuf->b_nwindows;
- /* Set 'fileformat', 'binary' and 'fenc' when forced. */
+ // Set 'fileformat', 'binary' and 'fenc' when forced.
if (!oldbuf && eap != NULL) {
set_file_options(TRUE, eap);
set_forced_fenc(eap);
@@ -2539,7 +2585,6 @@ int do_ecmd(
* values. Also restores old folding stuff. */
get_winopts(curbuf);
did_get_winopts = TRUE;
-
}
xfree(new_name);
au_new_curbuf.br_buf = NULL;
@@ -2571,10 +2616,12 @@ int do_ecmd(
/* If autocommands change buffers under our fingers, forget about
* editing the file. */
- if (buf != curbuf)
+ if (buf != curbuf) {
goto theend;
- if (aborting()) /* autocmds may abort script processing */
+ }
+ if (aborting()) { // autocmds may abort script processing
goto theend;
+ }
/* Since we are starting to edit a file, consider the filetype to be
* unset. Helps for when an autocommand changes files and expects syntax
@@ -2582,14 +2629,14 @@ int do_ecmd(
did_filetype = FALSE;
/*
- * other_file oldbuf
- * FALSE FALSE re-edit same file, buffer is re-used
- * FALSE TRUE re-edit same file, nothing changes
- * TRUE FALSE start editing new file, new buffer
- * TRUE TRUE start editing in existing buffer (nothing to do)
+ * other_file oldbuf
+ * FALSE FALSE re-edit same file, buffer is re-used
+ * FALSE TRUE re-edit same file, nothing changes
+ * TRUE FALSE start editing new file, new buffer
+ * TRUE TRUE start editing in existing buffer (nothing to do)
*/
- if (!other_file && !oldbuf) { /* re-use the buffer */
- set_last_cursor(curwin); /* may set b_last_cursor */
+ if (!other_file && !oldbuf) { // re-use the buffer
+ set_last_cursor(curwin); // may set b_last_cursor
if (newlnum == ECMD_LAST || newlnum == ECMD_LASTL) {
newlnum = curwin->w_cursor.lnum;
solcol = curwin->w_cursor.col;
@@ -2635,12 +2682,14 @@ int do_ecmd(
/* If autocommands change buffers under our fingers, forget about
* re-editing the file. Should do the buf_clear_file(), but perhaps
* the autocommands changed the buffer... */
- if (buf != curbuf)
+ if (buf != curbuf) {
goto theend;
- if (aborting()) /* autocmds may abort script processing */
+ }
+ if (aborting()) { // autocmds may abort script processing
goto theend;
+ }
buf_clear_file(curbuf);
- curbuf->b_op_start.lnum = 0; /* clear '[ and '] marks */
+ curbuf->b_op_start.lnum = 0; // clear '[ and '] marks
curbuf->b_op_end.lnum = 0;
}
@@ -2648,7 +2697,7 @@ int do_ecmd(
* If we get here we are sure to start editing
*/
- /* Assume success now */
+ // Assume success now
retval = OK;
/*
@@ -2672,7 +2721,7 @@ int do_ecmd(
}
}
- /* Change directories when the 'acd' option is set. */
+ // Change directories when the 'acd' option is set.
do_autochdir();
/*
@@ -2681,18 +2730,20 @@ int do_ecmd(
*/
orig_pos = curwin->w_cursor;
topline = curwin->w_topline;
- if (!oldbuf) { /* need to read the file */
+ if (!oldbuf) { // need to read the file
swap_exists_action = SEA_DIALOG;
- curbuf->b_flags |= BF_CHECK_RO; /* set/reset 'ro' flag */
+ curbuf->b_flags |= BF_CHECK_RO; // set/reset 'ro' flag
/*
* Open the buffer and read the file.
*/
- if (should_abort(open_buffer(FALSE, eap, readfile_flags)))
+ if (should_abort(open_buffer(FALSE, eap, readfile_flags))) {
retval = FAIL;
+ }
- if (swap_exists_action == SEA_QUIT)
+ if (swap_exists_action == SEA_QUIT) {
retval = FAIL;
+ }
handle_swap_exists(&old_curbuf);
} else {
/* Read the modelines, but only to set window-local options. Any
@@ -2701,9 +2752,9 @@ int do_ecmd(
do_modelines(OPT_WINONLY);
apply_autocmds_retval(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf,
- &retval);
+ &retval);
apply_autocmds_retval(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf,
- &retval);
+ &retval);
}
check_arg_idx(curwin);
@@ -2719,10 +2770,11 @@ int do_ecmd(
newcol = curwin->w_cursor.col;
}
}
- if (curwin->w_topline == topline)
+ if (curwin->w_topline == topline) {
topline = 0;
+ }
- /* Even when cursor didn't move we need to recompute topline. */
+ // Even when cursor didn't move we need to recompute topline.
changed_line_abv_curs();
maketitle();
@@ -2738,28 +2790,31 @@ int do_ecmd(
/* If the window options were changed may need to set the spell language.
* Can only do this after the buffer has been properly setup. */
- if (did_get_winopts && curwin->w_p_spell && *curwin->w_s->b_p_spl != NUL)
+ if (did_get_winopts && curwin->w_p_spell && *curwin->w_s->b_p_spl != NUL) {
(void)did_set_spelllang(curwin);
+ }
if (command == NULL) {
- if (newcol >= 0) { /* position set by autocommands */
+ if (newcol >= 0) { // position set by autocommands
curwin->w_cursor.lnum = newlnum;
curwin->w_cursor.col = newcol;
check_cursor();
- } else if (newlnum > 0) { /* line number from caller or old position */
+ } else if (newlnum > 0) { // line number from caller or old position
curwin->w_cursor.lnum = newlnum;
check_cursor_lnum();
if (solcol >= 0 && !p_sol) {
- /* 'sol' is off: Use last known column. */
+ // 'sol' is off: Use last known column.
curwin->w_cursor.col = solcol;
check_cursor_col();
curwin->w_cursor.coladd = 0;
curwin->w_set_curswant = TRUE;
- } else
+ } else {
beginline(BL_SOL | BL_FIX);
- } else { /* no line number, go to last line in Ex mode */
- if (exmode_active)
+ }
+ } else { // no line number, go to last line in Ex mode
+ if (exmode_active) {
curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ }
beginline(BL_WHITE | BL_FIX);
}
}
@@ -2772,16 +2827,17 @@ int do_ecmd(
* Do this after setting the cursor.
*/
if (oldbuf
- && !auto_buf
- ) {
+ && !auto_buf) {
int msg_scroll_save = msg_scroll;
/* Obey the 'O' flag in 'cpoptions': overwrite any previous file
* message. */
- if (shortmess(SHM_OVERALL) && !exiting && p_verbose == 0)
+ if (shortmess(SHM_OVERALL) && !exiting && p_verbose == 0) {
msg_scroll = FALSE;
- if (!msg_scroll) /* wait a bit when overwriting an error msg */
+ }
+ if (!msg_scroll) { // wait a bit when overwriting an error msg
check_for_delay(FALSE);
+ }
msg_start();
msg_scroll = msg_scroll_save;
msg_scrolled_ign = TRUE;
@@ -2795,11 +2851,13 @@ int do_ecmd(
curbuf->b_last_used = time(NULL);
- if (command != NULL)
+ if (command != NULL) {
do_cmdline(command, NULL, NULL, DOCMD_VERBOSE);
+ }
- if (curbuf->b_kmap_state & KEYMAP_INIT)
+ if (curbuf->b_kmap_state & KEYMAP_INIT) {
(void)keymap_init();
+ }
RedrawingDisabled--;
did_inc_redrawing_disabled = false;
@@ -2818,7 +2876,7 @@ int do_ecmd(
need_start_insertmode = true;
}
- /* Change directories when the 'acd' option is set. */
+ // Change directories when the 'acd' option is set.
do_autochdir();
@@ -2840,13 +2898,13 @@ theend:
static void delbuf_msg(char_u *name)
{
EMSG2(_("E143: Autocommands unexpectedly deleted new buffer %s"),
- name == NULL ? (char_u *)"" : name);
+ name == NULL ? (char_u *)"" : name);
xfree(name);
au_new_curbuf.br_buf = NULL;
au_new_curbuf.br_buf_free_count = 0;
}
-static int append_indent = 0; /* autoindent for first line */
+static int append_indent = 0; // autoindent for first line
/*
* ":insert" and ":append", also used by ":change"
@@ -2861,24 +2919,29 @@ void ex_append(exarg_T *eap)
int vcol;
int empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
- /* the ! flag toggles autoindent */
- if (eap->forceit)
+ // the ! flag toggles autoindent
+ if (eap->forceit) {
curbuf->b_p_ai = !curbuf->b_p_ai;
+ }
- /* First autoindent comes from the line we start on */
- if (eap->cmdidx != CMD_change && curbuf->b_p_ai && lnum > 0)
+ // First autoindent comes from the line we start on
+ if (eap->cmdidx != CMD_change && curbuf->b_p_ai && lnum > 0) {
append_indent = get_indent_lnum(lnum);
+ }
- if (eap->cmdidx != CMD_append)
+ if (eap->cmdidx != CMD_append) {
--lnum;
+ }
// when the buffer is empty need to delete the dummy line
- if (empty && lnum == 1)
+ if (empty && lnum == 1) {
lnum = 0;
+ }
- State = INSERT; /* behave like in Insert mode */
- if (curbuf->b_p_iminsert == B_IMODE_LMAP)
+ State = INSERT; // behave like in Insert mode
+ if (curbuf->b_p_iminsert == B_IMODE_LMAP) {
State |= LANGMAP;
+ }
for (;; ) {
msg_scroll = TRUE;
@@ -2887,17 +2950,20 @@ void ex_append(exarg_T *eap)
if (append_indent >= 0) {
indent = append_indent;
append_indent = -1;
- } else if (lnum > 0)
+ } else if (lnum > 0) {
indent = get_indent_lnum(lnum);
+ }
}
if (eap->getline == NULL) {
/* No getline() function, use the lines that follow. This ends
* when there is no more. */
- if (eap->nextcmd == NULL || *eap->nextcmd == NUL)
+ if (eap->nextcmd == NULL || *eap->nextcmd == NUL) {
break;
+ }
p = vim_strchr(eap->nextcmd, NL);
- if (p == NULL)
+ if (p == NULL) {
p = eap->nextcmd + STRLEN(eap->nextcmd);
+ }
theline = vim_strnsave(eap->nextcmd, p - eap->nextcmd);
if (*p != NUL) {
p++;
@@ -2908,24 +2974,25 @@ void ex_append(exarg_T *eap)
// when getline() returns.
int save_State = State;
State = CMDLINE;
- theline = eap->getline(
- eap->cstack->cs_looplevel > 0 ? -1 :
- NUL, eap->cookie, indent, true);
+ theline = eap->getline(eap->cstack->cs_looplevel > 0 ? -1 :
+ NUL, eap->cookie, indent, true);
State = save_State;
}
lines_left = Rows - 1;
- if (theline == NULL)
+ if (theline == NULL) {
break;
+ }
- /* Look for the "." after automatic indent. */
+ // Look for the "." after automatic indent.
vcol = 0;
for (p = theline; indent > vcol; ++p) {
- if (*p == ' ')
+ if (*p == ' ') {
++vcol;
- else if (*p == TAB)
+ } else if (*p == TAB) {
vcol += 8 - vcol % 8;
- else
+ } else {
break;
+ }
}
if ((p[0] == '.' && p[1] == NUL)
|| (!did_undo && u_save(lnum, lnum + 1 + (empty ? 1 : 0))
@@ -2934,9 +3001,10 @@ void ex_append(exarg_T *eap)
break;
}
- /* don't use autoindent if nothing was typed. */
- if (p[0] == NUL)
+ // don't use autoindent if nothing was typed.
+ if (p[0] == NUL) {
theline[0] = NUL;
+ }
did_undo = true;
ml_append(lnum, theline, (colnr_T)0, false);
@@ -2952,8 +3020,9 @@ void ex_append(exarg_T *eap)
}
State = NORMAL;
- if (eap->forceit)
+ if (eap->forceit) {
curbuf->b_p_ai = !curbuf->b_p_ai;
+ }
/* "start" is set to eap->line2+1 unless that position is invalid (when
* eap->line2 pointed to the end of the buffer and nothing was appended)
@@ -2961,8 +3030,9 @@ void ex_append(exarg_T *eap)
* it is the same than "start" -- Acevedo */
curbuf->b_op_start.lnum = (eap->line2 < curbuf->b_ml.ml_line_count) ?
eap->line2 + 1 : curbuf->b_ml.ml_line_count;
- if (eap->cmdidx != CMD_append)
+ if (eap->cmdidx != CMD_append) {
--curbuf->b_op_start.lnum;
+ }
curbuf->b_op_end.lnum = (eap->line2 < lnum)
? lnum : curbuf->b_op_start.lnum;
curbuf->b_op_start.col = curbuf->b_op_end.col = 0;
@@ -2982,24 +3052,27 @@ void ex_change(exarg_T *eap)
linenr_T lnum;
if (eap->line2 >= eap->line1
- && u_save(eap->line1 - 1, eap->line2 + 1) == FAIL)
+ && u_save(eap->line1 - 1, eap->line2 + 1) == FAIL) {
return;
+ }
- /* the ! flag toggles autoindent */
- if (eap->forceit ? !curbuf->b_p_ai : curbuf->b_p_ai)
+ // the ! flag toggles autoindent
+ if (eap->forceit ? !curbuf->b_p_ai : curbuf->b_p_ai) {
append_indent = get_indent_lnum(eap->line1);
+ }
for (lnum = eap->line2; lnum >= eap->line1; --lnum) {
- if (curbuf->b_ml.ml_flags & ML_EMPTY) /* nothing to delete */
+ if (curbuf->b_ml.ml_flags & ML_EMPTY) { // nothing to delete
break;
+ }
ml_delete(eap->line1, false);
}
- /* make sure the cursor is not beyond the end of the file now */
+ // make sure the cursor is not beyond the end of the file now
check_cursor_lnum();
deleted_lines_mark(eap->line1, (long)(eap->line2 - lnum));
- /* ":append" on the line above the deleted lines. */
+ // ":append" on the line above the deleted lines.
eap->line2 = eap->line1;
ex_append(eap);
}
@@ -3030,10 +3103,12 @@ void ex_z(exarg_T *eap)
x = eap->arg;
kind = x;
if (*kind == '-' || *kind == '+' || *kind == '='
- || *kind == '^' || *kind == '.')
+ || *kind == '^' || *kind == '.') {
++x;
- while (*x == '-' || *x == '+')
+ }
+ while (*x == '-' || *x == '+') {
++x;
+ }
if (*x != 0) {
if (!ascii_isdigit(*x)) {
@@ -3053,10 +3128,12 @@ void ex_z(exarg_T *eap)
}
}
- /* the number of '-' and '+' multiplies the distance */
- if (*kind == '-' || *kind == '+')
- for (x = kind + 1; *x == *kind; ++x)
+ // the number of '-' and '+' multiplies the distance
+ if (*kind == '-' || *kind == '+') {
+ for (x = kind + 1; *x == *kind; ++x) {
;
+ }
+ }
switch (*kind) {
case '-':
@@ -3084,22 +3161,25 @@ void ex_z(exarg_T *eap)
curs = end;
break;
- default: /* '+' */
+ default: // '+'
start = lnum;
- if (*kind == '+')
+ if (*kind == '+') {
start += bigness * (linenr_T)(x - kind - 1) + 1;
- else if (eap->addr_count == 0)
+ } else if (eap->addr_count == 0) {
++start;
+ }
end = start + bigness - 1;
curs = end;
break;
}
- if (start < 1)
+ if (start < 1) {
start = 1;
+ }
- if (end > curbuf->b_ml.ml_line_count)
+ if (end > curbuf->b_ml.ml_line_count) {
end = curbuf->b_ml.ml_line_count;
+ }
if (curs > curbuf->b_ml.ml_line_count) {
curs = curbuf->b_ml.ml_line_count;
@@ -3111,8 +3191,9 @@ void ex_z(exarg_T *eap)
if (minus && i == lnum) {
msg_putchar('\n');
- for (j = 1; j < Columns; j++)
+ for (j = 1; j < Columns; j++) {
msg_putchar('-');
+ }
}
print_line(i, eap->flags & EXFLAG_NR, eap->flags & EXFLAG_LIST);
@@ -3120,8 +3201,9 @@ void ex_z(exarg_T *eap)
if (minus && i == lnum) {
msg_putchar('\n');
- for (j = 1; j < Columns; j++)
+ for (j = 1; j < Columns; j++) {
msg_putchar('-');
+ }
}
}
@@ -3155,7 +3237,7 @@ int check_secure(void)
}
/// Previous substitute replacement string
-static SubReplacementString old_sub = {NULL, 0, NULL};
+static SubReplacementString old_sub = { NULL, 0, NULL };
static int global_need_beginline; // call beginline() after ":g"
@@ -3192,8 +3274,7 @@ void sub_set_replacement(SubReplacementString sub)
/// @param[in] save Save pattern to options, history
///
/// @returns true if :substitute can be replaced with a join command
-static bool sub_joining_lines(exarg_T *eap, char_u *pat, char_u *sub,
- char_u *cmd, bool save)
+static bool sub_joining_lines(exarg_T *eap, char_u *pat, char_u *sub, char_u *cmd, bool save)
FUNC_ATTR_NONNULL_ARG(1, 3, 4)
{
// TODO(vim): find a generic solution to make line-joining operations more
@@ -3220,8 +3301,8 @@ static bool sub_joining_lines(exarg_T *eap, char_u *pat, char_u *sub,
// The number of lines joined is the number of lines in the range
linenr_T joined_lines_count = eap->line2 - eap->line1 + 1
- // plus one extra line if not at the end of file.
- + (eap->line2 < curbuf->b_ml.ml_line_count ? 1 : 0);
+ // plus one extra line if not at the end of file.
+ + (eap->line2 < curbuf->b_ml.ml_line_count ? 1 : 0);
if (joined_lines_count > 1) {
do_join(joined_lines_count, FALSE, TRUE, FALSE, true);
sub_nsubs = joined_lines_count - 1;
@@ -3288,8 +3369,7 @@ static char_u *sub_grow_buf(char_u **new_start, int needed_len)
/// @param[in,out] which_pat pattern type from which to get default search
///
/// @returns pointer to the end of the flags, which may be the end of the string
-static char_u *sub_parse_flags(char_u *cmd, subflags_T *subflags,
- int *which_pat)
+static char_u *sub_parse_flags(char_u *cmd, subflags_T *subflags, int *which_pat)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
{
// Find trailing options. When '&' is used, keep old options.
@@ -3361,8 +3441,7 @@ static int check_regexp_delim(int c)
///
/// @param do_buf_event If `true`, send buffer updates.
/// @return buffer used for 'inccommand' preview
-static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
- bool do_buf_event, handle_T bufnr)
+static buf_T *do_sub(exarg_T *eap, proftime_T timeout, bool do_buf_event, handle_T bufnr)
{
long i = 0;
regmmatch_T regmatch;
@@ -3407,12 +3486,12 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
}
start_nsubs = sub_nsubs;
- if (eap->cmdidx == CMD_tilde)
- which_pat = RE_LAST; /* use last used regexp */
- else
- which_pat = RE_SUBST; /* use last substitute regexp */
-
- /* new pattern and substitution */
+ if (eap->cmdidx == CMD_tilde) {
+ which_pat = RE_LAST; // use last used regexp
+ } else {
+ which_pat = RE_SUBST; // use last substitute regexp
+ }
+ // new pattern and substitution
if (eap->cmd[0] == 's' && *cmd != NUL && !ascii_iswhite(*cmd)
&& vim_strchr((char_u *)"0123456789cegriIp|\"", *cmd) == NULL) {
// don't accept alphanumeric for separator
@@ -3450,11 +3529,11 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
* Small incompatibility: vi sees '\n' as end of the command, but in
* Vim we want to use '\n' to find/substitute a NUL.
*/
- sub = cmd; /* remember the start of the substitution */
+ sub = cmd; // remember the start of the substitution
while (cmd[0]) {
- if (cmd[0] == delimiter) { /* end delimiter found */
- *cmd++ = NUL; /* replace it with a NUL */
+ if (cmd[0] == delimiter) { // end delimiter found
+ *cmd++ = NUL; // replace it with a NUL
break;
}
if (cmd[0] == '\\' && cmd[1] != 0) { // skip escaped characters
@@ -3465,18 +3544,18 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
if (!eap->skip && !preview) {
sub_set_replacement((SubReplacementString) {
- .sub = xstrdup((char *) sub),
+ .sub = xstrdup((char *)sub),
.timestamp = os_time(),
.additional_elements = NULL,
});
}
- } else if (!eap->skip) { /* use previous pattern and substitution */
- if (old_sub.sub == NULL) { /* there is no previous command */
+ } else if (!eap->skip) { // use previous pattern and substitution
+ if (old_sub.sub == NULL) { // there is no previous command
EMSG(_(e_nopresub));
return NULL;
}
- pat = NULL; /* search_regcomp() will use previous pattern */
- sub = (char_u *) old_sub.sub;
+ pat = NULL; // search_regcomp() will use previous pattern
+ sub = (char_u *)old_sub.sub;
/* Vi compatibility quirk: repeating with ":s" keeps the cursor in the
* last column after using "$". */
@@ -3502,15 +3581,16 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
}
eap->line1 = eap->line2;
eap->line2 += i - 1;
- if (eap->line2 > curbuf->b_ml.ml_line_count)
+ if (eap->line2 > curbuf->b_ml.ml_line_count) {
eap->line2 = curbuf->b_ml.ml_line_count;
+ }
}
/*
* check for trailing command or garbage
*/
cmd = skipwhite(cmd);
- if (*cmd && *cmd != '"') { /* if not end-of-line or comment */
+ if (*cmd && *cmd != '"') { // if not end-of-line or comment
eap->nextcmd = check_nextcmd(cmd);
if (eap->nextcmd == NULL) {
EMSG(_(e_trailing));
@@ -3580,29 +3660,29 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
/*
* The new text is build up step by step, to avoid too much
* copying. There are these pieces:
- * sub_firstline The old text, unmodified.
- * copycol Column in the old text where we started
- * looking for a match; from here old text still
- * needs to be copied to the new text.
- * matchcol Column number of the old text where to look
- * for the next match. It's just after the
- * previous match or one further.
- * prev_matchcol Column just after the previous match (if any).
- * Mostly equal to matchcol, except for the first
- * match and after skipping an empty match.
- * regmatch.*pos Where the pattern matched in the old text.
- * new_start The new text, all that has been produced so
- * far.
- * new_end The new text, where to append new text.
+ * sub_firstline The old text, unmodified.
+ * copycol Column in the old text where we started
+ * looking for a match; from here old text still
+ * needs to be copied to the new text.
+ * matchcol Column number of the old text where to look
+ * for the next match. It's just after the
+ * previous match or one further.
+ * prev_matchcol Column just after the previous match (if any).
+ * Mostly equal to matchcol, except for the first
+ * match and after skipping an empty match.
+ * regmatch.*pos Where the pattern matched in the old text.
+ * new_start The new text, all that has been produced so
+ * far.
+ * new_end The new text, where to append new text.
*
- * lnum The line number where we found the start of
- * the match. Can be below the line we searched
- * when there is a \n before a \zs in the
- * pattern.
- * sub_firstlnum The line number in the buffer where to look
- * for a match. Can be different from "lnum"
- * when the pattern or substitute string contains
- * line breaks.
+ * lnum The line number where we found the start of
+ * the match. Can be below the line we searched
+ * when there is a \n before a \zs in the
+ * pattern.
+ * sub_firstlnum The line number in the buffer where to look
+ * for a match. Can be different from "lnum"
+ * when the pattern or substitute string contains
+ * line breaks.
*
* Special situations:
* - When the substitute string contains a line break, the part up
@@ -3625,7 +3705,7 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
copycol = 0;
matchcol = 0;
- /* At first match, remember current cursor position. */
+ // At first match, remember current cursor position.
if (!got_match) {
setpcmark();
got_match = TRUE;
@@ -3721,8 +3801,9 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
did_sub = TRUE;
/* Skip the substitution, unless an expression is used,
* then it is evaluated in the sandbox. */
- if (!(sub[0] == '\\' && sub[1] == '='))
+ if (!(sub[0] == '\\' && sub[1] == '=')) {
goto skip;
+ }
}
if (subflags.do_ask && !preview) {
@@ -3732,7 +3813,7 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
* properly */
int save_State = State;
State = CONFIRM;
- setmouse(); /* disable mouse in xterm */
+ setmouse(); // disable mouse in xterm
curwin->w_cursor.col = regmatch.startpos[0].col;
if (curwin->w_p_crb) {
@@ -3741,8 +3822,9 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
/* When 'cpoptions' contains "u" don't sync undo when
* asking for confirmation. */
- if (vim_strchr(p_cpo, CPO_UNDO) != NULL)
+ if (vim_strchr(p_cpo, CPO_UNDO) != NULL) {
++no_u_sync;
+ }
/*
* Loop until 'y', 'n', 'q', CTRL-E or CTRL-Y typed.
@@ -3861,10 +3943,12 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
got_quit = true;
break;
}
- if (typed == 'n')
+ if (typed == 'n') {
break;
- if (typed == 'y')
+ }
+ if (typed == 'y') {
break;
+ }
if (typed == 'l') {
// last: replace and then stop
subflags.do_all = false;
@@ -3875,15 +3959,17 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
subflags.do_ask = false;
break;
}
- if (typed == Ctrl_E)
+ if (typed == Ctrl_E) {
scrollup_clamp();
- else if (typed == Ctrl_Y)
+ } else if (typed == Ctrl_Y) {
scrolldown_clamp();
+ }
}
State = save_State;
setmouse();
- if (vim_strchr(p_cpo, CPO_UNDO) != NULL)
+ if (vim_strchr(p_cpo, CPO_UNDO) != NULL) {
--no_u_sync;
+ }
if (typed == 'n') {
/* For a multi-line match, put matchcol at the NUL at
@@ -3897,8 +3983,9 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
}
goto skip;
}
- if (got_quit)
+ if (got_quit) {
goto skip;
+ }
}
/* Move the cursor to the start of the match, so that we can
@@ -3914,28 +4001,28 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout,
}
#define ADJUST_SUB_FIRSTLNUM() \
- do { \
- /* For a multi-line match, make a copy of the last matched */ \
- /* line and continue in that one. */ \
- if (nmatch > 1) { \
- sub_firstlnum += nmatch - 1; \
- xfree(sub_firstline); \
- sub_firstline = vim_strsave(ml_get(sub_firstlnum)); \
- /* When going beyond the last line, stop substituting. */ \
- if (sub_firstlnum <= line2) { \
- do_again = true; \
- } else { \
- subflags.do_all = false; \
- } \
- } \
- if (skip_match) { \
- /* Already hit end of the buffer, sub_firstlnum is one */ \
- /* less than what it ought to be. */ \
- xfree(sub_firstline); \
- sub_firstline = vim_strsave((char_u *)""); \
- copycol = 0; \
- } \
- } while (0)
+ do { \
+ /* For a multi-line match, make a copy of the last matched */ \
+ /* line and continue in that one. */ \
+ if (nmatch > 1) { \
+ sub_firstlnum += nmatch - 1; \
+ xfree(sub_firstline); \
+ sub_firstline = vim_strsave(ml_get(sub_firstlnum)); \
+ /* When going beyond the last line, stop substituting. */ \
+ if (sub_firstlnum <= line2) { \
+ do_again = true; \
+ } else { \
+ subflags.do_all = false; \
+ } \
+ } \
+ if (skip_match) { \
+ /* Already hit end of the buffer, sub_firstlnum is one */ \
+ /* less than what it ought to be. */ \
+ xfree(sub_firstline); \
+ sub_firstline = vim_strsave((char_u *)""); \
+ copycol = 0; \
+ } \
+ } while (0)
// Save the line numbers for the preview buffer
// NOTE: If the pattern matches a final newline, the next line will
@@ -4148,8 +4235,9 @@ skip:
* it in the buffer.
*/
++lnum;
- if (u_savedel(lnum, nmatch_tl) != OK)
+ if (u_savedel(lnum, nmatch_tl) != OK) {
break;
+ }
for (i = 0; i < nmatch_tl; i++) {
ml_delete(lnum, false);
}
@@ -4175,7 +4263,7 @@ skip:
}
sub_firstlnum = lnum;
- xfree(sub_firstline); /* free the temp buffer */
+ xfree(sub_firstline); // free the temp buffer
sub_firstline = new_start;
new_start = NULL;
matchcol = (colnr_T)STRLEN(sub_firstline) - matchcol;
@@ -4183,9 +4271,10 @@ skip:
- prev_matchcol;
copycol = 0;
}
- if (nmatch == -1 && !lastone)
+ if (nmatch == -1 && !lastone) {
nmatch = vim_regexec_multi(&regmatch, curwin, curbuf,
sub_firstlnum, matchcol, NULL, NULL);
+ }
/*
* 5. break if there isn't another match in this line
@@ -4194,23 +4283,24 @@ skip:
/* If the match found didn't start where we were
* searching, do the next search in the line where we
* found the match. */
- if (nmatch == -1)
+ if (nmatch == -1) {
lnum -= regmatch.startpos[0].lnum;
+ }
#define PUSH_PREVIEW_LINES() \
- do { \
- linenr_T match_lines = current_match.end.lnum \
- - current_match.start.lnum +1; \
- if (preview_lines.subresults.size > 0) { \
- linenr_T last = kv_last(preview_lines.subresults).end.lnum; \
- if (last == current_match.start.lnum) { \
- preview_lines.lines_needed += match_lines - 1; \
- } \
- } else { \
- preview_lines.lines_needed += match_lines; \
- } \
- kv_push(preview_lines.subresults, current_match); \
- } while (0)
+ do { \
+ linenr_T match_lines = current_match.end.lnum \
+ - current_match.start.lnum +1; \
+ if (preview_lines.subresults.size > 0) { \
+ linenr_T last = kv_last(preview_lines.subresults).end.lnum; \
+ if (last == current_match.start.lnum) { \
+ preview_lines.lines_needed += match_lines - 1; \
+ } \
+ } else { \
+ preview_lines.lines_needed += match_lines; \
+ } \
+ kv_push(preview_lines.subresults, current_match); \
+ } while (0)
// Push the match to preview_lines.
PUSH_PREVIEW_LINES();
@@ -4253,7 +4343,7 @@ skip:
do_buf_event);
}
- xfree(sub_firstline); /* may have to free allocated copy of the line */
+ xfree(sub_firstline); // may have to free allocated copy of the line
// ":s/pat//n" doesn't move the cursor
if (subflags.do_count) {
@@ -4261,7 +4351,7 @@ skip:
}
if (sub_nsubs > start_nsubs) {
- /* Set the '[ and '] marks. */
+ // Set the '[ and '] marks.
curbuf->b_op_start.lnum = eap->line1;
curbuf->b_op_end.lnum = line2;
curbuf->b_op_start.col = curbuf->b_op_end.col = 0;
@@ -4340,15 +4430,13 @@ skip:
#undef PUSH_PREVIEW_LINES
} // NOLINT(readability/fn_size)
-/*
- * Give message for number of substitutions.
- * Can also be used after a ":global" command.
- * Return TRUE if a message was given.
- */
-bool
-do_sub_msg (
- bool count_only /* used 'n' flag for ":s" */
-)
+/// Give message for number of substitutions.
+/// Can also be used after a ":global" command.
+///
+/// @param count_only used 'n' flag for ":s"
+///
+/// @return TRUE if a message was given.
+bool do_sub_msg(bool count_only)
{
/*
* Only report substitutions when:
@@ -4359,27 +4447,31 @@ do_sub_msg (
if (((sub_nsubs > p_report && (KeyTyped || sub_nlines > 1 || p_report < 1))
|| count_only)
&& messaging()) {
- if (got_int)
+ if (got_int) {
STRCPY(msg_buf, _("(Interrupted) "));
- else
+ } else {
*msg_buf = NUL;
- if (sub_nsubs == 1)
+ }
+ if (sub_nsubs == 1) {
vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
- "%s", count_only ? _("1 match") : _("1 substitution"));
- else
+ "%s", count_only ? _("1 match") : _("1 substitution"));
+ } else {
vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
- count_only ? _("%" PRId64 " matches")
- : _("%" PRId64 " substitutions"),
- (int64_t)sub_nsubs);
- if (sub_nlines == 1)
+ count_only ? _("%" PRId64 " matches")
+ : _("%" PRId64 " substitutions"),
+ (int64_t)sub_nsubs);
+ }
+ if (sub_nlines == 1) {
vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
- "%s", _(" on 1 line"));
- else
+ "%s", _(" on 1 line"));
+ } else {
vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
- _(" on %" PRId64 " lines"), (int64_t)sub_nlines);
- if (msg(msg_buf))
- /* save message to display it after redraw */
+ _(" on %" PRId64 " lines"), (int64_t)sub_nlines);
+ }
+ if (msg(msg_buf)) {
+ // save message to display it after redraw
set_keep_msg(msg_buf, 0);
+ }
return true;
}
if (got_int) {
@@ -4418,12 +4510,12 @@ static void global_exe_one(char_u *const cmd, const linenr_T lnum)
*/
void ex_global(exarg_T *eap)
{
- linenr_T lnum; /* line number according to old situation */
+ linenr_T lnum; // line number according to old situation
int ndone = 0;
- int type; /* first char of cmd: 'v' or 'g' */
- char_u *cmd; /* command argument */
+ int type; // first char of cmd: 'v' or 'g'
+ char_u *cmd; // command argument
- char_u delim; /* delimiter, normally '/' */
+ char_u delim; // delimiter, normally '/'
char_u *pat;
regmmatch_T regmatch;
int match;
@@ -4438,17 +4530,18 @@ void ex_global(exarg_T *eap)
return;
}
- if (eap->forceit) /* ":global!" is like ":vglobal" */
+ if (eap->forceit) { // ":global!" is like ":vglobal"
type = 'v';
- else
+ } else {
type = *eap->cmd;
+ }
cmd = eap->arg;
- which_pat = RE_LAST; /* default: use last used regexp */
+ which_pat = RE_LAST; // default: use last used regexp
/*
* undocumented vi feature:
- * "\/" and "\?": use previous search pattern.
- * "\&": use previous substitute pattern.
+ * "\/" and "\?": use previous search pattern.
+ * "\&": use previous substitute pattern.
*/
if (*cmd == '\\') {
++cmd;
@@ -4456,10 +4549,11 @@ void ex_global(exarg_T *eap)
EMSG(_(e_backslash));
return;
}
- if (*cmd == '&')
- which_pat = RE_SUBST; /* use previous substitute pattern */
- else
- which_pat = RE_SEARCH; /* use previous search pattern */
+ if (*cmd == '&') {
+ which_pat = RE_SUBST; // use previous substitute pattern
+ } else {
+ which_pat = RE_SEARCH; // use previous search pattern
+ }
++cmd;
pat = (char_u *)"";
} else if (*cmd == NUL) {
@@ -4468,13 +4562,15 @@ void ex_global(exarg_T *eap)
} else if (check_regexp_delim(*cmd) == FAIL) {
return;
} else {
- delim = *cmd; /* get the delimiter */
- if (delim)
- ++cmd; /* skip delimiter if there is one */
- pat = cmd; /* remember start of pattern */
+ delim = *cmd; // get the delimiter
+ if (delim) {
+ ++cmd; // skip delimiter if there is one
+ }
+ pat = cmd; // remember start of pattern
cmd = skip_regexp(cmd, delim, p_magic, &eap->arg);
- if (cmd[0] == delim) /* end delimiter found */
- *cmd++ = NUL; /* replace it with a NUL */
+ if (cmd[0] == delim) { // end delimiter found
+ *cmd++ = NUL; // replace it with a NUL
+ }
}
if (search_regcomp(pat, RE_BOTH, which_pat, SEARCH_HIS, &regmatch) == FAIL) {
@@ -4578,19 +4674,17 @@ void global_exe(char_u *cmd)
#if defined(EXITFREE)
void free_old_sub(void)
{
- sub_set_replacement((SubReplacementString) {NULL, 0, NULL});
+ sub_set_replacement((SubReplacementString) { NULL, 0, NULL });
}
#endif
-/*
- * Set up for a tagpreview.
- * Return TRUE when it was created.
- */
-bool
-prepare_tagpreview (
- bool undo_sync /* sync undo when leaving the window */
-)
+/// Set up for a tagpreview.
+///
+/// @param undo_sync sync undo when leaving the window
+///
+/// @return TRUE when it was created.
+bool prepare_tagpreview(bool undo_sync)
{
/*
* If there is already a preview window open, use that one.
@@ -4609,8 +4703,9 @@ prepare_tagpreview (
* There is no preview window open yet. Create one.
*/
if (win_split(g_do_tagpreview > 0 ? g_do_tagpreview : 0, 0)
- == FAIL)
+ == FAIL) {
return false;
+ }
curwin->w_p_pvw = TRUE;
curwin->w_p_wfh = TRUE;
RESET_BINDING(curwin); /* don't take over 'scrollbind'
@@ -4633,7 +4728,7 @@ void ex_help(exarg_T *eap)
{
char_u *arg;
char_u *tag;
- FILE *helpfd; /* file descriptor of help file */
+ FILE *helpfd; // file descriptor of help file
int n;
int i;
win_T *wp;
@@ -4667,49 +4762,57 @@ void ex_help(exarg_T *eap)
return;
}
- if (eap->skip) /* not executing commands */
+ if (eap->skip) { // not executing commands
return;
- } else
+ }
+ } else {
arg = (char_u *)"";
+ }
- /* remove trailing blanks */
+ // remove trailing blanks
p = arg + STRLEN(arg) - 1;
- while (p > arg && ascii_iswhite(*p) && p[-1] != '\\')
+ while (p > arg && ascii_iswhite(*p) && p[-1] != '\\') {
*p-- = NUL;
+ }
- /* Check for a specified language */
+ // Check for a specified language
lang = check_help_lang(arg);
- /* When no argument given go to the index. */
- if (*arg == NUL)
+ // When no argument given go to the index.
+ if (*arg == NUL) {
arg = (char_u *)"help.txt";
+ }
/*
* Check if there is a match for the argument.
*/
n = find_help_tags(arg, &num_matches, &matches,
- eap != NULL && eap->forceit);
+ eap != NULL && eap->forceit);
i = 0;
- if (n != FAIL && lang != NULL)
- /* Find first item with the requested language. */
+ if (n != FAIL && lang != NULL) {
+ // Find first item with the requested language.
for (i = 0; i < num_matches; ++i) {
len = (int)STRLEN(matches[i]);
if (len > 3 && matches[i][len - 3] == '@'
- && STRICMP(matches[i] + len - 2, lang) == 0)
+ && STRICMP(matches[i] + len - 2, lang) == 0) {
break;
+ }
}
+ }
if (i >= num_matches || n == FAIL) {
- if (lang != NULL)
+ if (lang != NULL) {
EMSG3(_("E661: Sorry, no '%s' help for %s"), lang, arg);
- else
+ } else {
EMSG2(_("E149: Sorry, no help for %s"), arg);
- if (n != FAIL)
+ }
+ if (n != FAIL) {
FreeWild(num_matches, matches);
+ }
return;
}
- /* The first match (in the requested language) is the best match. */
+ // The first match (in the requested language) is the best match.
tag = vim_strsave(matches[i]);
FreeWild(num_matches, matches);
@@ -4718,8 +4821,7 @@ void ex_help(exarg_T *eap)
* Always open a new one for ":tab help".
*/
if (!bt_help(curwin->w_buffer)
- || cmdmod.tab != 0
- ) {
+ || cmdmod.tab != 0) {
if (cmdmod.tab != 0) {
wp = NULL;
} else {
@@ -4747,13 +4849,16 @@ void ex_help(exarg_T *eap)
* narrow. */
n = WSP_HELP;
if (cmdmod.split == 0 && curwin->w_width != Columns
- && curwin->w_width < 80)
+ && curwin->w_width < 80) {
n |= WSP_TOP;
- if (win_split(0, n) == FAIL)
+ }
+ if (win_split(0, n) == FAIL) {
goto erret;
+ }
- if (curwin->w_height < p_hh)
+ if (curwin->w_height < p_hh) {
win_setheight((int)p_hh);
+ }
/*
* Open help file (do_ecmd() will set b_help flag, readfile() will
@@ -4762,18 +4867,19 @@ void ex_help(exarg_T *eap)
*/
alt_fnum = curbuf->b_fnum;
(void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL,
- ECMD_HIDE + ECMD_SET_HELP,
- NULL /* buffer is still open, don't store info */
- );
- if (!cmdmod.keepalt)
+ ECMD_HIDE + ECMD_SET_HELP,
+ NULL // buffer is still open, don't store info
+ );
+ if (!cmdmod.keepalt) {
curwin->w_alt_fnum = alt_fnum;
+ }
empty_fnum = curbuf->b_fnum;
}
}
- if (!p_im)
- restart_edit = 0; /* don't want insert mode in help file */
-
+ if (!p_im) {
+ restart_edit = 0; // don't want insert mode in help file
+ }
/* Restore KeyTyped, setting 'filetype=help' may reset it.
* It is needed for do_tag top open folds under the cursor. */
KeyTyped = old_KeyTyped;
@@ -4790,9 +4896,10 @@ void ex_help(exarg_T *eap)
}
}
- /* keep the previous alternate file */
- if (alt_fnum != 0 && curwin->w_alt_fnum == empty_fnum && !cmdmod.keepalt)
+ // keep the previous alternate file
+ if (alt_fnum != 0 && curwin->w_alt_fnum == empty_fnum && !cmdmod.keepalt) {
curwin->w_alt_fnum = alt_fnum;
+ }
erret:
xfree(tag);
@@ -4810,37 +4917,37 @@ char_u *check_help_lang(char_u *arg)
if (len >= 3 && arg[len - 3] == '@' && ASCII_ISALPHA(arg[len - 2])
&& ASCII_ISALPHA(arg[len - 1])) {
- arg[len - 3] = NUL; /* remove the '@' */
+ arg[len - 3] = NUL; // remove the '@'
return arg + len - 2;
}
return NULL;
}
-/*
- * Return a heuristic indicating how well the given string matches. The
- * smaller the number, the better the match. This is the order of priorities,
- * from best match to worst match:
- * - Match with least alphanumeric characters is better.
- * - Match with least total characters is better.
- * - Match towards the start is better.
- * - Match starting with "+" is worse (feature instead of command)
- * Assumption is made that the matched_string passed has already been found to
- * match some string for which help is requested. webb.
- */
-int
-help_heuristic(
- char_u *matched_string,
- int offset, // offset for match
- int wrong_case // no matching case
-)
+/// Return a heuristic indicating how well the given string matches. The
+/// smaller the number, the better the match. This is the order of priorities,
+/// from best match to worst match:
+/// - Match with least alphanumeric characters is better.
+/// - Match with least total characters is better.
+/// - Match towards the start is better.
+/// - Match starting with "+" is worse (feature instead of command)
+/// Assumption is made that the matched_string passed has already been found to
+/// match some string for which help is requested. webb.
+///
+/// @param offset offset for match
+/// @param wrong_case no matching case
+///
+/// @return a heuristic indicating how well the given string matches.
+int help_heuristic(char_u *matched_string, int offset, int wrong_case)
{
int num_letters;
char_u *p;
num_letters = 0;
- for (p = matched_string; *p; p++)
- if (ASCII_ISALNUM(*p))
+ for (p = matched_string; *p; p++) {
+ if (ASCII_ISALNUM(*p)) {
num_letters++;
+ }
+ }
/*
* Multiply the number of letters by 100 to give it a much bigger
@@ -4887,39 +4994,38 @@ static int help_compare(const void *s1, const void *s2)
// the number of matches in num_matches.
// The matches will be sorted with a "best" match algorithm.
// When "keep_lang" is true try keeping the language of the current buffer.
-int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches,
- bool keep_lang)
+int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches, bool keep_lang)
{
int i;
static const char *(mtable[]) = {
- "*", "g*", "[*", "]*",
- "/*", "/\\*", "\"*", "**",
- "/\\(\\)", "/\\%(\\)",
- "?", ":?", "?<CR>", "g?", "g?g?", "g??",
- "-?", "q?", "v_g?",
- "/\\?", "/\\z(\\)", "\\=", ":s\\=",
- "[count]", "[quotex]",
- "[range]", ":[range]",
- "[pattern]", "\\|", "\\%$",
- "s/\\~", "s/\\U", "s/\\L",
- "s/\\1", "s/\\2", "s/\\3", "s/\\9"
+ "*", "g*", "[*", "]*",
+ "/*", "/\\*", "\"*", "**",
+ "/\\(\\)", "/\\%(\\)",
+ "?", ":?", "?<CR>", "g?", "g?g?", "g??",
+ "-?", "q?", "v_g?",
+ "/\\?", "/\\z(\\)", "\\=", ":s\\=",
+ "[count]", "[quotex]",
+ "[range]", ":[range]",
+ "[pattern]", "\\|", "\\%$",
+ "s/\\~", "s/\\U", "s/\\L",
+ "s/\\1", "s/\\2", "s/\\3", "s/\\9"
};
static const char *(rtable[]) = {
- "star", "gstar", "[star", "]star",
- "/star", "/\\\\star", "quotestar", "starstar",
- "/\\\\(\\\\)", "/\\\\%(\\\\)",
- "?", ":?", "?<CR>", "g?", "g?g?", "g??",
- "-?", "q?", "v_g?",
- "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
- "\\[count]", "\\[quotex]",
- "\\[range]", ":\\[range]",
- "\\[pattern]", "\\\\bar", "/\\\\%\\$",
- "s/\\\\\\~", "s/\\\\U", "s/\\\\L",
- "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"
+ "star", "gstar", "[star", "]star",
+ "/star", "/\\\\star", "quotestar", "starstar",
+ "/\\\\(\\\\)", "/\\\\%(\\\\)",
+ "?", ":?", "?<CR>", "g?", "g?g?", "g??",
+ "-?", "q?", "v_g?",
+ "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+ "\\[count]", "\\[quotex]",
+ "\\[range]", ":\\[range]",
+ "\\[pattern]", "\\\\bar", "/\\\\%\\$",
+ "s/\\\\\\~", "s/\\\\U", "s/\\\\L",
+ "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"
};
static const char *(expr_table[]) = {
- "!=?", "!~?", "<=?", "<?", "==?", "=~?",
- ">=?", ">?", "is?", "isnot?"
+ "!=?", "!~?", "<=?", "<?", "==?", "=~?",
+ ">=?", ">?", "is?", "isnot?"
};
char_u *d = IObuff; // assume IObuff is long enough!
@@ -4952,7 +5058,7 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches,
}
}
- if (i < 0) { /* no match in table */
+ if (i < 0) { // no match in table
/* Replace "\S" with "/\\S", etc. Otherwise every tag is matched.
* Also replace "\%^" and "\%(", they match every tag too.
* Also "\zs", "\z1", etc.
@@ -4964,9 +5070,10 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches,
&& arg[2] != NUL))) {
STRCPY(d, "/\\\\");
STRCPY(d + 3, arg + 1);
- /* Check for "/\\_$", should be "/\\_\$" */
- if (d[3] == '_' && d[4] == '$')
+ // Check for "/\\_$", should be "/\\_\$"
+ if (d[3] == '_' && d[4] == '$') {
STRCPY(d + 4, "\\$");
+ }
} else {
/* Replace:
* "[:...:]" with "\[:...:]"
@@ -4975,12 +5082,13 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches,
*/
if ((arg[0] == '[' && (arg[1] == ':'
|| (arg[1] == '+' && arg[2] == '+')))
- || (arg[0] == '\\' && arg[1] == '{'))
+ || (arg[0] == '\\' && arg[1] == '{')) {
*d++ = '\\';
+ }
// If tag starts with "('", skip the "(". Fixes CTRL-] on ('option'.
if (*arg == '(' && arg[1] == '\'') {
- arg++;
+ arg++;
}
for (const char_u *s = arg; *s; s++) {
// Replace "|" with "bar" and '"' with "quote" to match the name of
@@ -4993,19 +5101,24 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches,
break;
}
switch (*s) {
- case '|': STRCPY(d, "bar");
+ case '|':
+ STRCPY(d, "bar");
d += 3;
continue;
- case '"': STRCPY(d, "quote");
+ case '"':
+ STRCPY(d, "quote");
d += 5;
continue;
- case '*': *d++ = '.';
+ case '*':
+ *d++ = '.';
break;
- case '?': *d++ = '.';
+ case '?':
+ *d++ = '.';
continue;
case '$':
case '.':
- case '~': *d++ = '\\';
+ case '~':
+ *d++ = '\\';
break;
}
@@ -5016,31 +5129,36 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches,
*/
if (*s < ' ' || (*s == '^' && s[1] && (ASCII_ISALPHA(s[1])
|| vim_strchr((char_u *)
- "?@[\\]^",
- s[1]) != NULL))) {
- if (d > IObuff && d[-1] != '_' && d[-1] != '\\')
- *d++ = '_'; /* prepend a '_' to make x_CTRL-x */
+ "?@[\\]^",
+ s[1]) != NULL))) {
+ if (d > IObuff && d[-1] != '_' && d[-1] != '\\') {
+ *d++ = '_'; // prepend a '_' to make x_CTRL-x
+ }
STRCPY(d, "CTRL-");
d += 5;
if (*s < ' ') {
*d++ = *s + '@';
- if (d[-1] == '\\')
- *d++ = '\\'; /* double a backslash */
- } else
+ if (d[-1] == '\\') {
+ *d++ = '\\'; // double a backslash
+ }
+ } else {
*d++ = *++s;
- if (s[1] != NUL && s[1] != '_')
- *d++ = '_'; /* append a '_' */
+ }
+ if (s[1] != NUL && s[1] != '_') {
+ *d++ = '_'; // append a '_'
+ }
continue;
- } else if (*s == '^') /* "^" or "CTRL-^" or "^_" */
+ } else if (*s == '^') { // "^" or "CTRL-^" or "^_"
*d++ = '\\';
-
+ }
/*
* Insert a backslash before a backslash after a slash, for search
* pattern tags: "/\|" --> "/\\|".
*/
else if (s[0] == '\\' && s[1] != '\\'
- && *arg == '/' && s == arg + 1)
+ && *arg == '/' && s == arg + 1) {
*d++ = '\\';
+ }
/* "CTRL-\_" -> "CTRL-\\_" to avoid the special meaning of "\_" in
* "CTRL-\_CTRL-N" */
@@ -5072,16 +5190,16 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches,
if (*IObuff == '`') {
if (d > IObuff + 2 && d[-1] == '`') {
- /* remove the backticks from `command` */
+ // remove the backticks from `command`
memmove(IObuff, IObuff + 1, STRLEN(IObuff));
d[-2] = NUL;
} else if (d > IObuff + 3 && d[-2] == '`' && d[-1] == ',') {
- /* remove the backticks and comma from `command`, */
+ // remove the backticks and comma from `command`,
memmove(IObuff, IObuff + 1, STRLEN(IObuff));
d[-3] = NUL;
} else if (d > IObuff + 4 && d[-3] == '`'
&& d[-2] == '\\' && d[-1] == '.') {
- /* remove the backticks and dot from `command`\. */
+ // remove the backticks and dot from `command`\.
memmove(IObuff, IObuff + 1, STRLEN(IObuff));
d[-4] = NUL;
}
@@ -5100,10 +5218,11 @@ int find_help_tags(const char_u *arg, int *num_matches, char_u ***matches,
/* Sort the matches found on the heuristic number that is after the
* tag name. */
qsort((void *)*matches, (size_t)*num_matches,
- sizeof(char_u *), help_compare);
- /* Delete more than TAG_MANY to reduce the size of the listing. */
- while (*num_matches > TAG_MANY)
+ sizeof(char_u *), help_compare);
+ // Delete more than TAG_MANY to reduce the size of the listing.
+ while (*num_matches > TAG_MANY) {
xfree((*matches)[--*num_matches]);
+ }
}
return OK;
}
@@ -5170,7 +5289,7 @@ void fix_help_buffer(void)
line = ml_get_buf(curbuf, lnum, false);
const size_t len = STRLEN(line);
if (in_example && len > 0 && !ascii_iswhite(line[0])) {
- /* End of example: non-white or '<' in first column. */
+ // End of example: non-white or '<' in first column.
if (line[0] == '<') {
// blank-out a '<' in the first column
line = ml_get_buf(curbuf, lnum, true);
@@ -5203,8 +5322,7 @@ void fix_help_buffer(void)
&& ASCII_ISALPHA(fname[5])
&& ASCII_ISALPHA(fname[6])
&& TOLOWER_ASC(fname[7]) == 'x'
- && fname[8] == NUL)
- ) {
+ && fname[8] == NUL)) {
for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; lnum++) {
line = ml_get_buf(curbuf, lnum, false);
if (strstr((char *)line, "*local-additions*") == NULL) {
@@ -5235,9 +5353,9 @@ void fix_help_buffer(void)
// Note: We cannot just do `&NameBuff` because it is a statically sized array
// so `NameBuff == &NameBuff` according to C semantics.
- char_u *buff_list[1] = {NameBuff};
+ char_u *buff_list[1] = { NameBuff };
if (gen_expand_wildcards(1, buff_list, &fcount,
- &fnames, EW_FILE|EW_SILENT) == OK
+ &fnames, EW_FILE|EW_SILENT) == OK
&& fcount > 0) {
// If foo.abx is found use it instead of foo.txt in
// the same directory.
@@ -5294,8 +5412,9 @@ void fix_help_buffer(void)
IObuff[0] = '|';
*s = '|';
while (*s != NUL) {
- if (*s == '\r' || *s == '\n')
+ if (*s == '\r' || *s == '\n') {
*s = NUL;
+ }
/* The text is utf-8 when a byte
* above 127 is found and no
* illegal byte sequence is found.
@@ -5314,10 +5433,9 @@ void fix_help_buffer(void)
* conversion to the current
* 'encoding' may be required. */
vc.vc_type = CONV_NONE;
- convert_setup(
- &vc,
- (char_u *)(this_utf == kTrue ? "utf-8" : "latin1"),
- p_enc);
+ convert_setup(&vc,
+ (char_u *)(this_utf == kTrue ? "utf-8" : "latin1"),
+ p_enc);
if (vc.vc_type == CONV_NONE) {
// No conversion needed.
cp = IObuff;
@@ -5374,8 +5492,8 @@ void ex_viusage(exarg_T *eap)
/// French)
/// @param add_help_tags Whether to add the "help-tags" tag
/// @param ignore_writeerr ignore write error
-static void helptags_one(char_u *dir, const char_u *ext, const char_u *tagfname,
- bool add_help_tags, bool ignore_writeerr)
+static void helptags_one(char_u *dir, const char_u *ext, const char_u *tagfname, bool add_help_tags,
+ bool ignore_writeerr)
FUNC_ATTR_NONNULL_ALL
{
garray_T ga;
@@ -5397,9 +5515,9 @@ static void helptags_one(char_u *dir, const char_u *ext, const char_u *tagfname,
// Note: We cannot just do `&NameBuff` because it is a statically sized array
// so `NameBuff == &NameBuff` according to C semantics.
- char_u *buff_list[1] = {NameBuff};
+ char_u *buff_list[1] = { NameBuff };
if (gen_expand_wildcards(1, buff_list, &filecount, &files,
- EW_FILE|EW_SILENT) == FAIL
+ EW_FILE|EW_SILENT) == FAIL
|| filecount == 0) {
if (!got_int) {
EMSG2(_("E151: No match: %s"), NameBuff);
@@ -5470,9 +5588,8 @@ static void helptags_one(char_u *dir, const char_u *ext, const char_u *tagfname,
if (utf8 == kNone) { // first file
utf8 = this_utf8;
} else if (utf8 != this_utf8) {
- EMSG2(_(
- "E670: Mix of help file encodings within a language: %s"),
- files[fi]);
+ EMSG2(_("E670: Mix of help file encodings within a language: %s"),
+ files[fi]);
mix = !got_int;
got_int = TRUE;
}
@@ -5527,8 +5644,8 @@ static void helptags_one(char_u *dir, const char_u *ext, const char_u *tagfname,
if (*p2 == '\t') {
*p2 = NUL;
vim_snprintf((char *)NameBuff, MAXPATHL,
- _("E154: Duplicate tag \"%s\" in file %s/%s"),
- ((char_u **)ga.ga_data)[i], dir, p2 + 1);
+ _("E154: Duplicate tag \"%s\" in file %s/%s"),
+ ((char_u **)ga.ga_data)[i], dir, p2 + 1);
EMSG(NameBuff);
*p2 = '\t';
break;
@@ -5570,8 +5687,7 @@ static void helptags_one(char_u *dir, const char_u *ext, const char_u *tagfname,
}
/// Generate tags in one help directory, taking care of translations.
-static void do_helptags(char_u *dirname, bool add_help_tags,
- bool ignore_writeerr)
+static void do_helptags(char_u *dirname, bool add_help_tags, bool ignore_writeerr)
FUNC_ATTR_NONNULL_ALL
{
int len;
@@ -5592,7 +5708,7 @@ static void do_helptags(char_u *dirname, bool add_help_tags,
// Note: We cannot just do `&NameBuff` because it is a statically sized array
// so `NameBuff == &NameBuff` according to C semantics.
- char_u *buff_list[1] = {NameBuff};
+ char_u *buff_list[1] = { NameBuff };
if (gen_expand_wildcards(1, buff_list, &filecount, &files,
EW_FILE|EW_SILENT) == FAIL
|| filecount == 0) {
@@ -5610,18 +5726,19 @@ static void do_helptags(char_u *dirname, bool add_help_tags,
continue;
}
if (STRICMP(files[i] + len - 4, ".txt") == 0) {
- /* ".txt" -> language "en" */
+ // ".txt" -> language "en"
lang[0] = 'e';
lang[1] = 'n';
} else if (files[i][len - 4] == '.'
&& ASCII_ISALPHA(files[i][len - 3])
&& ASCII_ISALPHA(files[i][len - 2])
&& TOLOWER_ASC(files[i][len - 1]) == 'x') {
- /* ".abx" -> language "ab" */
+ // ".abx" -> language "ab"
lang[0] = TOLOWER_ASC(files[i][len - 3]);
lang[1] = TOLOWER_ASC(files[i][len - 2]);
- } else
+ } else {
continue;
+ }
// Did we find this language already?
for (j = 0; j < ga.ga_len; j += 2) {
@@ -5645,11 +5762,11 @@ static void do_helptags(char_u *dirname, bool add_help_tags,
fname[5] = ((char_u *)ga.ga_data)[j];
fname[6] = ((char_u *)ga.ga_data)[j + 1];
if (fname[5] == 'e' && fname[6] == 'n') {
- /* English is an exception: use ".txt" and "tags". */
+ // English is an exception: use ".txt" and "tags".
fname[4] = NUL;
STRCPY(ext, ".txt");
} else {
- /* Language "ab" uses ".abx" and "tags-ab". */
+ // Language "ab" uses ".abx" and "tags-ab".
STRCPY(ext, ".xxx");
ext[1] = fname[5];
ext[2] = fname[6];
@@ -5664,7 +5781,7 @@ static void do_helptags(char_u *dirname, bool add_help_tags,
static void helptags_cb(char_u *fname, void *cookie)
FUNC_ATTR_NONNULL_ALL
{
- do_helptags(fname, *(bool *)cookie, true);
+ do_helptags(fname, *(bool *)cookie, true);
}
/*
@@ -5676,7 +5793,7 @@ void ex_helptags(exarg_T *eap)
char_u *dirname;
bool add_help_tags = false;
- /* Check for ":helptags ++t {dir}". */
+ // Check for ":helptags ++t {dir}".
if (STRNCMP(eap->arg, "++t", 3) == 0 && ascii_iswhite(eap->arg[3])) {
add_help_tags = true;
eap->arg = skipwhite(eap->arg + 3);
@@ -5732,9 +5849,8 @@ int sub_preview_win(buf_T *preview_buf)
/// Shows the effects of the :substitute command being typed ('inccommand').
/// If inccommand=split, shows a preview window and later restores the layout.
-static buf_T *show_sub(exarg_T *eap, pos_T old_cusr,
- PreviewLines *preview_lines, int hl_id, int src_id,
- handle_T bufnr)
+static buf_T *show_sub(exarg_T *eap, pos_T old_cusr, PreviewLines *preview_lines, int hl_id,
+ int src_id, handle_T bufnr)
FUNC_ATTR_NONNULL_ALL
{
win_T *save_curwin = curwin;
@@ -5883,12 +5999,12 @@ static buf_T *show_sub(exarg_T *eap, pos_T old_cusr,
/// Closes any open windows for inccommand preview buffer.
void close_preview_windows(void)
{
- block_autocmds();
- buf_T *buf = preview_bufnr ? buflist_findnr(preview_bufnr) : NULL;
- if (buf != NULL) {
- close_windows(buf, false);
- }
- unblock_autocmds();
+ block_autocmds();
+ buf_T *buf = preview_bufnr ? buflist_findnr(preview_bufnr) : NULL;
+ if (buf != NULL) {
+ close_windows(buf, false);
+ }
+ unblock_autocmds();
}
/// :substitute command
@@ -5936,7 +6052,9 @@ void ex_substitute(exarg_T *eap)
if (save_changedtick != buf_get_changedtick(curbuf)) {
// Undo invisibly. This also moves the cursor!
- if (!u_undo_and_forget(1)) { abort(); }
+ if (!u_undo_and_forget(1)) {
+ abort();
+ }
// Restore newhead. It is meaningless when curhead is valid, but we must
// restore it so that undotree() is identical before/after the preview.
curbuf->b_u_newhead = save_b_u_newhead;