From c312619f7c0cf590d96e0b2ed891d1f6c43d769b Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 26 Aug 2022 12:58:17 +0100 Subject: 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 #10983) --- src/buffer.c | 52 +++++++++++++++++++++++++++--------------- src/testdir/test_functions.vim | 7 ++++++ src/version.c | 2 ++ 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. @@ -977,6 +977,22 @@ init_changedtick(buf_T *buf) #endif } +/* + * 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. */ @@ -1035,22 +1051,6 @@ free_wininfo(wininfo_T *wip) vim_free(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. */ @@ -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 @@ -723,6 +723,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 274, /**/ 273, /**/ -- cgit v1.2.3