diff options
Diffstat (limited to 'data/vim/patches/8.1.0720')
-rw-r--r-- | data/vim/patches/8.1.0720 | 499 |
1 files changed, 499 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0720 b/data/vim/patches/8.1.0720 new file mode 100644 index 000000000..dae2d975d --- /dev/null +++ b/data/vim/patches/8.1.0720 @@ -0,0 +1,499 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0720 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0720 +Problem: Cannot easily change the current quickfx list index. +Solution: Add the "idx" argument to setqflist(). (Yegappan Lakshmanan, + closes #3701) +Files: runtime/doc/eval.txt, runtime/doc/quickfix.txt, src/quickfix.c, + src/testdir/test_quickfix.vim + + +*** ../vim-8.1.0719/runtime/doc/eval.txt 2019-01-11 13:42:31.676331183 +0100 +--- runtime/doc/eval.txt 2019-01-11 14:44:08.978341403 +0100 +*************** +*** 4862,4868 **** + id get information for the quickfix list with + |quickfix-ID|; zero means the id for the + current list or the list specified by "nr" +! idx index of the current entry in the list + items quickfix list entries + lines parse a list of lines using 'efm' and return + the resulting entries. Only a |List| type is +--- 4885,4893 ---- + id get information for the quickfix list with + |quickfix-ID|; zero means the id for the + current list or the list specified by "nr" +! idx index of the current entry in the quickfix +! list specified by 'id' or 'nr'. +! See |quickfix-index| + items quickfix list entries + lines parse a list of lines using 'efm' and return + the resulting entries. Only a |List| type is +*************** +*** 5032,5039 **** + Each List item is a Dictionary with the following entries: + bufnr number of buffer in the window + height window height (excluding winbar) +- winbar 1 if the window has a toolbar, 0 +- otherwise + loclist 1 if showing a location list + {only with the +quickfix feature} + quickfix 1 if quickfix or location list window +--- 5057,5062 ---- +*************** +*** 5044,5049 **** +--- 5067,5074 ---- + variables a reference to the dictionary with + window-local variables + width window width ++ winbar 1 if the window has a toolbar, 0 ++ otherwise + wincol leftmost screen column of the window, + col from |win_screenpos()| + winid |window-ID| +*************** +*** 7675,7690 **** + efm errorformat to use when parsing text from + "lines". If this is not present, then the + 'errorformat' option value is used. + id quickfix list identifier |quickfix-ID| + items list of quickfix entries. Same as the {list} + argument. + lines use 'errorformat' to parse a list of lines and + add the resulting entries to the quickfix list + {nr} or {id}. Only a |List| value is supported. + nr list number in the quickfix stack; zero + means the current quickfix list and "$" means +! the last quickfix list +! title quickfix list title text + Unsupported keys in {what} are ignored. + If the "nr" item is not present, then the current quickfix list + is modified. When creating a new quickfix list, "nr" can be +--- 7703,7724 ---- + efm errorformat to use when parsing text from + "lines". If this is not present, then the + 'errorformat' option value is used. ++ See |quickfix-parse| + id quickfix list identifier |quickfix-ID| ++ idx index of the current entry in the quickfix ++ list specified by 'id' or 'nr'. If set to '$', ++ then the last entry in the list is set as the ++ current entry. See |quickfix-index| + items list of quickfix entries. Same as the {list} + argument. + lines use 'errorformat' to parse a list of lines and + add the resulting entries to the quickfix list + {nr} or {id}. Only a |List| value is supported. ++ See |quickfix-parse| + nr list number in the quickfix stack; zero + means the current quickfix list and "$" means +! the last quickfix list. +! title quickfix list title text. See |quickfix-title| + Unsupported keys in {what} are ignored. + If the "nr" item is not present, then the current quickfix list + is modified. When creating a new quickfix list, "nr" can be +*** ../vim-8.1.0719/runtime/doc/quickfix.txt 2018-08-21 19:22:00.366591999 +0200 +--- runtime/doc/quickfix.txt 2019-01-11 14:44:08.978341403 +0100 +*************** +*** 46,52 **** + + *quickfix-ID* + Each quickfix list has a unique identifier called the quickfix ID and this +! number will not change within a Vim session. The getqflist() function can be + used to get the identifier assigned to a list. There is also a quickfix list + number which may change whenever more than ten lists are added to a quickfix + stack. +--- 46,52 ---- + + *quickfix-ID* + Each quickfix list has a unique identifier called the quickfix ID and this +! number will not change within a Vim session. The |getqflist()| function can be + used to get the identifier assigned to a list. There is also a quickfix list + number which may change whenever more than ten lists are added to a quickfix + stack. +*************** +*** 56,61 **** +--- 56,62 ---- + like `:lvimgrep`, `:lgrep`, `:lhelpgrep`, `:lmake`, etc., which create a + location list instead of a quickfix list as the corresponding `:vimgrep`, + `:grep`, `:helpgrep`, `:make` do. ++ *location-list-file-window* + A location list is associated with a window and each window can have a + separate location list. A location list can be associated with only one + window. The location list is independent of the quickfix list. +*************** +*** 68,74 **** + Every quickfix and location list has a read-only changedtick variable that + tracks the total number of changes made to the list. Every time the quickfix + list is modified, this count is incremented. This can be used to perform an +! action only when the list has changed. The getqflist() and getloclist() + functions can be used to query the current value of changedtick. You cannot + change the changedtick variable. + +--- 69,75 ---- + Every quickfix and location list has a read-only changedtick variable that + tracks the total number of changes made to the list. Every time the quickfix + list is modified, this count is incremented. This can be used to perform an +! action only when the list has changed. The |getqflist()| and |getloclist()| + functions can be used to query the current value of changedtick. You cannot + change the changedtick variable. + +*************** +*** 364,369 **** +--- 365,387 ---- + call setloclist(3, [], 'a', {'title' : 'Cmd output'}) + echo getloclist(3, {'title' : 1}) + < ++ *quickfix-index* ++ When you jump to a quickfix/location list entry using any of the quickfix ++ commands (e.g. |cc|, |cnext|, |cprev|, etc.), that entry becomes the currently ++ selected entry. The index of the currently selected entry in a ++ quickfix/location list can be obtained using the getqflist()/getloclist() ++ functions. Examples: > ++ echo getqflist({'idx' : 0}).idx ++ echo getqflist({'id' : qfid, 'idx' : 0}).idx ++ echo getloclist(2, {'idx' : 0}).idx ++ < ++ For a new quickfix list, the first entry is selected and the index is 1. Any ++ entry in any quickfix/location list can be set as the currently selected entry ++ using the setqflist() function. Examples: > ++ call setqflist([], 'a', {'idx' : 12}) ++ call setqflist([], 'a', {'id' : qfid, 'idx' : 7}) ++ call setloclist(1, [], 'a', {'idx' : 7}) ++ < + *quickfix-size* + You can get the number of entries (size) in a quickfix and a location list + using the |getqflist()| and |getloclist()| functions respectively. Examples: > +*************** +*** 602,608 **** + echo getloclist(2, {'winid' : 1}).winid + < + *getqflist-examples* +! The getqflist() and getloclist() functions can be used to get the various + attributes of a quickfix and location list respectively. Some examples for + using these functions are below: + > +--- 620,626 ---- + echo getloclist(2, {'winid' : 1}).winid + < + *getqflist-examples* +! The |getqflist()| and |getloclist()| functions can be used to get the various + attributes of a quickfix and location list respectively. Some examples for + using these functions are below: + > +*************** +*** 657,665 **** + + " get the location list window id of the third window + :echo getloclist(3, {'winid' : 0}).winid + < + *setqflist-examples* +! The setqflist() and setloclist() functions can be used to set the various + attributes of a quickfix and location list respectively. Some examples for + using these functions are below: + > +--- 675,686 ---- + + " get the location list window id of the third window + :echo getloclist(3, {'winid' : 0}).winid ++ ++ " get the file window id of a location list window (winnr: 4) ++ :echo getloclist(4, {'filewinid' : 0}).filewinid + < + *setqflist-examples* +! The |setqflist()| and |setloclist()| functions can be used to set the various + attributes of a quickfix and location list respectively. Some examples for + using these functions are below: + > +*************** +*** 671,676 **** +--- 692,700 ---- + " set the title of the current quickfix list + :call setqflist([], 'a', {'title' : 'Mytitle'}) + ++ " change the current entry in the list specified by an identifier ++ :call setqflist([], 'a', {'id' : qfid, 'idx' : 10}) ++ + " set the context of a quickfix list specified by an identifier + :call setqflist([], 'a', {'id' : qfid, 'context' : {'val' : 100}}) + +*************** +*** 898,904 **** + 'smartcase' is not used. + If {pattern} is empty (e.g. // is specified), the last + used search pattern is used. |last-pattern| +! + When a number is put before the command this is used + as the maximum number of matches to find. Use + ":1vimgrep pattern file" to find only the first. +--- 922,928 ---- + 'smartcase' is not used. + If {pattern} is empty (e.g. // is specified), the last + used search pattern is used. |last-pattern| +! :{count}vim[grep] ... + When a number is put before the command this is used + as the maximum number of matches to find. Use + ":1vimgrep pattern file" to find only the first. +*************** +*** 1551,1564 **** + recognized as a command separator. The backslash before each space is + required for the set command. + +! *cfilter-plugin* + If you have too many matching messages, you can use the cfilter plugin to + reduce the number of entries. Load the plugin with: > + packadd cfilter + + Then you can use these command: > +! :Cfilter[!] {pat} +! :Lfilter[!] {pat} + + :Cfilter creates a new quickfix list from entries matching {pat} in the + current quickfix list. Both the file name and the text of the entries are +--- 1575,1588 ---- + recognized as a command separator. The backslash before each space is + required for the set command. + +! *cfilter-plugin* *:Cfilter* *:Lfilter* + If you have too many matching messages, you can use the cfilter plugin to + reduce the number of entries. Load the plugin with: > + packadd cfilter + + Then you can use these command: > +! :Cfilter[!] /{pat}/ +! :Lfilter[!] /{pat}/ + + :Cfilter creates a new quickfix list from entries matching {pat} in the + current quickfix list. Both the file name and the text of the entries are +*** ../vim-8.1.0719/src/quickfix.c 2018-12-22 16:49:11.348536036 +0100 +--- src/quickfix.c 2019-01-11 14:44:08.978341403 +0100 +*************** +*** 3266,3278 **** + } + + /* +! * Jump to a quickfix line. +! * If dir == FORWARD go "errornr" valid entries forward. +! * If dir == BACKWARD go "errornr" valid entries backward. +! * If dir == FORWARD_FILE go "errornr" valid entries files backward. +! * If dir == BACKWARD_FILE go "errornr" valid entries files backward +! * else if "errornr" is zero, redisplay the same line +! * else go to entry "errornr". + */ + void + qf_jump(qf_info_T *qi, +--- 3266,3272 ---- + } + + /* +! * Jump to a quickfix line and try to use an existing window. + */ + void + qf_jump(qf_info_T *qi, +*************** +*** 3284,3290 **** + } + + /* +! * As qf_info(). + * If 'newwin' is TRUE, then open the file in a new window. + */ + void +--- 3278,3291 ---- + } + + /* +! * Jump to a quickfix line. +! * If dir == 0 go to entry "errornr". +! * If dir == FORWARD go "errornr" valid entries forward. +! * If dir == BACKWARD go "errornr" valid entries backward. +! * If dir == FORWARD_FILE go "errornr" valid entries files backward. +! * If dir == BACKWARD_FILE go "errornr" valid entries files backward +! * else if "errornr" is zero, redisplay the same line +! * If 'forceit' is TRUE, then can discard changes to the current buffer. + * If 'newwin' is TRUE, then open the file in a new window. + */ + void +*************** +*** 3687,3693 **** + + if (is_loclist_cmd(eap->cmdidx)) + qi = GET_LOC_LIST(curwin); +! if (qf_stack_empty(qi) || qf_list_empty(qi, qi->qf_curlist)) + MSG(_("No entries")); + else + for (i = 0; i < qi->qf_listcount; ++i) +--- 3688,3694 ---- + + if (is_loclist_cmd(eap->cmdidx)) + qi = GET_LOC_LIST(curwin); +! if (qf_stack_empty(qi)) + MSG(_("No entries")); + else + for (i = 0; i < qi->qf_listcount; ++i) +*************** +*** 6549,6554 **** +--- 6550,6599 ---- + } + + /* ++ * Set the current index in the specified quickfix list ++ */ ++ static int ++ qf_setprop_curidx(qf_info_T *qi, qf_list_T *qfl, dictitem_T *di) ++ { ++ int denote = FALSE; ++ int newidx; ++ int old_qfidx; ++ qfline_T *qf_ptr; ++ ++ // If the specified index is '$', then use the last entry ++ if (di->di_tv.v_type == VAR_STRING ++ && di->di_tv.vval.v_string != NULL ++ && STRCMP(di->di_tv.vval.v_string, "$") == 0) ++ newidx = qfl->qf_count; ++ else ++ { ++ // Otherwise use the specified index ++ newidx = tv_get_number_chk(&di->di_tv, &denote); ++ if (denote) ++ return FAIL; ++ } ++ ++ if (newidx < 1) // sanity check ++ return FAIL; ++ if (newidx > qfl->qf_count) ++ newidx = qfl->qf_count; ++ ++ old_qfidx = qfl->qf_index; ++ qf_ptr = get_nth_entry(qfl, newidx, &newidx); ++ if (qf_ptr == NULL) ++ return FAIL; ++ qfl->qf_ptr = qf_ptr; ++ qfl->qf_index = newidx; ++ ++ // If the current list is modified and it is displayed in the quickfix ++ // window, then Update it. ++ if (qi->qf_lists[qi->qf_curlist].qf_id == qfl->qf_id) ++ qf_win_pos_update(qi, old_qfidx); ++ ++ return OK; ++ } ++ ++ /* + * Set quickfix/location list properties (title, items, context). + * Also used to add items from parsing a list of lines. + * Used by the setqflist() and setloclist() Vim script functions. +*************** +*** 6585,6590 **** +--- 6630,6637 ---- + retval = qf_setprop_items_from_lines(qi, qf_idx, what, di, action); + if ((di = dict_find(what, (char_u *)"context", -1)) != NULL) + retval = qf_setprop_context(qfl, di); ++ if ((di = dict_find(what, (char_u *)"idx", -1)) != NULL) ++ retval = qf_setprop_curidx(qi, qfl, di); + + if (retval == OK) + qf_list_changed(qfl); +*** ../vim-8.1.0719/src/testdir/test_quickfix.vim 2018-12-22 16:49:11.348536036 +0100 +--- src/testdir/test_quickfix.vim 2019-01-11 14:44:08.978341403 +0100 +*************** +*** 1811,1816 **** +--- 1811,1823 ---- + call g:Xsetlist([], 'f') + let l = split(execute(a:cchar . 'hist'), "\n") + call assert_equal('No entries', l[0]) ++ ++ " An empty list should still show the stack history ++ call g:Xsetlist([]) ++ let res = split(execute(a:cchar . 'hist'), "\n") ++ call assert_equal('> error list 1 of 1; 0 ' . common, res[0]) ++ ++ call g:Xsetlist([], 'f') + endfunc + + func Test_history() +*************** +*** 2068,2073 **** +--- 2075,2130 ---- + call Xproperty_tests('l') + endfunc + ++ " Test for setting the current index in the location/quickfix list ++ func Xtest_setqfidx(cchar) ++ call s:setup_commands(a:cchar) ++ ++ Xgetexpr "F1:10:1:Line1\nF2:20:2:Line2\nF3:30:3:Line3" ++ Xgetexpr "F4:10:1:Line1\nF5:20:2:Line2\nF6:30:3:Line3" ++ Xgetexpr "F7:10:1:Line1\nF8:20:2:Line2\nF9:30:3:Line3" ++ ++ call g:Xsetlist([], 'a', {'nr' : 3, 'idx' : 2}) ++ call g:Xsetlist([], 'a', {'nr' : 2, 'idx' : 2}) ++ call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 3}) ++ Xolder 2 ++ Xopen ++ call assert_equal(3, line('.')) ++ Xnewer ++ call assert_equal(2, line('.')) ++ Xnewer ++ call assert_equal(2, line('.')) ++ " Update the current index with the quickfix window open ++ wincmd w ++ call g:Xsetlist([], 'a', {'nr' : 3, 'idx' : 3}) ++ Xopen ++ call assert_equal(3, line('.')) ++ Xclose ++ ++ " Set the current index to the last entry ++ call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : '$'}) ++ call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) ++ " A large value should set the index to the last index ++ call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 1}) ++ call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 999}) ++ call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) ++ " Invalid index values ++ call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : -1}) ++ call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) ++ call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 0}) ++ call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) ++ call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 'xx'}) ++ call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) ++ call assert_fails("call g:Xsetlist([], 'a', {'nr':1, 'idx':[]})", 'E745:') ++ ++ call g:Xsetlist([], 'f') ++ new | only ++ endfunc ++ ++ func Test_setqfidx() ++ call Xtest_setqfidx('c') ++ call Xtest_setqfidx('l') ++ endfunc ++ + " Tests for the QuickFixCmdPre/QuickFixCmdPost autocommands + func QfAutoCmdHandler(loc, cmd) + call add(g:acmds, a:loc . a:cmd) +*** ../vim-8.1.0719/src/version.c 2019-01-11 14:37:16.689248837 +0100 +--- src/version.c 2019-01-11 14:47:06.281089738 +0100 +*************** +*** 797,798 **** +--- 797,800 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 720, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +159. You get excited whenever discussing your hard drive. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |