return wp->w_llist;
}
+/*
+ * Get the quickfix/location list stack to use for the specified Ex command.
+ * For a location list command, returns the stack for the current window. If
+ * the location list is not found, then returns NULL and prints an error
+ * message if 'print_emsg' is TRUE.
+ */
+ static qf_info_T *
+qf_cmd_get_stack(exarg_T *eap, int print_emsg)
+{
+ qf_info_T *qi = &ql_info;
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+ {
+ if (print_emsg)
+ emsg(_(e_loclist));
+ return NULL;
+ }
+ }
+
+ return qi;
+}
+
+/*
+ * Get the quickfix/location list stack to use for the specified Ex command.
+ * For a location list command, returns the stack for the current window.
+ * If the location list is not present, then allocates a new one.
+ * Returns NULL if the allocation fails. For a location list command, sets
+ * 'pwinp' to curwin.
+ */
+ static qf_info_T *
+qf_cmd_get_or_alloc_stack(exarg_T *eap, win_T **pwinp)
+{
+ qf_info_T *qi = &ql_info;
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+ return NULL;
+ *pwinp = curwin;
+ }
+
+ return qi;
+}
+
/*
* Copy location list entries from 'from_qfl' to 'to_qfl'.
*/
int plus = FALSE;
int all = eap->forceit; // if not :cl!, only show
// recognised errors
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- {
- emsg(_(e_loclist));
- return;
- }
- }
+ if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL)
+ return;
if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi)))
{
void
qf_age(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
int count;
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- {
- emsg(_(e_loclist));
- return;
- }
- }
+ if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL)
+ return;
if (eap->addr_count != 0)
count = eap->line2;
void
qf_history(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi = qf_cmd_get_stack(eap, FALSE);
int i;
- if (is_loclist_cmd(eap->cmdidx))
- qi = GET_LOC_LIST(curwin);
if (qf_stack_empty(qi))
msg(_("No entries"));
else
void
ex_cwindow(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
qf_list_T *qfl;
win_T *win;
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- return;
- }
+ if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL)
+ return;
qfl = qf_get_curlist(qi);
ex_cclose(exarg_T *eap)
{
win_T *win = NULL;
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- return;
- }
+ if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL)
+ return;
// Find existing quickfix window and close it.
win = qf_find_win(qi);
void
ex_copen(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
qf_list_T *qfl;
int height;
int status = FAIL;
int lnum;
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- {
- emsg(_(e_loclist));
- return;
- }
- }
+ if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL)
+ return;
incr_quickfix_busy();
void
ex_cbottom(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
win_T *win;
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- {
- emsg(_(e_loclist));
- return;
- }
- }
+ if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL)
+ return;
win = qf_find_win(qi);
if (win != NULL && win->w_cursor.lnum != win->w_buffer->b_ml.ml_line_count)
int
qf_get_size(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
qf_list_T *qfl;
qfline_T *qfp;
int i, sz = 0;
int prev_fnum = 0;
- if (is_loclist_cmd(eap->cmdidx))
- {
- // Location list
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- return 0;
- }
+ if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL)
+ return 0;
qfl = qf_get_curlist(qi);
FOR_ALL_QFL_ITEMS(qfl, qfp, i)
int
qf_get_cur_idx(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
- if (is_loclist_cmd(eap->cmdidx))
- {
- // Location list
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- return 0;
- }
+ if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL)
+ return 0;
return qf_get_curlist(qi)->qf_index;
}
int
qf_get_cur_valid_idx(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
qf_list_T *qfl;
qfline_T *qfp;
int i, eidx = 0;
int prev_fnum = 0;
- if (is_loclist_cmd(eap->cmdidx))
- {
- // Location list
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- return 1;
- }
+ if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL)
+ return 1;
qfl = qf_get_curlist(qi);
qfp = qfl->qf_start;
void
ex_cc(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
int errornr;
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- {
- emsg(_(e_loclist));
- return;
- }
- }
+ if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL)
+ return;
if (eap->addr_count > 0)
errornr = (int)eap->line2;
void
ex_cnext(exarg_T *eap)
{
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
int errornr;
int dir;
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = GET_LOC_LIST(curwin);
- if (qi == NULL)
- {
- emsg(_(e_loclist));
- return;
- }
- }
+ if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL)
+ return;
if (eap->addr_count > 0
&& (eap->cmdidx != CMD_cdo && eap->cmdidx != CMD_ldo
char_u *s;
char_u *p;
int fi;
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
qf_list_T *qfl;
int_u save_qfid;
win_T *wp = NULL;
#endif
}
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = ll_get_or_alloc_list(curwin);
- if (qi == NULL)
- return;
- wp = curwin;
- }
+ qi = qf_cmd_get_or_alloc_stack(eap, &wp);
+ if (qi == NULL)
+ return;
if (eap->addr_count > 0)
tomatch = eap->line2;
ex_cbuffer(exarg_T *eap)
{
buf_T *buf = NULL;
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
char_u *au_name = NULL;
int res;
int_u save_qfid;
}
// Must come after autocommands.
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = ll_get_or_alloc_list(curwin);
- if (qi == NULL)
- return;
- wp = curwin;
- }
+ qi = qf_cmd_get_or_alloc_stack(eap, &wp);
+ if (qi == NULL)
+ return;
if (cbuffer_process_args(eap, &buf, &line1, &line2) == FAIL)
return;
ex_cexpr(exarg_T *eap)
{
typval_T *tv;
- qf_info_T *qi = &ql_info;
+ qf_info_T *qi;
char_u *au_name = NULL;
int res;
int_u save_qfid;
#endif
}
- if (is_loclist_cmd(eap->cmdidx))
- {
- qi = ll_get_or_alloc_list(curwin);
- if (qi == NULL)
- return;
- wp = curwin;
- }
+ qi = qf_cmd_get_or_alloc_stack(eap, &wp);
+ if (qi == NULL)
+ return;
// Evaluate the expression. When the result is a string or a list we can
// use it to fill the errorlist.