summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-05-29 16:24:50 +0200
committerBram Moolenaar <Bram@vim.org>2016-05-29 16:24:50 +0200
commitb127cfd75f59e82580df395b6e2c009774644b16 (patch)
tree866c78d66b02901c6a13f96db41313d35f00994d
parent9f5842e63fc63d438cbffcec503e072a06f74dc2 (diff)
downloadvim-git-b127cfd75f59e82580df395b6e2c009774644b16.tar.gz
patch 7.4.1858v7.4.1858
Problem: When a channel writes to a buffer it doesn't find a buffer by the short name but re-uses it anyway. Solution: Find buffer also by the short name.
-rw-r--r--src/buffer.c3
-rw-r--r--src/channel.c6
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h7
4 files changed, 13 insertions, 5 deletions
diff --git a/src/buffer.c b/src/buffer.c
index b0e3a22b5..0bbb1f467 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1649,6 +1649,7 @@ do_autochdir(void)
* If (flags & BLN_CURBUF) is TRUE, may use current buffer.
* If (flags & BLN_LISTED) is TRUE, add new buffer to buffer list.
* If (flags & BLN_DUMMY) is TRUE, don't count it as a real buffer.
+ * If (flags & BLN_NEW) is TRUE, don't use an existing buffer.
* This is the ONLY way to create a new buffer.
*/
static int top_file_num = 1; /* highest file number */
@@ -1676,7 +1677,7 @@ buflist_new(
if (sfname == NULL || mch_stat((char *)sfname, &st) < 0)
st.st_dev = (dev_T)-1;
#endif
- if (ffname != NULL && !(flags & BLN_DUMMY) && (buf =
+ if (ffname != NULL && !(flags & (BLN_DUMMY | BLN_NEW)) && (buf =
#ifdef UNIX
buflist_findname_stat(ffname, &st)
#else
diff --git a/src/channel.c b/src/channel.c
index 973d234ea..b1f7f1a60 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1079,11 +1079,15 @@ find_buffer(char_u *name, int err)
buf_T *save_curbuf = curbuf;
if (name != NULL && *name != NUL)
+ {
buf = buflist_findname(name);
+ if (buf == NULL)
+ buf = buflist_findname_exp(name);
+ }
if (buf == NULL)
{
buf = buflist_new(name == NULL || *name == NUL ? NULL : name,
- NULL, (linenr_T)0, BLN_LISTED);
+ NULL, (linenr_T)0, BLN_LISTED | BLN_NEW);
if (buf == NULL)
return NULL;
buf_copy_options(buf, BCO_ENTER);
diff --git a/src/version.c b/src/version.c
index c3afbad85..85f57e58b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1858,
+/**/
1857,
/**/
1856,
diff --git a/src/vim.h b/src/vim.h
index a5d05a15f..8ce11d684 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -907,9 +907,10 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
#define GETF_SWITCH 0x04 /* respect 'switchbuf' settings when jumping */
/* Values for buflist_new() flags */
-#define BLN_CURBUF 1 /* May re-use curbuf for new buffer */
-#define BLN_LISTED 2 /* Put new buffer in buffer list */
-#define BLN_DUMMY 4 /* Allocating dummy buffer */
+#define BLN_CURBUF 1 /* may re-use curbuf for new buffer */
+#define BLN_LISTED 2 /* put new buffer in buffer list */
+#define BLN_DUMMY 4 /* allocating dummy buffer */
+#define BLN_NEW 8 /* create a new buffer */
/* Values for in_cinkeys() */
#define KEY_OPEN_FORW 0x101