forked from aniani/vim
patch 8.1.0288: quickfix code uses cmdidx too often
Problem: Quickfix code uses cmdidx too often. Solution: Add is_loclist_cmd(). (Yegappan Lakshmanan)
This commit is contained in:
@@ -12529,6 +12529,20 @@ ex_folddo(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef FEAT_QUICKFIX
|
||||||
|
/*
|
||||||
|
* Returns TRUE if the supplied Ex cmdidx is for a location list command
|
||||||
|
* instead of a quickfix command.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
is_loclist_cmd(int cmdidx)
|
||||||
|
{
|
||||||
|
if (cmdidx < 0 || cmdidx > CMD_SIZE)
|
||||||
|
return FALSE;
|
||||||
|
return cmdnames[cmdidx].cmd_name[0] == 'l';
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
# if defined(FEAT_TIMERS) || defined(PROTO)
|
# if defined(FEAT_TIMERS) || defined(PROTO)
|
||||||
int
|
int
|
||||||
get_pressedreturn(void)
|
get_pressedreturn(void)
|
||||||
|
@@ -70,6 +70,7 @@ char_u *get_behave_arg(expand_T *xp, int idx);
|
|||||||
char_u *get_messages_arg(expand_T *xp, int idx);
|
char_u *get_messages_arg(expand_T *xp, int idx);
|
||||||
char_u *get_mapclear_arg(expand_T *xp, int idx);
|
char_u *get_mapclear_arg(expand_T *xp, int idx);
|
||||||
void set_no_hlsearch(int flag);
|
void set_no_hlsearch(int flag);
|
||||||
|
int is_loclist_cmd(int cmdidx);
|
||||||
int get_pressedreturn(void);
|
int get_pressedreturn(void);
|
||||||
void set_pressedreturn(int val);
|
void set_pressedreturn(int val);
|
||||||
/* vim: set ft=c : */
|
/* vim: set ft=c : */
|
||||||
|
113
src/quickfix.c
113
src/quickfix.c
@@ -3330,7 +3330,7 @@ qf_list(exarg_T *eap)
|
|||||||
recognised errors */
|
recognised errors */
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_llist)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -3478,7 +3478,7 @@ qf_age(exarg_T *eap)
|
|||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lolder || eap->cmdidx == CMD_lnewer)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -3526,7 +3526,7 @@ qf_history(exarg_T *eap)
|
|||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lhistory)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL || (qi->qf_listcount == 0
|
if (qi == NULL || (qi->qf_listcount == 0
|
||||||
&& qf_list_empty(qi, qi->qf_curlist)))
|
&& qf_list_empty(qi, qi->qf_curlist)))
|
||||||
@@ -3745,7 +3745,7 @@ ex_cwindow(exarg_T *eap)
|
|||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
win_T *win;
|
win_T *win;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lwindow)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -3781,7 +3781,7 @@ ex_cclose(exarg_T *eap)
|
|||||||
win_T *win = NULL;
|
win_T *win = NULL;
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lclose || eap->cmdidx == CMD_lwindow)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -3808,7 +3808,7 @@ ex_copen(exarg_T *eap)
|
|||||||
buf_T *qf_buf;
|
buf_T *qf_buf;
|
||||||
win_T *oldwin = curwin;
|
win_T *oldwin = curwin;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -3953,12 +3953,12 @@ qf_win_goto(win_T *win, linenr_T lnum)
|
|||||||
* :cbottom/:lbottom commands.
|
* :cbottom/:lbottom commands.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
ex_cbottom(exarg_T *eap UNUSED)
|
ex_cbottom(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
win_T *win;
|
win_T *win;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lbottom)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -4430,8 +4430,7 @@ ex_make(exarg_T *eap)
|
|||||||
enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
|
enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
|| eap->cmdidx == CMD_lgrepadd)
|
|
||||||
wp = curwin;
|
wp = curwin;
|
||||||
|
|
||||||
autowrite_all();
|
autowrite_all();
|
||||||
@@ -4570,7 +4569,7 @@ qf_get_size(exarg_T *eap)
|
|||||||
int i, sz = 0;
|
int i, sz = 0;
|
||||||
int prev_fnum = 0;
|
int prev_fnum = 0;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
/* Location list */
|
/* Location list */
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
@@ -4607,7 +4606,7 @@ qf_get_cur_idx(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
/* Location list */
|
/* Location list */
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
@@ -4631,7 +4630,7 @@ qf_get_cur_valid_idx(exarg_T *eap)
|
|||||||
int i, eidx = 0;
|
int i, eidx = 0;
|
||||||
int prev_fnum = 0;
|
int prev_fnum = 0;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
/* Location list */
|
/* Location list */
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
@@ -4724,12 +4723,7 @@ ex_cc(exarg_T *eap)
|
|||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
int errornr;
|
int errornr;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_ll
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
|| eap->cmdidx == CMD_lrewind
|
|
||||||
|| eap->cmdidx == CMD_lfirst
|
|
||||||
|| eap->cmdidx == CMD_llast
|
|
||||||
|| eap->cmdidx == CMD_ldo
|
|
||||||
|| eap->cmdidx == CMD_lfdo)
|
|
||||||
{
|
{
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -4743,13 +4737,18 @@ ex_cc(exarg_T *eap)
|
|||||||
errornr = (int)eap->line2;
|
errornr = (int)eap->line2;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (eap->cmdidx == CMD_cc || eap->cmdidx == CMD_ll)
|
switch (eap->cmdidx)
|
||||||
errornr = 0;
|
{
|
||||||
else if (eap->cmdidx == CMD_crewind || eap->cmdidx == CMD_lrewind
|
case CMD_cc: case CMD_ll:
|
||||||
|| eap->cmdidx == CMD_cfirst || eap->cmdidx == CMD_lfirst)
|
errornr = 0;
|
||||||
errornr = 1;
|
break;
|
||||||
else
|
case CMD_crewind: case CMD_lrewind: case CMD_cfirst:
|
||||||
errornr = 32767;
|
case CMD_lfirst:
|
||||||
|
errornr = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
errornr = 32767;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For cdo and ldo commands, jump to the nth valid error.
|
/* For cdo and ldo commands, jump to the nth valid error.
|
||||||
@@ -4774,15 +4773,9 @@ ex_cnext(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = &ql_info;
|
||||||
int errornr;
|
int errornr;
|
||||||
|
int dir;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lnext
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
|| eap->cmdidx == CMD_lNext
|
|
||||||
|| eap->cmdidx == CMD_lprevious
|
|
||||||
|| eap->cmdidx == CMD_lnfile
|
|
||||||
|| eap->cmdidx == CMD_lNfile
|
|
||||||
|| eap->cmdidx == CMD_lpfile
|
|
||||||
|| eap->cmdidx == CMD_ldo
|
|
||||||
|| eap->cmdidx == CMD_lfdo)
|
|
||||||
{
|
{
|
||||||
qi = GET_LOC_LIST(curwin);
|
qi = GET_LOC_LIST(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -4799,17 +4792,28 @@ ex_cnext(exarg_T *eap)
|
|||||||
else
|
else
|
||||||
errornr = 1;
|
errornr = 1;
|
||||||
|
|
||||||
qf_jump(qi, (eap->cmdidx == CMD_cnext || eap->cmdidx == CMD_lnext
|
// Depending on the command jump to either next or previous entry/file.
|
||||||
|| eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo)
|
switch (eap->cmdidx)
|
||||||
? FORWARD
|
{
|
||||||
: (eap->cmdidx == CMD_cnfile || eap->cmdidx == CMD_lnfile
|
case CMD_cnext: case CMD_lnext: case CMD_cdo: case CMD_ldo:
|
||||||
|| eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
|
dir = FORWARD;
|
||||||
? FORWARD_FILE
|
break;
|
||||||
: (eap->cmdidx == CMD_cpfile || eap->cmdidx == CMD_lpfile
|
case CMD_cprevious: case CMD_lprevious: case CMD_cNext:
|
||||||
|| eap->cmdidx == CMD_cNfile || eap->cmdidx == CMD_lNfile)
|
case CMD_lNext:
|
||||||
? BACKWARD_FILE
|
dir = BACKWARD;
|
||||||
: BACKWARD,
|
break;
|
||||||
errornr, eap->forceit);
|
case CMD_cnfile: case CMD_lnfile: case CMD_cfdo: case CMD_lfdo:
|
||||||
|
dir = FORWARD_FILE;
|
||||||
|
break;
|
||||||
|
case CMD_cpfile: case CMD_lpfile: case CMD_cNfile: case CMD_lNfile:
|
||||||
|
dir = BACKWARD_FILE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dir = FORWARD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
qf_jump(qi, dir, errornr, eap->forceit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -4857,9 +4861,7 @@ ex_cfile(exarg_T *eap)
|
|||||||
if (*eap->arg != NUL)
|
if (*eap->arg != NUL)
|
||||||
set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE, 0);
|
set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE, 0);
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lfile
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
|| eap->cmdidx == CMD_lgetfile
|
|
||||||
|| eap->cmdidx == CMD_laddfile)
|
|
||||||
wp = curwin;
|
wp = curwin;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -5178,10 +5180,7 @@ ex_vimgrep(exarg_T *eap)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lgrep
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
|| eap->cmdidx == CMD_lvimgrep
|
|
||||||
|| eap->cmdidx == CMD_lgrepadd
|
|
||||||
|| eap->cmdidx == CMD_lvimgrepadd)
|
|
||||||
{
|
{
|
||||||
qi = ll_get_or_alloc_list(curwin);
|
qi = ll_get_or_alloc_list(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -6525,9 +6524,7 @@ ex_cbuffer(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Must come after autocommands. */
|
/* Must come after autocommands. */
|
||||||
if (eap->cmdidx == CMD_lbuffer
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
|| eap->cmdidx == CMD_lgetbuffer
|
|
||||||
|| eap->cmdidx == CMD_laddbuffer)
|
|
||||||
{
|
{
|
||||||
qi = ll_get_or_alloc_list(curwin);
|
qi = ll_get_or_alloc_list(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -6631,9 +6628,7 @@ ex_cexpr(exarg_T *eap)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lexpr
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
|| eap->cmdidx == CMD_lgetexpr
|
|
||||||
|| eap->cmdidx == CMD_laddexpr)
|
|
||||||
{
|
{
|
||||||
qi = ll_get_or_alloc_list(curwin);
|
qi = ll_get_or_alloc_list(curwin);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
@@ -6922,7 +6917,7 @@ ex_helpgrep(exarg_T *eap)
|
|||||||
save_cpo = p_cpo;
|
save_cpo = p_cpo;
|
||||||
p_cpo = empty_option;
|
p_cpo = empty_option;
|
||||||
|
|
||||||
if (eap->cmdidx == CMD_lhelpgrep)
|
if (is_loclist_cmd(eap->cmdidx))
|
||||||
{
|
{
|
||||||
qi = hgr_get_ll(&new_qi);
|
qi = hgr_get_ll(&new_qi);
|
||||||
if (qi == NULL)
|
if (qi == NULL)
|
||||||
|
@@ -794,6 +794,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 */
|
||||||
|
/**/
|
||||||
|
288,
|
||||||
/**/
|
/**/
|
||||||
287,
|
287,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user