diff options
Diffstat (limited to 'data/vim/patches/8.1.0523')
-rw-r--r-- | data/vim/patches/8.1.0523 | 403 |
1 files changed, 403 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0523 b/data/vim/patches/8.1.0523 new file mode 100644 index 000000000..2c5ffa648 --- /dev/null +++ b/data/vim/patches/8.1.0523 @@ -0,0 +1,403 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0523 +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.0523 +Problem: Opening window from quickfix leaves empty buffer behind. +Solution: Add qf_jump_newwin(). (Yegappan Lakshmanan, closes #2574) +Files: src/proto/quickfix.pro, src/quickfix.c, + src/testdir/test_quickfix.vim + + +*** ../vim-8.1.0522/src/proto/quickfix.pro 2018-10-20 20:53:58.143284832 +0200 +--- src/proto/quickfix.pro 2018-11-11 22:45:31.145846186 +0100 +*************** +*** 4,9 **** +--- 4,10 ---- + void check_quickfix_busy(void); + void copy_loclist_stack(win_T *from, win_T *to); + void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit); ++ void qf_jump_newwin(qf_info_T *qi, int dir, int errornr, int forceit, int newwin); + void qf_list(exarg_T *eap); + void qf_age(exarg_T *eap); + void qf_history(exarg_T *eap); +*** ../vim-8.1.0522/src/quickfix.c 2018-10-28 14:36:04.222247691 +0100 +--- src/quickfix.c 2018-11-11 22:46:08.525548009 +0100 +*************** +*** 2699,2713 **** + } + + /* +! * Find a help window or open one. + */ + static int +! jump_to_help_window(qf_info_T *qi, int *opened_window) + { + win_T *wp; + int flags; + +! if (cmdmod.tab != 0) + wp = NULL; + else + wp = qf_find_help_win(); +--- 2699,2714 ---- + } + + /* +! * Find a help window or open one. If 'newwin' is TRUE, then open a new help +! * window. + */ + static int +! jump_to_help_window(qf_info_T *qi, int newwin, int *opened_window) + { + win_T *wp; + int flags; + +! if (cmdmod.tab != 0 || newwin) + wp = NULL; + else + wp = qf_find_help_win(); +*************** +*** 2721,2728 **** + if (cmdmod.split == 0 && curwin->w_width != Columns + && curwin->w_width < 80) + flags |= WSP_TOP; +! if (IS_LL_STACK(qi)) +! flags |= WSP_NEWLOC; // don't copy the location list + + if (win_split(0, flags) == FAIL) + return FAIL; +--- 2722,2731 ---- + if (cmdmod.split == 0 && curwin->w_width != Columns + && curwin->w_width < 80) + flags |= WSP_TOP; +! // If the user asks to open a new window, then copy the location list. +! // Otherwise, don't copy the location list. +! if (IS_LL_STACK(qi) && !newwin) +! flags |= WSP_NEWLOC; + + if (win_split(0, flags) == FAIL) + return FAIL; +*************** +*** 2732,2740 **** + if (curwin->w_height < p_hh) + win_setheight((int)p_hh); + +! if (IS_LL_STACK(qi)) // not a quickfix list + { +- // The new window should use the supplied location list + curwin->w_llist = qi; + qi->qf_refcount++; + } +--- 2735,2745 ---- + if (curwin->w_height < p_hh) + win_setheight((int)p_hh); + +! // When using location list, the new window should use the supplied +! // location list. If the user asks to open a new window, then the new +! // window will get a copy of the location list. +! if (IS_LL_STACK(qi) && !newwin) + { + curwin->w_llist = qi; + qi->qf_refcount++; + } +*************** +*** 2915,2934 **** + /* + * Find a suitable window for opening a file (qf_fnum) from the + * quickfix/location list and jump to it. If the file is already opened in a +! * window, jump to it. Otherwise open a new window to display the file. This is +! * called from either a quickfix or a location list window. + */ + static int +! qf_jump_to_usable_window(int qf_fnum, int *opened_window) + { + win_T *usable_win_ptr = NULL; + int usable_win; +! qf_info_T *ll_ref; + win_T *win; + + usable_win = 0; + +! ll_ref = curwin->w_llist_ref; + if (ll_ref != NULL) + { + // Find a non-quickfix window with this location list +--- 2920,2945 ---- + /* + * Find a suitable window for opening a file (qf_fnum) from the + * quickfix/location list and jump to it. If the file is already opened in a +! * window, jump to it. Otherwise open a new window to display the file. If +! * 'newwin' is TRUE, then always open a new window. This is called from either +! * a quickfix or a location list window. + */ + static int +! qf_jump_to_usable_window(int qf_fnum, int newwin, int *opened_window) + { + win_T *usable_win_ptr = NULL; + int usable_win; +! qf_info_T *ll_ref = NULL; + win_T *win; + + usable_win = 0; + +! // If opening a new window, then don't use the location list referred by +! // the current window. Otherwise two windows will refer to the same +! // location list. +! if (!newwin) +! ll_ref = curwin->w_llist_ref; +! + if (ll_ref != NULL) + { + // Find a non-quickfix window with this location list +*************** +*** 2952,2958 **** + + // If there is only one window and it is the quickfix window, create a + // new one above the quickfix window. +! if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win) + { + if (qf_open_new_file_win(ll_ref) != OK) + return FAIL; +--- 2963,2969 ---- + + // If there is only one window and it is the quickfix window, create a + // new one above the quickfix window. +! if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win || newwin) + { + if (qf_open_new_file_win(ll_ref) != OK) + return FAIL; +*************** +*** 3146,3162 **** + + /* + * Find a usable window for opening a file from the quickfix/location list. If +! * a window is not found then open a new window. + * Returns OK if successfully jumped or opened a window. Returns FAIL if not + * able to jump/open a window. Returns NOTDONE if a file is not associated + * with the entry. + */ + static int +! qf_jump_open_window(qf_info_T *qi, qfline_T *qf_ptr, int *opened_window) + { + // For ":helpgrep" find a help window or open one. + if (qf_ptr->qf_type == 1 && (!bt_help(curwin->w_buffer) || cmdmod.tab != 0)) +! if (jump_to_help_window(qi, opened_window) == FAIL) + return FAIL; + + // If currently in the quickfix window, find another window to show the +--- 3157,3178 ---- + + /* + * Find a usable window for opening a file from the quickfix/location list. If +! * a window is not found then open a new window. If 'newwin' is TRUE, then open +! * a new window. + * Returns OK if successfully jumped or opened a window. Returns FAIL if not + * able to jump/open a window. Returns NOTDONE if a file is not associated + * with the entry. + */ + static int +! qf_jump_open_window( +! qf_info_T *qi, +! qfline_T *qf_ptr, +! int newwin, +! int *opened_window) + { + // For ":helpgrep" find a help window or open one. + if (qf_ptr->qf_type == 1 && (!bt_help(curwin->w_buffer) || cmdmod.tab != 0)) +! if (jump_to_help_window(qi, newwin, opened_window) == FAIL) + return FAIL; + + // If currently in the quickfix window, find another window to show the +*************** +*** 3168,3174 **** + if (qf_ptr->qf_fnum == 0) + return NOTDONE; + +! if (qf_jump_to_usable_window(qf_ptr->qf_fnum, opened_window) == FAIL) + return FAIL; + } + +--- 3184,3191 ---- + if (qf_ptr->qf_fnum == 0) + return NOTDONE; + +! if (qf_jump_to_usable_window(qf_ptr->qf_fnum, newwin, +! opened_window) == FAIL) + return FAIL; + } + +*************** +*** 3229,3241 **** + } + + /* +! * jump to a quickfix line +! * if dir == FORWARD go "errornr" valid entries forward +! * if dir == BACKWARD go "errornr" valid entries backward +! * if dir == FORWARD_FILE go "errornr" valid entries files backward +! * if dir == BACKWARD_FILE go "errornr" valid entries files backward + * else if "errornr" is zero, redisplay the same line +! * else go to entry "errornr" + */ + void + qf_jump(qf_info_T *qi, +--- 3246,3258 ---- + } + + /* +! * Jump to a quickfix line. +! * If dir == FORWARD go "errornr" valid entries forward. +! * If dir == BACKWARD go "errornr" valid entries backward. +! * If dir == FORWARD_FILE go "errornr" valid entries files backward. +! * If dir == BACKWARD_FILE go "errornr" valid entries files backward + * else if "errornr" is zero, redisplay the same line +! * else go to entry "errornr". + */ + void + qf_jump(qf_info_T *qi, +*************** +*** 3243,3248 **** +--- 3260,3279 ---- + int errornr, + int forceit) + { ++ qf_jump_newwin(qi, dir, errornr, forceit, FALSE); ++ } ++ ++ /* ++ * As qf_info(). ++ * If 'newwin' is TRUE, then open the file in a new window. ++ */ ++ void ++ qf_jump_newwin(qf_info_T *qi, ++ int dir, ++ int errornr, ++ int forceit, ++ int newwin) ++ { + qf_list_T *qfl; + qfline_T *qf_ptr; + qfline_T *old_qf_ptr; +*************** +*** 3288,3294 **** + // window + print_message = FALSE; + +! retval = qf_jump_open_window(qi, qf_ptr, &opened_window); + if (retval == FAIL) + goto failed; + if (retval == NOTDONE) +--- 3319,3325 ---- + // window + print_message = FALSE; + +! retval = qf_jump_open_window(qi, qf_ptr, newwin, &opened_window); + if (retval == FAIL) + goto failed; + if (retval == NOTDONE) +*************** +*** 3824,3836 **** + + if (split) + { +! char_u cmd[32]; +! +! vim_snprintf((char *)cmd, sizeof(cmd), "split +%ld%s", +! (long)curwin->w_cursor.lnum, +! IS_LL_WINDOW(curwin) ? "ll" : "cc"); +! if (do_cmdline_cmd(cmd) == OK) +! do_cmdline_cmd((char_u *) "clearjumps"); + return; + } + +--- 3855,3863 ---- + + if (split) + { +! // Open the selected entry in a new window +! qf_jump_newwin(qi, 0, (long)curwin->w_cursor.lnum, FALSE, TRUE); +! do_cmdline_cmd((char_u *) "clearjumps"); + return; + } + +*** ../vim-8.1.0522/src/testdir/test_quickfix.vim 2018-10-28 14:36:04.222247691 +0100 +--- src/testdir/test_quickfix.vim 2018-11-11 22:46:08.525548009 +0100 +*************** +*** 3718,3720 **** +--- 3718,3766 ---- + call assert_equal(getcurpos()[4], virtcol('.')) + cclose | helpclose + endfunc ++ ++ " Test for opening a file from the quickfix window using CTRL-W <Enter> ++ " doesn't leave an empty buffer around. ++ func Test_splitview() ++ call s:create_test_file('Xtestfile1') ++ call s:create_test_file('Xtestfile2') ++ new | only ++ let last_bufnr = bufnr('Test_sv_1', 1) ++ let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4'] ++ cgetexpr l ++ copen ++ let numbufs = len(getbufinfo()) ++ exe "normal \<C-W>\<CR>" ++ copen ++ exe "normal j\<C-W>\<CR>" ++ " Make sure new empty buffers are not created ++ call assert_equal(numbufs, len(getbufinfo())) ++ " Creating a new buffer should use the next available buffer number ++ call assert_equal(last_bufnr + 4, bufnr("Test_sv_2", 1)) ++ bwipe Test_sv_1 ++ bwipe Test_sv_2 ++ new | only ++ ++ " When split opening files from location list window, make sure that two ++ " windows doesn't refer to the same location list ++ lgetexpr l ++ let locid = getloclist(0, {'id' : 0}).id ++ lopen ++ exe "normal \<C-W>\<CR>" ++ call assert_notequal(locid, getloclist(0, {'id' : 0}).id) ++ call assert_equal(0, getloclist(0, {'winid' : 0}).winid) ++ 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 ++ exe "normal j\<C-W>\<CR>" ++ call assert_notequal(locid, getloclist(0, {'id' : 0}).id) ++ call assert_equal(0, getloclist(0, {'winid' : 0}).winid) ++ new | only ++ ++ call delete('Xtestfile1') ++ call delete('Xtestfile2') ++ endfunc +*** ../vim-8.1.0522/src/version.c 2018-11-11 22:18:17.214948188 +0100 +--- src/version.c 2018-11-11 22:49:25.382976159 +0100 +*************** +*** 794,795 **** +--- 794,797 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 523, + /**/ + +-- +ARTHUR: Bloody peasant! +DENNIS: Oh, what a give away. Did you hear that, did you hear that, eh? + That's what I'm on about -- did you see him repressing me, you saw it + didn't you? + The Quest for the Holy Grail (Monty Python) + + /// 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 /// |