Mercurial > vim
changeset 31255:87ff5e71d3c2 v9.0.0961
patch 9.0.0961: using deletebufline() may jump to another window
Commit: https://github.com/vim/vim/commit/3da8597fc07505c0f8839b0834aafe1c10ffb456
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Nov 27 19:45:49 2022 +0000
patch 9.0.0961: using deletebufline() may jump to another window
Problem: Using deletebufline() may jump to another window.
Solution: Do not use a window where the buffer was only in the past.
(closes #11594)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 27 Nov 2022 21:00:05 +0100 |
parents | fac14d7d7c2b |
children | 4dd9809b5c9c |
files | src/evalbuffer.c src/testdir/test_bufline.vim src/version.c |
diffstat | 3 files changed, 20 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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