diff options
-rw-r--r-- | src/nvim/buffer.c | 4 | ||||
-rw-r--r-- | src/nvim/version.c | 2 | ||||
-rw-r--r-- | src/nvim/window.c | 17 | ||||
-rw-r--r-- | test/functional/shada/marks_spec.lua | 12 |
4 files changed, 32 insertions, 3 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 5fb011885e..176967ad2a 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -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 } diff --git a/src/nvim/version.c b/src/nvim/version.c index 2dfe5d3248..1a72238394 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -229,7 +229,7 @@ static int included_patches[] = { // 2215, // 2214 NA 2213, - // 2212, + 2212, // 2211 NA // 2210 NA // 2209, diff --git a/src/nvim/window.c b/src/nvim/window.c index 03a2e9a842..c4e48a9732 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -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. */ diff --git a/test/functional/shada/marks_spec.lua b/test/functional/shada/marks_spec.lua index 646b0b692e..b743c3a4b7 100644 --- a/test/functional/shada/marks_spec.lua +++ b/test/functional/shada/marks_spec.lua @@ -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() |