shada: Do not save unlisted and quickfix buffers

Fixes #3635
This commit is contained in:
ZyX 2015-11-23 15:12:08 +03:00
parent 321db59ca1
commit ec8e60a055
3 changed files with 51 additions and 7 deletions

View File

@ -5315,9 +5315,9 @@ A jump table for the options with a short description can be found at |Q_op|.
% When included, save and restore the buffer list. If Vim is
started with a file name argument, the buffer list is not
restored. If Vim is started without a file name argument, the
buffer list is restored from the shada file. Buffers
without a file name and buffers for help files are not written
to the shada file.
buffer list is restored from the shada file. Quickfix
('buftype'), unlisted ('buflisted'), unnamed and buffers on
removable media (|shada-r|) are not saved.
When followed by a number, the number specifies the maximum
number of buffers that are stored. Without a number all
buffers are stored.

View File

@ -43,6 +43,7 @@
#include "nvim/path.h"
#include "nvim/fileio.h"
#include "nvim/strings.h"
#include "nvim/quickfix.h"
#include "nvim/lib/khash.h"
#include "nvim/lib/kvec.h"
@ -2478,8 +2479,11 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
// Write buffer list
if (find_shada_parameter('%') != NULL) {
size_t buf_count = 0;
#define IGNORE_BUF(buf)\
(buf->b_ffname == NULL || !buf->b_p_bl || bt_quickfix(buf) \
|| in_bufset(&removable_bufs, buf))
FOR_ALL_BUFFERS(buf) {
if (buf->b_ffname != NULL && !in_bufset(&removable_bufs, buf)) {
if (!IGNORE_BUF(buf)) {
buf_count++;
}
}
@ -2497,7 +2501,7 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
};
size_t i = 0;
FOR_ALL_BUFFERS(buf) {
if (buf->b_ffname == NULL || in_bufset(&removable_bufs, buf)) {
if (IGNORE_BUF(buf)) {
continue;
}
buflist_entry.data.buffer_list.buffers[i] = (struct buffer_list_buffer) {
@ -2513,6 +2517,7 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
goto shada_write_exit;
}
xfree(buflist_entry.data.buffer_list.buffers);
#undef IGNORE_BUF
}
// Write some of the variables

View File

@ -1,7 +1,7 @@
-- ShaDa buffer list saving/reading support
local helpers = require('test.functional.helpers')
local nvim_command, funcs, eq =
helpers.command, helpers.funcs, helpers.eq
local nvim_command, funcs, eq, curbufmeths =
helpers.command, helpers.funcs, helpers.eq, helpers.curbufmeths
local shada_helpers = require('test.functional.shada.helpers')
local reset, set_additional_cmd, clear =
@ -48,4 +48,43 @@ describe('ShaDa support code', function()
eq(1, funcs.bufnr('$'))
eq('', funcs.bufname(1))
end)
it('does not dump unlisted buffer', function()
set_additional_cmd('set shada+=%')
reset()
nvim_command('edit ' .. testfilename)
nvim_command('edit ' .. testfilename_2)
curbufmeths.set_option('buflisted', false)
nvim_command('qall')
reset()
eq(2, funcs.bufnr('$'))
eq('', funcs.bufname(1))
eq(testfilename, funcs.bufname(2))
end)
it('does not dump quickfix buffer', function()
set_additional_cmd('set shada+=%')
reset()
nvim_command('edit ' .. testfilename)
nvim_command('edit ' .. testfilename_2)
curbufmeths.set_option('buftype', 'quickfix')
nvim_command('qall')
reset()
eq(2, funcs.bufnr('$'))
eq('', funcs.bufname(1))
eq(testfilename, funcs.bufname(2))
end)
it('does not dump unnamed buffers', function()
set_additional_cmd('set shada+=% hidden')
reset()
curbufmeths.set_line(0, 'foo')
nvim_command('enew')
curbufmeths.set_line(0, 'bar')
eq(2, funcs.bufnr('$'))
nvim_command('qall!')
reset()
eq(1, funcs.bufnr('$'))
eq('', funcs.bufname(1))
end)
end)