vim-patch:7.4.2212

Problem:    Mark " is not set when closing a window in another tab. (Guraga)
Solution:   Check all tabs for the window to be valid. (based on patch by
            Hirohito Higashi, closes vim/vim#974)

e59215c7dc
This commit is contained in:
Grzegorz Milka
2016-10-18 21:04:57 +02:00
parent 500c485e36
commit 9ca90fdb9f
4 changed files with 32 additions and 3 deletions

View File

@@ -323,7 +323,7 @@ void close_buffer(win_T *win, buf_T *buf, int action, int abort_if_last)
wipe_buf = true;
}
if (win_valid(win)) {
if (win_valid_any_tab(win)) {
/* Set b_last_cursor when closing the last window for the buffer.
* Remember the last cursor position and window options of the buffer.
* This used to be only for the current window, but then options like
@@ -402,7 +402,7 @@ void close_buffer(win_T *win, buf_T *buf, int action, int abort_if_last)
buf->b_nwindows = nwindows;
buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
if (win_valid(win) && win->w_buffer == buf) {
if (win_valid_any_tab(win) && win->w_buffer == buf) {
win->w_buffer = NULL; // make sure we don't use the buffer now
}

View File

@@ -229,7 +229,7 @@ static int included_patches[] = {
// 2215,
// 2214 NA
2213,
// 2212,
2212,
// 2211 NA
// 2210 NA
// 2209,

View File

@@ -1065,6 +1065,23 @@ bool win_valid(win_T *win) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
return false;
}
/// Check if "win" is a pointer to an existing window in any tabpage.
///
/// @param win window to check
bool win_valid_any_tab(win_T *win) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
if (win == NULL) {
return false;
}
FOR_ALL_TAB_WINDOWS(tp, wp) {
if (wp == win) {
return true;
}
}
return false;
}
/*
* Return the number of windows.
*/

View File

@@ -102,6 +102,18 @@ describe('ShaDa support code', function()
eq(2, nvim_current_line())
end)
it('is able to dump and read back mark " from a closed tab', function()
nvim_command('edit ' .. testfilename)
nvim_command('edit ' .. testfilename_2)
nvim_command('2')
nvim_command('q!')
nvim_command('qall')
reset()
nvim_command('edit ' .. testfilename_2)
nvim_command('normal! `"')
eq(2, nvim_current_line())
end)
it('is able to populate v:oldfiles', function()
nvim_command('edit ' .. testfilename)
local tf_full = curbufmeths.get_name()