mirror of
https://github.com/vim/vim.git
synced 2025-09-06 21:53:38 -04:00
patch 8.2.0474: cannot use :write when using a plugin with BufWriteCmd
Problem: Cannot use :write when using a plugin with BufWriteCmd. Solution: Reset BF_NOTEDITED after BufWriteCmd. (closes #5807)
This commit is contained in:
parent
8601545338
commit
0fff44152d
16
src/fileio.c
16
src/fileio.c
@ -261,11 +261,21 @@ readfile(
|
||||
{
|
||||
if (apply_autocmds_exarg(EVENT_BUFREADCMD, NULL, sfname,
|
||||
FALSE, curbuf, eap))
|
||||
{
|
||||
int status = OK;
|
||||
#ifdef FEAT_EVAL
|
||||
return aborting() ? FAIL : OK;
|
||||
#else
|
||||
return OK;
|
||||
if (aborting())
|
||||
status = FAIL;
|
||||
#endif
|
||||
// The BufReadCmd code usually uses ":read" to get the text and
|
||||
// perhaps ":file" to change the buffer name. But we should
|
||||
// consider this to work like ":edit", thus reset the
|
||||
// BF_NOTEDITED flag. Then ":write" will work to overwrite the
|
||||
// same file.
|
||||
if (status == OK)
|
||||
curbuf->b_flags &= ~BF_NOTEDITED;
|
||||
return status;
|
||||
}
|
||||
}
|
||||
else if (apply_autocmds_exarg(EVENT_FILEREADCMD, sfname, sfname,
|
||||
FALSE, NULL, eap))
|
||||
|
@ -1536,6 +1536,40 @@ func Test_Cmd_Autocmds()
|
||||
enew!
|
||||
endfunc
|
||||
|
||||
func s:ReadFile()
|
||||
setl noswapfile nomodified
|
||||
let filename = resolve(expand("<afile>:p"))
|
||||
execute 'read' fnameescape(filename)
|
||||
1d_
|
||||
exe 'file' fnameescape(filename)
|
||||
setl buftype=acwrite
|
||||
endfunc
|
||||
|
||||
func s:WriteFile()
|
||||
let filename = resolve(expand("<afile>:p"))
|
||||
setl buftype=
|
||||
noautocmd execute 'write' fnameescape(filename)
|
||||
setl buftype=acwrite
|
||||
setl nomodified
|
||||
endfunc
|
||||
|
||||
func Test_BufReadCmd()
|
||||
autocmd BufReadCmd *.test call s:ReadFile()
|
||||
autocmd BufWriteCmd *.test call s:WriteFile()
|
||||
|
||||
call writefile(['one', 'two', 'three'], 'Xcmd.test')
|
||||
edit Xcmd.test
|
||||
call assert_match('Xcmd.test" line 1 of 3', execute('file'))
|
||||
normal! Gofour
|
||||
write
|
||||
call assert_equal(['one', 'two', 'three', 'four'], readfile('Xcmd.test'))
|
||||
|
||||
bwipe!
|
||||
call delete('Xcmd.test')
|
||||
au! BufReadCmd
|
||||
au! BufWriteCmd
|
||||
endfunc
|
||||
|
||||
func SetChangeMarks(start, end)
|
||||
exe a:start. 'mark ['
|
||||
exe a:end. 'mark ]'
|
||||
|
@ -738,6 +738,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
474,
|
||||
/**/
|
||||
473,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user