mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Problem: CTRL-W CR does not work properly in a quickfix window. Solution: Split the window if needed. (Jason Franklin)
This commit is contained in:
parent
53901442f3
commit
0a08c63da1
14
src/normal.c
14
src/normal.c
@ -6202,18 +6202,12 @@ nv_down(cmdarg_T *cap)
|
|||||||
cap->arg = FORWARD;
|
cap->arg = FORWARD;
|
||||||
nv_page(cap);
|
nv_page(cap);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#if defined(FEAT_QUICKFIX)
|
#if defined(FEAT_QUICKFIX)
|
||||||
/* In a quickfix window a <CR> jumps to the error under the cursor. */
|
/* Quickfix window only: view the result under the cursor. */
|
||||||
if (bt_quickfix(curbuf) && cap->cmdchar == CAR)
|
else if (bt_quickfix(curbuf) && cap->cmdchar == CAR)
|
||||||
{
|
qf_view_result(FALSE);
|
||||||
if (curwin->w_llist_ref == NULL)
|
|
||||||
do_cmdline_cmd((char_u *)".cc"); /* quickfix window */
|
|
||||||
else
|
|
||||||
do_cmdline_cmd((char_u *)".ll"); /* location list window */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
|
else
|
||||||
{
|
{
|
||||||
#ifdef FEAT_CMDWIN
|
#ifdef FEAT_CMDWIN
|
||||||
/* In the cmdline window a <CR> executes the command. */
|
/* In the cmdline window a <CR> executes the command. */
|
||||||
|
@ -7,6 +7,7 @@ void qf_list(exarg_T *eap);
|
|||||||
void qf_age(exarg_T *eap);
|
void qf_age(exarg_T *eap);
|
||||||
void qf_history(exarg_T *eap);
|
void qf_history(exarg_T *eap);
|
||||||
void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after);
|
void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after);
|
||||||
|
void qf_view_result(int split);
|
||||||
void ex_cwindow(exarg_T *eap);
|
void ex_cwindow(exarg_T *eap);
|
||||||
void ex_cclose(exarg_T *eap);
|
void ex_cclose(exarg_T *eap);
|
||||||
void ex_copen(exarg_T *eap);
|
void ex_copen(exarg_T *eap);
|
||||||
|
@ -3489,6 +3489,42 @@ qf_types(int c, int nr)
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When "split" is FALSE: Open the entry/result under the cursor.
|
||||||
|
* When "split" is TRUE: Open the entry/result under the cursor in a new window.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
qf_view_result(int split)
|
||||||
|
{
|
||||||
|
qf_info_T *qi = &ql_info;
|
||||||
|
|
||||||
|
if (!bt_quickfix(curbuf))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (IS_LL_WINDOW(curwin))
|
||||||
|
qi = GET_LOC_LIST(curwin);
|
||||||
|
|
||||||
|
if (qi == NULL || qi->qf_lists[qi->qf_curlist].qf_count == 0)
|
||||||
|
{
|
||||||
|
EMSG(_(e_quickfix));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
do_cmdline_cmd((char_u *)(IS_LL_WINDOW(curwin) ? ".ll" : ".cc"));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ":cwindow": open the quickfix window if we have errors to display,
|
* ":cwindow": open the quickfix window if we have errors to display,
|
||||||
* close it if not.
|
* close it if not.
|
||||||
|
@ -3504,3 +3504,21 @@ func Test_filter_clist()
|
|||||||
call assert_equal([' 1 abc:pat1: '],
|
call assert_equal([' 1 abc:pat1: '],
|
||||||
\ split(execute('filter /pat1/ clist'), "\n"))
|
\ split(execute('filter /pat1/ clist'), "\n"))
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Tests for the "CTRL-W <CR>" command.
|
||||||
|
func Xview_result_split_tests(cchar)
|
||||||
|
call s:setup_commands(a:cchar)
|
||||||
|
|
||||||
|
" Test that "CTRL-W <CR>" in a qf/ll window fails with empty list.
|
||||||
|
call g:Xsetlist([])
|
||||||
|
Xopen
|
||||||
|
let l:win_count = winnr('$')
|
||||||
|
call assert_fails('execute "normal! \<C-W>\<CR>"', 'E42')
|
||||||
|
call assert_equal(l:win_count, winnr('$'))
|
||||||
|
Xclose
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_view_result_split()
|
||||||
|
call Xview_result_split_tests('c')
|
||||||
|
call Xview_result_split_tests('l')
|
||||||
|
endfunc
|
||||||
|
@ -793,6 +793,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
213,
|
||||||
/**/
|
/**/
|
||||||
212,
|
212,
|
||||||
/**/
|
/**/
|
||||||
|
17
src/window.c
17
src/window.c
@ -520,23 +520,14 @@ wingotofile:
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Quickfix window only: view the result under the cursor in a new split. */
|
||||||
|
#if defined(FEAT_QUICKFIX)
|
||||||
case K_KENTER:
|
case K_KENTER:
|
||||||
case CAR:
|
case CAR:
|
||||||
#if defined(FEAT_QUICKFIX)
|
|
||||||
/*
|
|
||||||
* In a quickfix window a <CR> jumps to the error under the
|
|
||||||
* cursor in a new window.
|
|
||||||
*/
|
|
||||||
if (bt_quickfix(curbuf))
|
if (bt_quickfix(curbuf))
|
||||||
{
|
qf_view_result(TRUE);
|
||||||
sprintf((char *)cbuf, "split +%ld%s",
|
|
||||||
(long)curwin->w_cursor.lnum,
|
|
||||||
(curwin->w_llist_ref == NULL) ? "cc" : "ll");
|
|
||||||
do_cmdline_cmd(cbuf);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* CTRL-W g extended commands */
|
/* CTRL-W g extended commands */
|
||||||
case 'g':
|
case 'g':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user