summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-11-27 19:45:49 +0000
committerBram Moolenaar <Bram@vim.org>2022-11-27 19:45:49 +0000
commit3da8597fc07505c0f8839b0834aafe1c10ffb456 (patch)
treef8a2ef6f53114411a856dd25bff8c9e502a1647f
parent502e91756e99181d5fe668fad2e868dc7f3f4fea (diff)
patch 9.0.0961: using deletebufline() may jump to another windowv9.0.0961
Problem: Using deletebufline() may jump to another window. Solution: Do not use a window where the buffer was only in the past. (closes #11594)
-rw-r--r--src/evalbuffer.c5
-rw-r--r--src/testdir/test_bufline.vim14
-rw-r--r--src/version.c2
3 files changed, 20 insertions, 1 deletions
diff --git a/src/evalbuffer.c b/src/evalbuffer.c
index 52662a6533..82a10d675c 100644
--- a/src/evalbuffer.c
+++ b/src/evalbuffer.c
@@ -109,9 +109,12 @@ find_win_for_curbuf(void)
{
wininfo_T *wip;
+ // The b_wininfo list should have the windows that recently contained the
+ // buffer, going over this is faster than going over all the windows.
+ // Do check the buffer is still there.
FOR_ALL_BUF_WININFO(curbuf, wip)
{
- if (wip->wi_win != NULL)
+ if (wip->wi_win != NULL && wip->wi_win->w_buffer == curbuf)
{
curwin = wip->wi_win;
break;
diff --git a/src/testdir/test_bufline.vim b/src/testdir/test_bufline.vim
index 9e4402f79e..4ada241d1d 100644
--- a/src/testdir/test_bufline.vim
+++ b/src/testdir/test_bufline.vim
@@ -288,6 +288,20 @@ func Test_deletebufline_select_mode()
bwipe!
endfunc
+func Test_deletebufline_popup_window()
+ let popupID = popup_create('foo', {})
+ let bufnr = winbufnr(popupID)
+
+ " Check that deletebufline() brings us back to the same window.
+ new
+ let winid_before = win_getid()
+ call deletebufline(bufnr, 1, '$')
+ call assert_equal(winid_before, win_getid())
+ bwipe
+
+ call popup_close(popupID)
+endfunc
+
func Test_setbufline_startup_nofile()
let before =<< trim [CODE]
set shortmess+=F
diff --git a/src/version.c b/src/version.c
index a9a0c72a0c..ecc4da430e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 961,
+/**/
960,
/**/
959,