forked from aniani/vim
patch 8.1.0334: 'autowrite' takes effect when buffer is not to be written
Problem: 'autowrite' takes effect when buffer is not to be written. Solution: Don't write buffers that are not supposed to be written. (Even Q Jones, closes #3391) Add tests for 'autowrite'.
This commit is contained in:
@@ -2041,7 +2041,7 @@ autowrite(buf_T *buf, int forceit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* flush all buffers, except the ones that are readonly
|
* Flush all buffers, except the ones that are readonly or are never written.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
autowrite_all(void)
|
autowrite_all(void)
|
||||||
@@ -2051,7 +2051,7 @@ autowrite_all(void)
|
|||||||
if (!(p_aw || p_awa) || !p_write)
|
if (!(p_aw || p_awa) || !p_write)
|
||||||
return;
|
return;
|
||||||
FOR_ALL_BUFFERS(buf)
|
FOR_ALL_BUFFERS(buf)
|
||||||
if (bufIsChanged(buf) && !buf->b_p_ro)
|
if (bufIsChanged(buf) && !buf->b_p_ro && !bt_dontwrite(buf))
|
||||||
{
|
{
|
||||||
bufref_T bufref;
|
bufref_T bufref;
|
||||||
|
|
||||||
|
@@ -112,3 +112,41 @@ func Test_writefile_sync_dev_stdout()
|
|||||||
throw 'Skipped: /dev/stdout is not writable'
|
throw 'Skipped: /dev/stdout is not writable'
|
||||||
endif
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_writefile_autowrite()
|
||||||
|
set autowrite
|
||||||
|
new
|
||||||
|
next Xa Xb Xc
|
||||||
|
call setline(1, 'aaa')
|
||||||
|
next
|
||||||
|
call assert_equal(['aaa'], readfile('Xa'))
|
||||||
|
call setline(1, 'bbb')
|
||||||
|
call assert_fails('edit XX')
|
||||||
|
call assert_false(filereadable('Xb'))
|
||||||
|
|
||||||
|
set autowriteall
|
||||||
|
edit XX
|
||||||
|
call assert_equal(['bbb'], readfile('Xb'))
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
call delete('Xa')
|
||||||
|
call delete('Xb')
|
||||||
|
set noautowrite
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_writefile_autowrite_nowrite()
|
||||||
|
set autowrite
|
||||||
|
new
|
||||||
|
next Xa Xb Xc
|
||||||
|
set buftype=nowrite
|
||||||
|
call setline(1, 'aaa')
|
||||||
|
let buf = bufnr('%')
|
||||||
|
" buffer contents silently lost
|
||||||
|
edit XX
|
||||||
|
call assert_false(filereadable('Xa'))
|
||||||
|
rewind
|
||||||
|
call assert_equal('', getline(1))
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
set noautowrite
|
||||||
|
endfunc
|
||||||
|
@@ -794,6 +794,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 */
|
||||||
|
/**/
|
||||||
|
334,
|
||||||
/**/
|
/**/
|
||||||
333,
|
333,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user