aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/buffer.c33
-rw-r--r--src/nvim/fileio.c31
-rw-r--r--src/nvim/globals.h2
-rw-r--r--src/nvim/ops.c40
-rw-r--r--src/nvim/version.c2
5 files changed, 63 insertions, 45 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index 762cd3efd3..a6e3fedd3f 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -918,13 +918,15 @@ do_buffer (
if (buf == NULL) { /* could not find it */
if (start == DOBUF_FIRST) {
- /* don't warn when deleting */
- if (!unload)
- EMSGN(_("E86: Buffer %" PRId64 " does not exist"), count);
- } else if (dir == FORWARD)
+ // don't warn when deleting
+ if (!unload) {
+ EMSGN(_(e_nobufnr), count);
+ }
+ } else if (dir == FORWARD) {
EMSG(_("E87: Cannot go beyond last buffer"));
- else
+ } else {
EMSG(_("E88: Cannot go before first buffer"));
+ }
return FAIL;
}
@@ -1711,18 +1713,15 @@ static buf_T *buflist_findname_file_id(char_u *ffname, FileID *file_id,
return NULL;
}
-/*
- * Find file in buffer list by a regexp pattern.
- * Return fnum of the found buffer.
- * Return < 0 for error.
- */
-int
-buflist_findpat (
- char_u *pattern,
- char_u *pattern_end, /* pointer to first char after pattern */
- int unlisted, /* find unlisted buffers */
- int diffmode, /* find diff-mode buffers only */
- int curtab_only /* find buffers in current tab only */
+/// Find file in buffer list by a regexp pattern.
+/// Return fnum of the found buffer.
+/// Return < 0 for error.
+int buflist_findpat(
+ const char_u *pattern,
+ const char_u *pattern_end, // pointer to first char after pattern
+ int unlisted, // find unlisted buffers
+ int diffmode, // find diff-mode buffers only
+ int curtab_only // find buffers in current tab only
)
{
int match = -1;
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index 58269983c5..23292ff4ac 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -7096,26 +7096,23 @@ int match_file_list(char_u *list, char_u *sfname, char_u *ffname)
return FALSE;
}
-/*
- * Convert the given pattern "pat" which has shell style wildcards in it, into
- * a regular expression, and return the result in allocated memory. If there
- * is a directory path separator to be matched, then TRUE is put in
- * allow_dirs, otherwise FALSE is put there -- webb.
- * Handle backslashes before special characters, like "\*" and "\ ".
- *
- * Returns NULL on failure.
- */
-char_u *
-file_pat_to_reg_pat (
- char_u *pat,
- char_u *pat_end, /* first char after pattern or NULL */
- char *allow_dirs, /* Result passed back out in here */
- int no_bslash /* Don't use a backward slash as pathsep */
+/// Convert the given pattern "pat" which has shell style wildcards in it, into
+/// a regular expression, and return the result in allocated memory. If there
+/// is a directory path separator to be matched, then TRUE is put in
+/// allow_dirs, otherwise FALSE is put there -- webb.
+/// Handle backslashes before special characters, like "\*" and "\ ".
+///
+/// Returns NULL on failure.
+char_u * file_pat_to_reg_pat(
+ const char_u *pat,
+ const char_u *pat_end, // first char after pattern or NULL
+ char *allow_dirs, // Result passed back out in here
+ int no_bslash // Don't use a backward slash as pathsep
)
{
- char_u *endp;
+ const char_u *endp;
char_u *reg_pat;
- char_u *p;
+ const char_u *p;
int nested = 0;
int add_dollar = TRUE;
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index 52eebebf41..d68e952693 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -2,6 +2,7 @@
#define NVIM_GLOBALS_H
#include <stdbool.h>
+#include <inttypes.h>
// EXTERN is only defined in main.c. That's where global variables are
// actually defined and initialized.
@@ -1239,6 +1240,7 @@ EXTERN char_u e_intern2[] INIT(= N_("E685: Internal error: %s"));
EXTERN char_u e_maxmempat[] INIT(= N_(
"E363: pattern uses more memory than 'maxmempattern'"));
EXTERN char_u e_emptybuf[] INIT(= N_("E749: empty buffer"));
+EXTERN char_u e_nobufnr[] INIT(= N_("E86: Buffer %" PRId64 " does not exist"));
EXTERN char_u e_invalpat[] INIT(= N_(
"E682: Invalid search pattern or delimiter"));
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 707d20157a..c3d968ca51 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -703,17 +703,16 @@ char_u *get_expr_line_src(void)
/// @param writing allow only writable registers
bool valid_yank_reg(int regname, bool writing)
{
- if ( (regname > 0 && ASCII_ISALNUM(regname))
- || (!writing && vim_strchr((char_u *)
- "/.%#:="
- , regname) != NULL)
- || regname == '"'
- || regname == '-'
- || regname == '_'
- || regname == '*'
- || regname == '+'
- )
+ if ((regname > 0 && ASCII_ISALNUM(regname))
+ || (!writing && vim_strchr((char_u *) "/.%:=" , regname) != NULL)
+ || regname == '#'
+ || regname == '"'
+ || regname == '-'
+ || regname == '_'
+ || regname == '*'
+ || regname == '+') {
return true;
+ }
return false;
}
@@ -4658,6 +4657,27 @@ void write_reg_contents_ex(int name,
return;
}
+ if (name == '#') {
+ buf_T *buf;
+
+ if (ascii_isdigit(*str)) {
+ int num = atoi((char *)str);
+
+ buf = buflist_findnr(num);
+ if (buf == NULL) {
+ EMSGN(_(e_nobufnr), (long)num);
+ }
+ } else {
+ buf = buflist_findnr(buflist_findpat(str, str + STRLEN(str),
+ true, false, false));
+ }
+ if (buf == NULL) {
+ return;
+ }
+ curwin->w_alt_fnum = buf->b_fnum;
+ return;
+ }
+
if (name == '=') {
size_t offset = 0;
size_t totlen = (size_t) len;
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 39d5b0f1b0..0d8afc4e53 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -466,7 +466,7 @@ static int included_patches[] = {
608,
// 607 NA
606,
- // 605,
+ 605,
604,
// 603,
602,