aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_docmd.c11
-rw-r--r--src/nvim/quickfix.c122
2 files changed, 76 insertions, 57 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index ae3fb4fbfb..16751b3a53 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -10139,6 +10139,17 @@ static void ex_folddo(exarg_T *eap)
ml_clearmarked(); // clear rest of the marks
}
+// Returns true if the supplied Ex cmdidx is for a location list command
+// instead of a quickfix command.
+bool is_loclist_cmd(int cmdidx)
+ FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ if (cmdidx < 0 || cmdidx > CMD_SIZE) {
+ return false;
+ }
+ return cmdnames[cmdidx].cmd_name[0] == 'l';
+}
+
bool get_pressedreturn(void)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index c220516270..4483ada3e4 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -2647,7 +2647,7 @@ void qf_list(exarg_T *eap)
// recognised errors
qf_info_T *qi = &ql_info;
- if (eap->cmdidx == CMD_llist) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
EMSG(_(e_loclist));
@@ -2856,7 +2856,7 @@ void qf_age(exarg_T *eap)
qf_info_T *qi = &ql_info;
int count;
- if (eap->cmdidx == CMD_lolder || eap->cmdidx == CMD_lnewer) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
EMSG(_(e_loclist));
@@ -2895,7 +2895,7 @@ void qf_history(exarg_T *eap)
qf_info_T *qi = &ql_info;
int i;
- if (eap->cmdidx == CMD_lhistory) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = GET_LOC_LIST(curwin);
}
if (qi == NULL || (qi->qf_listcount == 0
@@ -3097,7 +3097,7 @@ void ex_cwindow(exarg_T *eap)
qf_info_T *qi = &ql_info;
win_T *win;
- if (eap->cmdidx == CMD_lwindow) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = GET_LOC_LIST(curwin);
if (qi == NULL)
return;
@@ -3129,7 +3129,7 @@ void ex_cclose(exarg_T *eap)
win_T *win = NULL;
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);
if (qi == NULL)
return;
@@ -3155,7 +3155,7 @@ void ex_copen(exarg_T *eap)
buf_T *qf_buf;
win_T *oldwin = curwin;
- if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
EMSG(_(e_loclist));
@@ -3284,7 +3284,7 @@ void ex_cbottom(exarg_T *eap)
{
qf_info_T *qi = &ql_info;
- if (eap->cmdidx == CMD_lbottom) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
EMSG(_(e_loclist));
@@ -3700,9 +3700,9 @@ void ex_make(exarg_T *eap)
}
}
- if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
- || eap->cmdidx == CMD_lgrepadd)
+ if (is_loclist_cmd(eap->cmdidx)) {
wp = curwin;
+ }
autowrite_all();
fname = get_mef_name();
@@ -3817,7 +3817,7 @@ size_t qf_get_size(exarg_T *eap)
FUNC_ATTR_NONNULL_ALL
{
qf_info_T *qi = &ql_info;
- if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) {
+ if (is_loclist_cmd(eap->cmdidx)) {
// Location list.
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
@@ -3857,7 +3857,7 @@ size_t qf_get_cur_idx(exarg_T *eap)
{
qf_info_T *qi = &ql_info;
- if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) {
+ if (is_loclist_cmd(eap->cmdidx)) {
// Location list.
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
@@ -3877,7 +3877,7 @@ int qf_get_cur_valid_idx(exarg_T *eap)
{
qf_info_T *qi = &ql_info;
- if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) {
+ if (is_loclist_cmd(eap->cmdidx)) {
// Location list.
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
@@ -3970,12 +3970,7 @@ void ex_cc(exarg_T *eap)
{
qf_info_T *qi = &ql_info;
- if (eap->cmdidx == CMD_ll
- || eap->cmdidx == CMD_lrewind
- || eap->cmdidx == CMD_lfirst
- || eap->cmdidx == CMD_llast
- || eap->cmdidx == CMD_ldo
- || eap->cmdidx == CMD_lfdo) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
EMSG(_(e_loclist));
@@ -3986,13 +3981,22 @@ void ex_cc(exarg_T *eap)
int errornr;
if (eap->addr_count > 0) {
errornr = (int)eap->line2;
- } else if (eap->cmdidx == CMD_cc || eap->cmdidx == CMD_ll) {
- errornr = 0;
- } else if (eap->cmdidx == CMD_crewind || eap->cmdidx == CMD_lrewind
- || eap->cmdidx == CMD_cfirst || eap->cmdidx == CMD_lfirst) {
- errornr = 1;
} else {
- errornr = 32767;
+ switch (eap->cmdidx) {
+ case CMD_cc:
+ case CMD_ll:
+ errornr = 0;
+ break;
+ case CMD_crewind:
+ case CMD_lrewind:
+ case CMD_cfirst:
+ case CMD_lfirst:
+ errornr = 1;
+ break;
+ default:
+ errornr = 32767;
+ break;
+ }
}
// For cdo and ldo commands, jump to the nth valid error.
@@ -4024,14 +4028,7 @@ void ex_cnext(exarg_T *eap)
{
qf_info_T *qi = &ql_info;
- if (eap->cmdidx == CMD_lnext
- || 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) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = GET_LOC_LIST(curwin);
if (qi == NULL) {
EMSG(_(e_loclist));
@@ -4048,17 +4045,37 @@ void ex_cnext(exarg_T *eap)
errornr = 1;
}
- qf_jump(qi, (eap->cmdidx == CMD_cnext || eap->cmdidx == CMD_lnext
- || eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo)
- ? FORWARD
- : (eap->cmdidx == CMD_cnfile || eap->cmdidx == CMD_lnfile
- || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
- ? FORWARD_FILE
- : (eap->cmdidx == CMD_cpfile || eap->cmdidx == CMD_lpfile
- || eap->cmdidx == CMD_cNfile || eap->cmdidx == CMD_lNfile)
- ? BACKWARD_FILE
- : BACKWARD,
- errornr, eap->forceit);
+ // Depending on the command jump to either next or previous entry/file.
+ Direction dir;
+ switch (eap->cmdidx) {
+ case CMD_cprevious:
+ case CMD_lprevious:
+ case CMD_cNext:
+ case CMD_lNext:
+ dir = BACKWARD;
+ break;
+ 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;
+ case CMD_cnext:
+ case CMD_lnext:
+ case CMD_cdo:
+ case CMD_ldo:
+ default:
+ dir = FORWARD;
+ break;
+ }
+
+ qf_jump(qi, dir, errornr, eap->forceit);
}
/*
@@ -4087,9 +4104,7 @@ void ex_cfile(exarg_T *eap)
char_u *enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
- if (eap->cmdidx == CMD_lfile
- || eap->cmdidx == CMD_lgetfile
- || eap->cmdidx == CMD_laddfile) {
+ if (is_loclist_cmd(eap->cmdidx)) {
wp = curwin;
}
@@ -4346,10 +4361,7 @@ void ex_vimgrep(exarg_T *eap)
}
}
- if (eap->cmdidx == CMD_lgrep
- || eap->cmdidx == CMD_lvimgrep
- || eap->cmdidx == CMD_lgrepadd
- || eap->cmdidx == CMD_lvimgrepadd) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = ll_get_or_alloc_list(curwin);
wp = curwin;
}
@@ -5575,9 +5587,7 @@ void ex_cbuffer(exarg_T *eap)
}
// Must come after autocommands.
- if (eap->cmdidx == CMD_lbuffer
- || eap->cmdidx == CMD_lgetbuffer
- || eap->cmdidx == CMD_laddbuffer) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = ll_get_or_alloc_list(curwin);
wp = curwin;
}
@@ -5677,9 +5687,7 @@ void ex_cexpr(exarg_T *eap)
}
}
- if (eap->cmdidx == CMD_lexpr
- || eap->cmdidx == CMD_lgetexpr
- || eap->cmdidx == CMD_laddexpr) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = ll_get_or_alloc_list(curwin);
wp = curwin;
}
@@ -5878,7 +5886,7 @@ void ex_helpgrep(exarg_T *eap)
char_u *const save_cpo = p_cpo;
p_cpo = empty_option;
- if (eap->cmdidx == CMD_lhelpgrep) {
+ if (is_loclist_cmd(eap->cmdidx)) {
qi = hgr_get_ll(&new_qi);
}