To: vim_dev@googlegroups.com Subject: Patch 8.2.4609 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.4609 Problem: :unhide does not check for failing to close a window. Solution: When closing a window fails continue with the next one. Do not try closing the autocmd window. (closes #9984) Files: src/buffer.c, src/window.c, src/proto/window.pro, src/testdir/test_autocmd.vim *** ../vim-8.2.4608/src/buffer.c 2022-02-28 13:28:34.540563790 +0000 --- src/buffer.c 2022-03-22 18:02:23.017146943 +0000 *************** *** 5330,5346 **** { wpnext = wp->w_next; if ((wp->w_buffer->b_nwindows > 1 ! || ((cmdmod.cmod_split & WSP_VERT) ! ? wp->w_height + wp->w_status_height < Rows - p_ch ! - tabline_height() ! : wp->w_width != Columns) ! || (had_tab > 0 && wp != firstwin)) && !ONE_WINDOW ! && !(wp->w_closing || wp->w_buffer->b_locked > 0)) { ! win_close(wp, FALSE); ! wpnext = firstwin; // just in case an autocommand does ! // something strange with windows ! tpnext = first_tabpage; // start all over... open_wins = 0; } else --- 5330,5350 ---- { wpnext = wp->w_next; if ((wp->w_buffer->b_nwindows > 1 ! || ((cmdmod.cmod_split & WSP_VERT) ! ? wp->w_height + wp->w_status_height < Rows - p_ch ! - tabline_height() ! : wp->w_width != Columns) ! || (had_tab > 0 && wp != firstwin)) ! && !ONE_WINDOW ! && !(wp->w_closing || wp->w_buffer->b_locked > 0) ! && !win_unlisted(wp)) { ! if (win_close(wp, FALSE) == FAIL) ! break; ! // Just in case an autocommand does something strange with ! // windows: start all over... ! wpnext = firstwin; ! tpnext = first_tabpage; open_wins = 0; } else *** ../vim-8.2.4608/src/window.c 2022-03-05 17:00:28.753376120 +0000 --- src/window.c 2022-03-22 18:02:37.893177402 +0000 *************** *** 43,49 **** static int may_open_tabpage(void); static int win_enter_ext(win_T *wp, int flags); static void win_free(win_T *wp, tabpage_T *tp); - static int win_unlisted(win_T *wp); static void win_append(win_T *after, win_T *wp); static void frame_append(frame_T *after, frame_T *frp); static void frame_insert(frame_T *before, frame_T *frp); --- 43,48 ---- *************** *** 5233,5239 **** * Return TRUE if "wp" is not in the list of windows: the autocmd window or a * popup window. */ ! static int win_unlisted(win_T *wp) { return wp == aucmd_win || WIN_IS_POPUP(wp); --- 5232,5238 ---- * Return TRUE if "wp" is not in the list of windows: the autocmd window or a * popup window. */ ! int win_unlisted(win_T *wp) { return wp == aucmd_win || WIN_IS_POPUP(wp); *** ../vim-8.2.4608/src/proto/window.pro 2022-02-20 20:48:53.226071796 +0000 --- src/proto/window.pro 2022-03-22 18:02:16.885133869 +0000 *************** *** 46,51 **** --- 46,52 ---- void win_enter(win_T *wp, int undo_sync); win_T *buf_jump_open_win(buf_T *buf); win_T *buf_jump_open_tab(buf_T *buf); + int win_unlisted(win_T *wp); void win_free_popup(win_T *win); void win_remove(win_T *wp, tabpage_T *tp); int win_alloc_lines(win_T *wp); *** ../vim-8.2.4608/src/testdir/test_autocmd.vim 2022-03-04 20:10:33.400917886 +0000 --- src/testdir/test_autocmd.vim 2022-03-22 18:08:54.729486028 +0000 *************** *** 3,8 **** --- 3,9 ---- source shared.vim source check.vim source term_util.vim + import './vim9.vim' as v9 func s:cleanup_buffers() abort for bnr in range(1, bufnr('$')) *************** *** 2975,2978 **** --- 2976,2993 ---- bw! endfunc + func Test_closing_autocmd_window() + let lines =<< trim END + edit Xa.txt + tabnew Xb.txt + autocmd BufEnter Xa.txt unhide 1 + doautoall BufEnter + END + call v9.CheckScriptFailure(lines, 'E814:') + au! BufEnter + only! + bwipe Xa.txt + bwipe Xb.txt + endfunc + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.4608/src/version.c 2022-03-22 16:06:24.950137116 +0000 --- src/version.c 2022-03-22 18:08:04.353486048 +0000 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 4609, /**/ -- FATHER: Who are you? PRINCE: I'm ... your son ... FATHER: Not you. LAUNCELOT: I'm ... er ... Sir Launcelot, sir. "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///