summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-08-26 12:58:17 +0100
committerBram Moolenaar <Bram@vim.org>2022-08-26 12:58:17 +0100
commitc312619f7c0cf590d96e0b2ed891d1f6c43d769b (patch)
tree327ee232d2a3314f62f5c50e0a31b6173763fae7
parentd55f9ef8b2f1e9f868ed1440fe859d1b18b1cfe8 (diff)
patch 9.0.0274: netrw plugin does not show remote filesv9.0.0274
Problem: Netrw plugin does not show remote files. Solution: Do read a file when 'buftype' is "acwrite". (closes #10983)
-rw-r--r--src/buffer.c52
-rw-r--r--src/testdir/test_functions.vim7
-rw-r--r--src/version.c2
3 files changed, 42 insertions, 19 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 2c8169478c..edf71b0513 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -48,7 +48,7 @@ static int value_changed(char_u *str, char_u **last);
static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file);
static void free_buffer(buf_T *);
static void free_buffer_stuff(buf_T *buf, int free_options);
-static void clear_wininfo(buf_T *buf);
+static int bt_nofileread(buf_T *buf);
#ifdef UNIX
# define dev_T dev_t
@@ -223,7 +223,7 @@ open_buffer(
// A buffer without an actual file should not use the buffer name to read a
// file.
- if (bt_quickfix(curbuf) || bt_nofilename(curbuf))
+ if (bt_nofileread(curbuf))
flags |= READ_NOFILE;
// Read the file if there is one.
@@ -978,6 +978,22 @@ init_changedtick(buf_T *buf)
}
/*
+ * Free the b_wininfo list for buffer "buf".
+ */
+ static void
+clear_wininfo(buf_T *buf)
+{
+ wininfo_T *wip;
+
+ while (buf->b_wininfo != NULL)
+ {
+ wip = buf->b_wininfo;
+ buf->b_wininfo = wip->wi_next;
+ free_wininfo(wip);
+ }
+}
+
+/*
* Free stuff in the buffer for ":bdel" and when wiping out the buffer.
*/
static void
@@ -1036,22 +1052,6 @@ free_wininfo(wininfo_T *wip)
}
/*
- * Free the b_wininfo list for buffer "buf".
- */
- static void
-clear_wininfo(buf_T *buf)
-{
- wininfo_T *wip;
-
- while (buf->b_wininfo != NULL)
- {
- wip = buf->b_wininfo;
- buf->b_wininfo = wip->wi_next;
- free_wininfo(wip);
- }
-}
-
-/*
* Go to another buffer. Handles the result of the ATTENTION dialog.
*/
void
@@ -5709,7 +5709,8 @@ bt_popup(buf_T *buf)
/*
* Return TRUE if "buf" is a "nofile", "acwrite", "terminal" or "prompt"
- * buffer. This means the buffer name is not a file name.
+ * buffer. This means the buffer name may not be a file name, at least not for
+ * writing the buffer.
*/
int
bt_nofilename(buf_T *buf)
@@ -5720,6 +5721,19 @@ bt_nofilename(buf_T *buf)
|| buf->b_p_bt[0] == 'p');
}
+/*
+ * Return TRUE if "buf" is a "nofile", "quickfix", "terminal" or "prompt"
+ * buffer. This means the buffer is not to be read from a file.
+ */
+ static int
+bt_nofileread(buf_T *buf)
+{
+ return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+ || buf->b_p_bt[0] == 't'
+ || buf->b_p_bt[0] == 'q'
+ || buf->b_p_bt[0] == 'p');
+}
+
#if defined(FEAT_QUICKFIX) || defined(PROTO)
/*
* Return TRUE if "buf" has 'buftype' set to "nofile".
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index 68970407ce..03778f8ae0 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -2375,6 +2375,13 @@ func Test_bufadd_bufload()
call bufload(buf)
call assert_equal([''], getbufline(buf, 1, '$'))
+ " when 'buftype' is "acwrite" then bufload() DOES read the file
+ bwipe! XotherName
+ let buf = bufadd('XotherName')
+ call setbufvar(buf, '&bt', 'acwrite')
+ call bufload(buf)
+ call assert_equal(['some', 'text'], getbufline(buf, 1, '$'))
+
bwipe someName
bwipe XotherName
call assert_equal(0, bufexists('someName'))
diff --git a/src/version.c b/src/version.c
index 291e40af64..9590974685 100644
--- a/src/version.c
+++ b/src/version.c
@@ -724,6 +724,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 274,
+/**/
273,
/**/
272,