comparison src/quickfix.c @ 11502:46bbef0ee9a6 v8.0.0634

patch 8.0.0634: cannot easily get to the last quickfix list commit https://github.com/vim/vim/commit/875feea6ce223462d55543735143d747dcaf4287 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 11 16:07:51 2017 +0200 patch 8.0.0634: cannot easily get to the last quickfix list Problem: Cannot easily get to the last quickfix list. Solution: Add "$" as a value for the "nr" argument of getqflist() and setqflist(). (Yegappan Lakshmanan)
author Christian Brabandt <cb@256bit.org>
date Sun, 11 Jun 2017 16:15:04 +0200
parents d2f00eb352b9
children 80491a71c716
comparison
equal deleted inserted replaced
11501:2ac2ec9f4160 11502:46bbef0ee9a6
4668 4668
4669 if (wp != NULL) 4669 if (wp != NULL)
4670 { 4670 {
4671 qi = GET_LOC_LIST(wp); 4671 qi = GET_LOC_LIST(wp);
4672 if (qi == NULL) 4672 if (qi == NULL)
4673 {
4674 /* If querying for the size of the location list, return 0 */
4675 if (((di = dict_find(what, (char_u *)"nr", -1)) != NULL) &&
4676 (di->di_tv.v_type == VAR_STRING) &&
4677 (STRCMP(di->di_tv.vval.v_string, "$") == 0))
4678 return dict_add_nr_str(retdict, "nr", 0, NULL);
4673 return FAIL; 4679 return FAIL;
4680 }
4674 } 4681 }
4675 4682
4676 qf_idx = qi->qf_curlist; /* default is the current list */ 4683 qf_idx = qi->qf_curlist; /* default is the current list */
4677 if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL) 4684 if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL)
4678 { 4685 {
4683 if (di->di_tv.vval.v_number != 0) 4690 if (di->di_tv.vval.v_number != 0)
4684 { 4691 {
4685 qf_idx = di->di_tv.vval.v_number - 1; 4692 qf_idx = di->di_tv.vval.v_number - 1;
4686 if (qf_idx < 0 || qf_idx >= qi->qf_listcount) 4693 if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
4687 return FAIL; 4694 return FAIL;
4695 } else if (qi->qf_listcount == 0) /* stack is empty */
4696 return FAIL;
4697 flags |= QF_GETLIST_NR;
4698 } else if ((di->di_tv.v_type == VAR_STRING) &&
4699 (STRCMP(di->di_tv.vval.v_string, "$") == 0))
4700 {
4701 {
4702 /* Get the last quickfix list number */
4703 if (qi->qf_listcount > 0)
4704 qf_idx = qi->qf_listcount - 1;
4705 else
4706 qf_idx = -1; /* Quickfix stack is empty */
4688 } 4707 }
4689 flags |= QF_GETLIST_NR; 4708 flags |= QF_GETLIST_NR;
4690 } 4709 }
4691 else 4710 else
4692 return FAIL; 4711 return FAIL;
4693 } 4712 }
4694 4713
4695 if (dict_find(what, (char_u *)"all", -1) != NULL) 4714 if (qf_idx != -1)
4696 flags |= QF_GETLIST_ALL; 4715 {
4697 4716 if (dict_find(what, (char_u *)"all", -1) != NULL)
4698 if (dict_find(what, (char_u *)"title", -1) != NULL) 4717 flags |= QF_GETLIST_ALL;
4699 flags |= QF_GETLIST_TITLE; 4718
4700 4719 if (dict_find(what, (char_u *)"title", -1) != NULL)
4701 if (dict_find(what, (char_u *)"winid", -1) != NULL) 4720 flags |= QF_GETLIST_TITLE;
4702 flags |= QF_GETLIST_WINID; 4721
4703 4722 if (dict_find(what, (char_u *)"winid", -1) != NULL)
4704 if (dict_find(what, (char_u *)"context", -1) != NULL) 4723 flags |= QF_GETLIST_WINID;
4705 flags |= QF_GETLIST_CONTEXT; 4724
4725 if (dict_find(what, (char_u *)"context", -1) != NULL)
4726 flags |= QF_GETLIST_CONTEXT;
4727 }
4706 4728
4707 if (flags & QF_GETLIST_TITLE) 4729 if (flags & QF_GETLIST_TITLE)
4708 { 4730 {
4709 char_u *t; 4731 char_u *t;
4710 t = qi->qf_lists[qf_idx].qf_title; 4732 t = qi->qf_lists[qf_idx].qf_title;
4893 /* for zero use the current list */ 4915 /* for zero use the current list */
4894 if (di->di_tv.vval.v_number != 0) 4916 if (di->di_tv.vval.v_number != 0)
4895 qf_idx = di->di_tv.vval.v_number - 1; 4917 qf_idx = di->di_tv.vval.v_number - 1;
4896 if (qf_idx < 0 || qf_idx >= qi->qf_listcount) 4918 if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
4897 return FAIL; 4919 return FAIL;
4898 } 4920 } else if (di->di_tv.v_type == VAR_STRING &&
4921 STRCMP(di->di_tv.vval.v_string, "$") == 0 &&
4922 qi->qf_listcount > 0)
4923 qf_idx = qi->qf_listcount - 1;
4899 else 4924 else
4900 return FAIL; 4925 return FAIL;
4901 newlist = FALSE; /* use the specified list */ 4926 newlist = FALSE; /* use the specified list */
4902 } 4927 }
4903 4928
4921 } 4946 }
4922 4947
4923 if ((di = dict_find(what, (char_u *)"context", -1)) != NULL) 4948 if ((di = dict_find(what, (char_u *)"context", -1)) != NULL)
4924 { 4949 {
4925 typval_T *ctx; 4950 typval_T *ctx;
4951
4926 free_tv(qi->qf_lists[qf_idx].qf_ctx); 4952 free_tv(qi->qf_lists[qf_idx].qf_ctx);
4927 ctx = alloc_tv(); 4953 ctx = alloc_tv();
4928 if (ctx != NULL) 4954 if (ctx != NULL)
4929 copy_tv(&di->di_tv, ctx); 4955 copy_tv(&di->di_tv, ctx);
4930 qi->qf_lists[qf_idx].qf_ctx = ctx; 4956 qi->qf_lists[qf_idx].qf_ctx = ctx;