# HG changeset patch # User Bram Moolenaar # Date 1661515204 -7200 # Node ID a4eab0d846dc50e618547350dc22a21ee9c7de66 # Parent 76f4cea7033cbe3f7deb6bab1af2ca540b5d5aa5 patch 9.0.0274: netrw plugin does not show remote files Commit: https://github.com/vim/vim/commit/c312619f7c0cf590d96e0b2ed891d1f6c43d769b Author: Bram Moolenaar 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) diff --git a/src/buffer.c b/src/buffer.c --- 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". diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim --- 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 --- 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,