diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-08-30 13:07:17 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-08-30 13:07:17 +0200 |
commit | 8c9e7b00f6566dc41e794ef11c93d93b034c7134 (patch) | |
tree | 56a99a9d90f4800e1cf20f136affc8a15b2e786f | |
parent | 92c1b696413bf0e28f2fec22090d42e8a825eff2 (diff) |
patch 8.1.0334: 'autowrite' takes effect when buffer is not to be writtenv8.1.0334
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'.
-rw-r--r-- | src/ex_cmds2.c | 4 | ||||
-rw-r--r-- | src/testdir/test_writefile.vim | 38 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 42 insertions, 2 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index cb046357db..89effa1417 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -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 autowrite_all(void) @@ -2051,7 +2051,7 @@ autowrite_all(void) if (!(p_aw || p_awa) || !p_write) return; FOR_ALL_BUFFERS(buf) - if (bufIsChanged(buf) && !buf->b_p_ro) + if (bufIsChanged(buf) && !buf->b_p_ro && !bt_dontwrite(buf)) { bufref_T bufref; diff --git a/src/testdir/test_writefile.vim b/src/testdir/test_writefile.vim index 672ddd3a74..8e621b3cb2 100644 --- a/src/testdir/test_writefile.vim +++ b/src/testdir/test_writefile.vim @@ -112,3 +112,41 @@ func Test_writefile_sync_dev_stdout() throw 'Skipped: /dev/stdout is not writable' endif 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 diff --git a/src/version.c b/src/version.c index c2f64d37ab..db1f8e2c81 100644 --- a/src/version.c +++ b/src/version.c @@ -795,6 +795,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 334, +/**/ 333, /**/ 332, |