Mercurial > vim
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; |