diff options
Diffstat (limited to 'data/vim/patches/8.1.0892')
-rw-r--r-- | data/vim/patches/8.1.0892 | 518 |
1 files changed, 0 insertions, 518 deletions
diff --git a/data/vim/patches/8.1.0892 b/data/vim/patches/8.1.0892 deleted file mode 100644 index ec187501f..000000000 --- a/data/vim/patches/8.1.0892 +++ /dev/null @@ -1,518 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0892 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.0892 -Problem: Failure when closing a window when location list is in use. -Solution: Handle the situation gracefully. Make sure memory for 'switchbuf' - is not freed at the wrong time. (Yegappan Lakshmanan, - closes #3928) -Files: src/eval.c, src/evalfunc.c, src/proto/window.pro, src/quickfix.c, - src/testdir/test_quickfix.vim, src/window.c - - -*** ../vim-8.1.0891/src/eval.c 2019-02-10 22:14:24.184352831 +0100 ---- src/eval.c 2019-02-10 22:55:04.745658531 +0100 -*************** -*** 8587,8593 **** - int nr = (int)tv_get_number_chk(vp, NULL); - - if (nr >= LOWEST_WIN_ID) -! return win_id2wp(vp); - return find_win_by_nr(vp, NULL); - } - ---- 8587,8593 ---- - int nr = (int)tv_get_number_chk(vp, NULL); - - if (nr >= LOWEST_WIN_ID) -! return win_id2wp(tv_get_number(vp)); - return find_win_by_nr(vp, NULL); - } - -*** ../vim-8.1.0891/src/evalfunc.c 2019-02-08 14:33:54.822761996 +0100 ---- src/evalfunc.c 2019-02-10 22:55:04.745658531 +0100 -*************** -*** 5800,5806 **** - - if (argvars[0].v_type != VAR_UNKNOWN) - { -! wparg = win_id2wp(argvars); - if (wparg == NULL) - return; - } ---- 5800,5806 ---- - - if (argvars[0].v_type != VAR_UNKNOWN) - { -! wparg = win_id2wp(tv_get_number(&argvars[0])); - if (wparg == NULL) - return; - } -*** ../vim-8.1.0891/src/proto/window.pro 2018-09-13 17:26:31.091401618 +0200 ---- src/proto/window.pro 2019-02-10 22:55:04.749658501 +0100 -*************** -*** 91,97 **** - int win_getid(typval_T *argvars); - int win_gotoid(typval_T *argvars); - void win_id2tabwin(typval_T *argvars, list_T *list); -! win_T *win_id2wp(typval_T *argvars); - int win_id2win(typval_T *argvars); - void win_findbuf(typval_T *argvars, list_T *list); - void get_framelayout(frame_T *fr, list_T *l, int outer); ---- 91,97 ---- - int win_getid(typval_T *argvars); - int win_gotoid(typval_T *argvars); - void win_id2tabwin(typval_T *argvars, list_T *list); -! win_T *win_id2wp(int id); - int win_id2win(typval_T *argvars); - void win_findbuf(typval_T *argvars, list_T *list); - void get_framelayout(frame_T *fr, list_T *l, int outer); -*** ../vim-8.1.0891/src/quickfix.c 2019-02-05 21:23:00.600559169 +0100 ---- src/quickfix.c 2019-02-10 22:55:04.749658501 +0100 -*************** -*** 1899,1921 **** - return; - *pqi = NULL; // Remove reference to this list - - qi->qf_refcount--; - if (qi->qf_refcount < 1) - { - // No references to this location list. -! // If the location list is still in use, then queue the delete request -! // to be processed later. -! if (quickfix_busy > 0) -! locstack_queue_delreq(qi); -! else -! { -! // If the quickfix window buffer is loaded, then wipe it -! wipe_qf_buffer(qi); - -! for (i = 0; i < qi->qf_listcount; ++i) -! qf_free(&qi->qf_lists[i]); -! vim_free(qi); -! } - } - } - ---- 1899,1922 ---- - return; - *pqi = NULL; // Remove reference to this list - -+ // If the location list is still in use, then queue the delete request -+ // to be processed later. -+ if (quickfix_busy > 0) -+ { -+ locstack_queue_delreq(qi); -+ return; -+ } -+ - qi->qf_refcount--; - if (qi->qf_refcount < 1) - { - // No references to this location list. -! // If the quickfix window buffer is loaded, then wipe it -! wipe_qf_buffer(qi); - -! for (i = 0; i < qi->qf_listcount; ++i) -! qf_free(&qi->qf_lists[i]); -! vim_free(qi); - } - } - -*************** -*** 3018,3024 **** - qf_info_T *qi, - qfline_T *qf_ptr, - int forceit, -! win_T *oldwin, - int *opened_window) - { - qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist]; ---- 3019,3025 ---- - qf_info_T *qi, - qfline_T *qf_ptr, - int forceit, -! int prev_winid, - int *opened_window) - { - qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist]; -*************** -*** 3039,3045 **** - - retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1, - ECMD_HIDE + ECMD_SET_HELP, -! oldwin == curwin ? curwin : NULL); - } - else - retval = buflist_getfile(qf_ptr->qf_fnum, ---- 3040,3046 ---- - - retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1, - ECMD_HIDE + ECMD_SET_HELP, -! prev_winid == curwin->w_id ? curwin : NULL); - } - else - retval = buflist_getfile(qf_ptr->qf_fnum, -*************** -*** 3047,3057 **** - - // If a location list, check whether the associated window is still - // present. -! if (qfl_type == QFLT_LOCATION && !win_valid_any_tab(oldwin)) - { -! emsg(_("E924: Current window was closed")); -! *opened_window = FALSE; -! return NOTDONE; - } - - if (qfl_type == QFLT_QUICKFIX && !qflist_valid(NULL, save_qfid)) ---- 3048,3062 ---- - - // If a location list, check whether the associated window is still - // present. -! if (qfl_type == QFLT_LOCATION) - { -! win_T *wp = win_id2wp(prev_winid); -! if (wp == NULL && curwin->w_llist != qi) -! { -! emsg(_("E924: Current window was closed")); -! *opened_window = FALSE; -! return NOTDONE; -! } - } - - if (qfl_type == QFLT_QUICKFIX && !qflist_valid(NULL, save_qfid)) -*************** -*** 3211,3217 **** - int qf_index, - qfline_T *qf_ptr, - int forceit, -! win_T *oldwin, - int *opened_window, - int openfold, - int print_message) ---- 3216,3222 ---- - int qf_index, - qfline_T *qf_ptr, - int forceit, -! int prev_winid, - int *opened_window, - int openfold, - int print_message) -*************** -*** 3227,3233 **** - - if (qf_ptr->qf_fnum != 0) - { -! retval = qf_jump_edit_buffer(qi, qf_ptr, forceit, oldwin, - opened_window); - if (retval != OK) - return retval; ---- 3232,3238 ---- - - if (qf_ptr->qf_fnum != 0) - { -! retval = qf_jump_edit_buffer(qi, qf_ptr, forceit, prev_winid, - opened_window); - if (retval != OK) - return retval; -*************** -*** 3287,3294 **** - int old_qf_index; - char_u *old_swb = p_swb; - unsigned old_swb_flags = swb_flags; - int opened_window = FALSE; -- win_T *oldwin = curwin; - int print_message = TRUE; - #ifdef FEAT_FOLDING - int old_KeyTyped = KeyTyped; // getting file may reset it ---- 3292,3299 ---- - int old_qf_index; - char_u *old_swb = p_swb; - unsigned old_swb_flags = swb_flags; -+ int prev_winid; - int opened_window = FALSE; - int print_message = TRUE; - #ifdef FEAT_FOLDING - int old_KeyTyped = KeyTyped; // getting file may reset it -*************** -*** 3304,3309 **** ---- 3309,3316 ---- - return; - } - -+ incr_quickfix_busy(); -+ - qfl = &qi->qf_lists[qi->qf_curlist]; - - qf_ptr = qfl->qf_ptr; -*************** -*** 3325,3337 **** - // window - print_message = FALSE; - - retval = qf_jump_open_window(qi, qf_ptr, newwin, &opened_window); - if (retval == FAIL) - goto failed; - if (retval == NOTDONE) - goto theend; - -! retval = qf_jump_to_buffer(qi, qf_index, qf_ptr, forceit, oldwin, - &opened_window, old_KeyTyped, print_message); - if (retval == NOTDONE) - { ---- 3332,3346 ---- - // window - print_message = FALSE; - -+ prev_winid = curwin->w_id; -+ - retval = qf_jump_open_window(qi, qf_ptr, newwin, &opened_window); - if (retval == FAIL) - goto failed; - if (retval == NOTDONE) - goto theend; - -! retval = qf_jump_to_buffer(qi, qf_index, qf_ptr, forceit, prev_winid, - &opened_window, old_KeyTyped, print_message); - if (retval == NOTDONE) - { -*************** -*** 3359,3365 **** - qfl->qf_ptr = qf_ptr; - qfl->qf_index = qf_index; - } -! if (p_swb != old_swb && opened_window) - { - // Restore old 'switchbuf' value, but not when an autocommand or - // modeline has changed the value. ---- 3368,3374 ---- - qfl->qf_ptr = qf_ptr; - qfl->qf_index = qf_index; - } -! if (p_swb != old_swb) - { - // Restore old 'switchbuf' value, but not when an autocommand or - // modeline has changed the value. -*************** -*** 3371,3376 **** ---- 3380,3386 ---- - else - free_string_option(old_swb); - } -+ decr_quickfix_busy(); - } - - // Highlight attributes used for displaying entries from the quickfix list. -*************** -*** 4004,4012 **** - if (IS_LL_STACK(qi)) - { - // For the location list window, create a reference to the -! // location list from the window 'win'. -! curwin->w_llist_ref = win->w_llist; -! win->w_llist->qf_refcount++; - } - - if (oldwin != curwin) ---- 4014,4022 ---- - if (IS_LL_STACK(qi)) - { - // For the location list window, create a reference to the -! // location list stack from the window 'win'. -! curwin->w_llist_ref = qi; -! qi->qf_refcount++; - } - - if (oldwin != curwin) -*** ../vim-8.1.0891/src/testdir/test_quickfix.vim 2019-02-05 21:23:00.600559169 +0100 ---- src/testdir/test_quickfix.vim 2019-02-10 22:55:04.749658501 +0100 -*************** -*** 1,4 **** -! " Test for the quickfix commands. - - if !has('quickfix') - finish ---- 1,4 ---- -! " Test for the quickfix feature. - - if !has('quickfix') - finish -*************** -*** 1419,1425 **** - \ {'filename': 'fnameD', 'text': 'D'}, - \ {'filename': 'fnameE', 'text': 'E'}] - -! " {action} is unspecified. Same as specifing ' '. - new | only - silent! Xnewer 99 - call g:Xsetlist(list1) ---- 1419,1425 ---- - \ {'filename': 'fnameD', 'text': 'D'}, - \ {'filename': 'fnameE', 'text': 'E'}] - -! " {action} is unspecified. Same as specifying ' '. - new | only - silent! Xnewer 99 - call g:Xsetlist(list1) -*************** -*** 2348,2354 **** - " Open a new window and create a location list - " Open the location list window and close the other window - " Jump to an entry. -! " Should create a new window and jump to the entry. The scrtach buffer - " should not be used. - enew | only - set buftype=nofile ---- 2348,2354 ---- - " Open a new window and create a location list - " Open the location list window and close the other window - " Jump to an entry. -! " Should create a new window and jump to the entry. The scratch buffer - " should not be used. - enew | only - set buftype=nofile -*************** -*** 3831,3837 **** - new | only - - " When split opening files from a helpgrep location list window, a new help -! " window should be opend with a copy of the location list. - lhelpgrep window - let locid = getloclist(0, {'id' : 0}).id - lwindow ---- 3831,3837 ---- - new | only - - " When split opening files from a helpgrep location list window, a new help -! " window should be opened with a copy of the location list. - lhelpgrep window - let locid = getloclist(0, {'id' : 0}).id - lwindow -*************** -*** 3933,3940 **** - call assert_match(qfbnum . ' h- "\[Location List]"', execute('ls')) - call assert_true(bufloaded(qfbnum)) - - new | only -! call assert_false(bufloaded(qfbnum)) - endif - endfunc - ---- 3933,3962 ---- - call assert_match(qfbnum . ' h- "\[Location List]"', execute('ls')) - call assert_true(bufloaded(qfbnum)) - -+ " When the location list is cleared for the window, the buffer should be -+ " removed -+ call setloclist(0, [], 'f') -+ call assert_false(bufexists(qfbnum)) -+ -+ " When the location list is freed with the location list window open, the -+ " location list buffer should not be lost. It should be reused when the -+ " location list is again populated. -+ lexpr "F1:10:Line10" -+ lopen -+ let wid = win_getid() -+ let qfbnum = bufnr('') -+ wincmd p -+ call setloclist(0, [], 'f') -+ lexpr "F1:10:Line10" -+ lopen -+ call assert_equal(wid, win_getid()) -+ call assert_equal(qfbnum, bufnr('')) -+ lclose -+ -+ " When the window with the location list is closed, the buffer should be -+ " removed - new | only -! call assert_false(bufexists(qfbnum)) - endif - endfunc - -*************** -*** 3942,3944 **** ---- 3964,3992 ---- - call Xqfbuf_test('c') - call Xqfbuf_test('l') - endfunc -+ -+ " If there is an autocmd to use only one window, then opening the location -+ " list window used to crash Vim. -+ func Test_winonly_autocmd() -+ call s:create_test_file('Xtest1') -+ " Autocmd to show only one Vim window at a time -+ autocmd WinEnter * only -+ new -+ " Load the location list -+ lexpr "Xtest1:5:Line5\nXtest1:10:Line10\nXtest1:15:Line15" -+ let loclistid = getloclist(0, {'id' : 0}).id -+ " Open the location list window. Only this window will be shown and the file -+ " window is closed. -+ lopen -+ call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) -+ " Jump to an entry in the location list and make sure that the cursor is -+ " positioned correctly. -+ ll 3 -+ call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) -+ call assert_equal('Xtest1', bufname('')) -+ call assert_equal(15, line('.')) -+ " Cleanup -+ autocmd! WinEnter -+ new | only -+ call delete('Xtest1') -+ endfunc -*** ../vim-8.1.0891/src/window.c 2019-01-31 18:26:05.742803481 +0100 ---- src/window.c 2019-02-10 22:55:04.749658501 +0100 -*************** -*** 7193,7203 **** - } - - win_T * -! win_id2wp(typval_T *argvars) - { - win_T *wp; - tabpage_T *tp; -- int id = tv_get_number(&argvars[0]); - - FOR_ALL_TAB_WINDOWS(tp, wp) - if (wp->w_id == id) ---- 7193,7202 ---- - } - - win_T * -! win_id2wp(int id) - { - win_T *wp; - tabpage_T *tp; - - FOR_ALL_TAB_WINDOWS(tp, wp) - if (wp->w_id == id) -*** ../vim-8.1.0891/src/version.c 2019-02-10 22:50:08.011856775 +0100 ---- src/version.c 2019-02-10 22:55:47.289343987 +0100 -*************** -*** 785,786 **** ---- 785,788 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 892, - /**/ - --- -JOHN CLEESE PLAYED: SECOND SOLDIER WITH A KEEN INTEREST IN BIRDS, LARGE MAN - WITH DEAD BODY, BLACK KNIGHT, MR NEWT (A VILLAGE - BLACKSMITH INTERESTED IN BURNING WITCHES), A QUITE - EXTRAORDINARILY RUDE FRENCHMAN, TIM THE WIZARD, SIR - LAUNCELOT - "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/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |