0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 9.0.0272: BufReadCmd not triggered when loading a "nofile" buffer

Problem:    BufReadCmd not triggered when loading a "nofile" buffer. (Maxim
            Kim)
Solution:   Call readfile() but bail out before reading a file.
            (closes #10983)
This commit is contained in:
Bram Moolenaar
2022-08-26 11:55:01 +01:00
parent 9b7d2a9596
commit b1d2c8116c
5 changed files with 26 additions and 3 deletions

View File

@@ -167,8 +167,9 @@ buffer_ensure_loaded(buf_T *buf)
open_buffer( open_buffer(
int read_stdin, // read file from stdin int read_stdin, // read file from stdin
exarg_T *eap, // for forced 'ff' and 'fenc' or NULL 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; int retval = OK;
bufref_T old_curbuf; bufref_T old_curbuf;
#ifdef FEAT_SYN_HL #ifdef FEAT_SYN_HL
@@ -220,10 +221,13 @@ open_buffer(
// mark cursor position as being invalid // mark cursor position as being invalid
curwin->w_valid = 0; 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. // Read the file if there is one.
if (curbuf->b_ffname != NULL if (curbuf->b_ffname != NULL
&& !bt_quickfix(curbuf)
&& !bt_nofilename(curbuf)
#ifdef FEAT_NETBEANS_INTG #ifdef FEAT_NETBEANS_INTG
&& netbeansReadFile && netbeansReadFile
#endif #endif

View File

@@ -108,6 +108,7 @@ filemess(
* READ_STDIN read from stdin instead of a file * READ_STDIN read from stdin instead of a file
* READ_BUFFER read from curbuf instead of a file (converting after reading * READ_BUFFER read from curbuf instead of a file (converting after reading
* stdin) * 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_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_KEEP_UNDO don't clear undo info or read it from a file
* READ_FIFO read from fifo/socket instead of a file * READ_FIFO read from fifo/socket instead of a file
@@ -309,6 +310,9 @@ readfile(
#endif #endif
curbuf->b_op_start = orig_start; curbuf->b_op_start = orig_start;
if (flags & READ_NOFILE)
return FAIL;
} }
if ((shortmess(SHM_OVER) || curbuf->b_help) && p_verbose == 0) if ((shortmess(SHM_OVER) || curbuf->b_help) && p_verbose == 0)

View File

@@ -576,6 +576,18 @@ func Test_BufReadCmdHelpJump()
au! BufReadCmd au! BufReadCmd
endfunc 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() func Test_augroup_deleted()
" This caused a crash before E936 was introduced " This caused a crash before E936 was introduced
augroup x augroup x

View File

@@ -723,6 +723,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
272,
/**/ /**/
271, 271,
/**/ /**/

View File

@@ -1006,6 +1006,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
#define READ_KEEP_UNDO 0x20 // keep undo info #define READ_KEEP_UNDO 0x20 // keep undo info
#define READ_FIFO 0x40 // read from fifo or socket #define READ_FIFO 0x40 // read from fifo or socket
#define READ_NOWINENTER 0x80 // do not trigger BufWinEnter #define READ_NOWINENTER 0x80 // do not trigger BufWinEnter
#define READ_NOFILE 0x100 // do not read a file, do trigger BufReadCmd
// Values for change_indent() // Values for change_indent()
#define INDENT_SET 1 // set indent #define INDENT_SET 1 // set indent