diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-08-26 11:55:01 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-08-26 11:55:01 +0100 |
commit | b1d2c8116cb5577961ea109651fb888b5e58265f (patch) | |
tree | 3cca94a88929fc31a58d1965da471e7b1e8050a2 | |
parent | 9b7d2a959646560f5770329f4428c4739eed4656 (diff) | |
download | vim-git-b1d2c8116cb5577961ea109651fb888b5e58265f.tar.gz |
patch 9.0.0272: BufReadCmd not triggered when loading a "nofile" bufferv9.0.0272
Problem: BufReadCmd not triggered when loading a "nofile" buffer. (Maxim
Kim)
Solution: Call readfile() but bail out before reading a file.
(closes #10983)
-rw-r--r-- | src/buffer.c | 10 | ||||
-rw-r--r-- | src/fileio.c | 4 | ||||
-rw-r--r-- | src/testdir/test_autocmd.vim | 12 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim.h | 1 |
5 files changed, 26 insertions, 3 deletions
diff --git a/src/buffer.c b/src/buffer.c index 728685281..2c8169478 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -167,8 +167,9 @@ buffer_ensure_loaded(buf_T *buf) open_buffer( int read_stdin, // read file from stdin exarg_T *eap, // for forced 'ff' and 'fenc' or NULL - int flags) // extra flags for readfile() + int flags_arg) // extra flags for readfile() { + int flags = flags_arg; int retval = OK; bufref_T old_curbuf; #ifdef FEAT_SYN_HL @@ -220,10 +221,13 @@ open_buffer( // mark cursor position as being invalid curwin->w_valid = 0; + // A buffer without an actual file should not use the buffer name to read a + // file. + if (bt_quickfix(curbuf) || bt_nofilename(curbuf)) + flags |= READ_NOFILE; + // Read the file if there is one. if (curbuf->b_ffname != NULL - && !bt_quickfix(curbuf) - && !bt_nofilename(curbuf) #ifdef FEAT_NETBEANS_INTG && netbeansReadFile #endif diff --git a/src/fileio.c b/src/fileio.c index 6d063a5ab..1b30e0fed 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -108,6 +108,7 @@ filemess( * READ_STDIN read from stdin instead of a file * READ_BUFFER read from curbuf instead of a file (converting after reading * stdin) + * READ_NOFILE do not read a file, only trigger BufReadCmd * READ_DUMMY read into a dummy buffer (to check if file contents changed) * READ_KEEP_UNDO don't clear undo info or read it from a file * READ_FIFO read from fifo/socket instead of a file @@ -309,6 +310,9 @@ readfile( #endif curbuf->b_op_start = orig_start; + + if (flags & READ_NOFILE) + return FAIL; } if ((shortmess(SHM_OVER) || curbuf->b_help) && p_verbose == 0) diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index 6bbe48c0f..c043a3531 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -576,6 +576,18 @@ func Test_BufReadCmdHelpJump() au! BufReadCmd endfunc +" BufReadCmd is triggered for a "nofile" buffer +func Test_BufReadCmdNofile() + new somefile + set buftype=nofile + au BufReadCmd somefile call setline(1, 'triggered') + edit + call assert_equal('triggered', getline(1)) + + au! BufReadCmd + bwipe! +endfunc + func Test_augroup_deleted() " This caused a crash before E936 was introduced augroup x diff --git a/src/version.c b/src/version.c index 59e36e4fa..ff452da1f 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 */ /**/ + 272, +/**/ 271, /**/ 270, @@ -1006,6 +1006,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring); #define READ_KEEP_UNDO 0x20 // keep undo info #define READ_FIFO 0x40 // read from fifo or socket #define READ_NOWINENTER 0x80 // do not trigger BufWinEnter +#define READ_NOFILE 0x100 // do not read a file, do trigger BufReadCmd // Values for change_indent() #define INDENT_SET 1 // set indent |