Mercurial > vim
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'))