changeset 29871:a4eab0d846dc v9.0.0274

patch 9.0.0274: netrw plugin does not show remote files Commit: https://github.com/vim/vim/commit/c312619f7c0cf590d96e0b2ed891d1f6c43d769b Author: Bram Moolenaar <Bram@vim.org> Date: Fri Aug 26 12:58:17 2022 +0100 patch 9.0.0274: netrw plugin does not show remote files Problem: Netrw plugin does not show remote files. Solution: Do read a file when 'buftype' is "acwrite". (closes https://github.com/vim/vim/issues/10983)
author Bram Moolenaar <Bram@vim.org>
date Fri, 26 Aug 2022 14:00:04 +0200
parents 76f4cea7033c
children 01211e2b3df2
files src/buffer.c src/testdir/test_functions.vim src/version.c
diffstat 3 files changed, 42 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -48,7 +48,7 @@ static int	value_changed(char_u *str, ch
 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".
--- 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'))
--- 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,