1
0
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:
Bram Moolenaar
2018-08-15 20:59:48 +02:00
parent 37b15568c2
commit 396659592f
4 changed files with 71 additions and 59 deletions

View File

@@ -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)

View File

@@ -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 : */

View File

@@ -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,14 +4737,19 @@ 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)
{
case CMD_cc: case CMD_ll:
errornr = 0; errornr = 0;
else if (eap->cmdidx == CMD_crewind || eap->cmdidx == CMD_lrewind break;
|| eap->cmdidx == CMD_cfirst || eap->cmdidx == CMD_lfirst) case CMD_crewind: case CMD_lrewind: case CMD_cfirst:
case CMD_lfirst:
errornr = 1; errornr = 1;
else break;
default:
errornr = 32767; errornr = 32767;
} }
}
/* For cdo and ldo commands, jump to the nth valid error. /* For cdo and ldo commands, jump to the nth valid error.
* For cfdo and lfdo commands, jump to the nth valid file entry. * For cfdo and lfdo commands, jump to the nth valid file entry.
@@ -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)

View File

@@ -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,
/**/ /**/