diff options
Diffstat (limited to 'data/vim/patches/8.1.1015')
-rw-r--r-- | data/vim/patches/8.1.1015 | 449 |
1 files changed, 449 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1015 b/data/vim/patches/8.1.1015 new file mode 100644 index 000000000..fee064175 --- /dev/null +++ b/data/vim/patches/8.1.1015 @@ -0,0 +1,449 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.1015 +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.1015 +Problem: Quickfix buffer shows up in list, can't get buffer number. +Solution: Make the quickfix buffer unlisted when the quickfix window is + closed. get the quickfix buffer number with getqflist(). + (Yegappan Lakshmanan, closes #4113) +Files: runtime/doc/eval.txt, runtime/doc/quickfix.txt, src/quickfix.c, + src/testdir/test_quickfix.vim, src/window.c + + +*** ../vim-8.1.1014/runtime/doc/eval.txt 2019-03-04 13:18:15.977053527 +0100 +--- runtime/doc/eval.txt 2019-03-17 16:34:27.019774609 +0100 +*************** +*** 4931,4940 **** + If the optional {what} dictionary argument is supplied, then + returns the items listed in {what} as a dictionary. Refer to + |getqflist()| for the supported items in {what}. +! If {what} contains 'filewinid', then returns the id of the +! window used to display files from the location list. This +! field is applicable only when called from a location list +! window. + + getmatches() *getmatches()* + Returns a |List| with all matches previously defined by +--- 4964,4979 ---- + If the optional {what} dictionary argument is supplied, then + returns the items listed in {what} as a dictionary. Refer to + |getqflist()| for the supported items in {what}. +! +! In addition to the items supported by |getqflist()| in {what}, +! the following item is supported by |getloclist()|: +! +! filewinid id of the window used to display files +! from the location list. This field is +! applicable only when called from a +! location list window. See +! |location-list-file-window| for more +! details. + + getmatches() *getmatches()* + Returns a |List| with all matches previously defined by +*************** +*** 5036,5041 **** +--- 5075,5083 ---- + nr get information for this quickfix list; zero + means the current quickfix list and "$" means + the last quickfix list ++ qfbufnr number of the buffer displayed in the quickfix ++ window. Returns 0 if the quickfix buffer is ++ not present. See |quickfix-buffer|. + size number of entries in the quickfix list + title get the list title |quickfix-title| + winid get the quickfix |window-ID| +*************** +*** 5064,5069 **** +--- 5106,5113 ---- + items quickfix list entries. If not present, set to + an empty list. + nr quickfix list number. If not present, set to 0 ++ qfbufnr number of the buffer displayed in the quickfix ++ window. If not present, set to 0. + size number of entries in the quickfix list. If not + present, set to 0. + title quickfix list title text. If not present, set +*** ../vim-8.1.1014/runtime/doc/quickfix.txt 2019-01-11 14:49:25.380107431 +0100 +--- runtime/doc/quickfix.txt 2019-03-17 16:34:27.019774609 +0100 +*************** +*** 111,124 **** + :[count]lne[xt][!] Same as ":cnext", except the location list for the + current window is used instead of the quickfix list. + +! :[count]cN[ext][!] *:cp* *:cprevious* *:cN* *:cNext* + :[count]cp[revious][!] Display the [count] previous error in the list that + includes a file name. If there are no file names at + all, go to the [count] previous error. See |:cc| for + [!] and 'switchbuf'. + + +! :[count]lN[ext][!] *:lp* *:lprevious* *:lN* *:lNext* + :[count]lp[revious][!] Same as ":cNext" and ":cprevious", except the location + list for the current window is used instead of the + quickfix list. +--- 111,124 ---- + :[count]lne[xt][!] Same as ":cnext", except the location list for the + current window is used instead of the quickfix list. + +! :[count]cN[ext][!] *:cp* *:cprevious* *:cprev* *:cN* *:cNext* + :[count]cp[revious][!] Display the [count] previous error in the list that + includes a file name. If there are no file names at + all, go to the [count] previous error. See |:cc| for + [!] and 'switchbuf'. + + +! :[count]lN[ext][!] *:lp* *:lprevious* *:lprev* *:lN* *:lNext* + :[count]lp[revious][!] Same as ":cNext" and ":cprevious", except the location + list for the current window is used instead of the + quickfix list. +*************** +*** 367,374 **** + < + *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 +--- 367,374 ---- + < + *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 +*************** +*** 496,501 **** +--- 496,502 ---- + second quickfix window. If [height] is given the + existing window will be resized to it. + ++ *quickfix-buffer* + The window will contain a special buffer, with + 'buftype' equal to "quickfix". Don't change this! + The window will have the w:quickfix_title variable set +*************** +*** 504,510 **** + status line if the value of 'statusline' is adjusted + properly. Whenever this buffer is modified by a + quickfix command or function, the |b:changedtick| +! variable is incremented. + + *:lop* *:lopen* + :lop[en] [height] Open a window to show the location list for the +--- 505,515 ---- + status line if the value of 'statusline' is adjusted + properly. Whenever this buffer is modified by a + quickfix command or function, the |b:changedtick| +! variable is incremented. You can get the number of +! this buffer using the getqflist() and getloclist() +! functions by passing the 'qfbufnr' item. For a +! location list, this buffer is wiped out when the +! location list is removed. + + *:lop* *:lopen* + :lop[en] [height] Open a window to show the location list for the +*************** +*** 670,681 **** +--- 675,692 ---- + " get the quickfix list window id + :echo getqflist({'winid' : 0}).winid + ++ " get the quickfix list window buffer number ++ :echo getqflist({'qfbufnr' : 0}).qfbufnr ++ + " get the context of the current location list + :echo getloclist(0, {'context' : 0}).context + + " get the location list window id of the third window + :echo getloclist(3, {'winid' : 0}).winid + ++ " get the location list window buffer number of the third window ++ :echo getloclist(3, {'qfbufnr' : 0}).qfbufnr ++ + " get the file window id of a location list window (winnr: 4) + :echo getloclist(4, {'filewinid' : 0}).filewinid + < +*** ../vim-8.1.1014/src/quickfix.c 2019-03-13 06:49:20.492351919 +0100 +--- src/quickfix.c 2019-03-17 16:34:27.019774609 +0100 +*************** +*** 5907,5913 **** + QF_GETLIST_SIZE = 0x80, + QF_GETLIST_TICK = 0x100, + QF_GETLIST_FILEWINID = 0x200, +! QF_GETLIST_ALL = 0x3FF, + }; + + /* +--- 5907,5914 ---- + QF_GETLIST_SIZE = 0x80, + QF_GETLIST_TICK = 0x100, + QF_GETLIST_FILEWINID = 0x200, +! QF_GETLIST_QFBUFNR = 0x400, +! QF_GETLIST_ALL = 0x7FF, + }; + + /* +*************** +*** 5977,5982 **** +--- 5978,5994 ---- + } + + /* ++ * Returns the number of the buffer displayed in the quickfix/location list ++ * window. If there is no buffer associated with the list, then returns 0. ++ */ ++ static int ++ qf_getprop_qfbufnr(qf_info_T *qi, dict_T *retdict) ++ { ++ return dict_add_number(retdict, "qfbufnr", ++ (qi == NULL) ? 0 : qi->qf_bufnr); ++ } ++ ++ /* + * Convert the keys in 'what' to quickfix list property flags. + */ + static int +*************** +*** 6022,6027 **** +--- 6034,6042 ---- + if (loclist && dict_find(what, (char_u *)"filewinid", -1) != NULL) + flags |= QF_GETLIST_FILEWINID; + ++ if (dict_find(what, (char_u *)"qfbufnr", -1) != NULL) ++ flags |= QF_GETLIST_QFBUFNR; ++ + return flags; + } + +*************** +*** 6114,6119 **** +--- 6129,6136 ---- + status = dict_add_number(retdict, "changedtick", 0); + if ((status == OK) && locstack && (flags & QF_GETLIST_FILEWINID)) + status = dict_add_number(retdict, "filewinid", 0); ++ if ((status == OK) && (flags & QF_GETLIST_QFBUFNR)) ++ status = qf_getprop_qfbufnr(qi, retdict); + + return status; + } +*************** +*** 6259,6264 **** +--- 6276,6283 ---- + status = dict_add_number(retdict, "changedtick", qfl->qf_changedtick); + if ((status == OK) && (wp != NULL) && (flags & QF_GETLIST_FILEWINID)) + status = qf_getprop_filewinid(wp, qi, retdict); ++ if ((status == OK) && (flags & QF_GETLIST_QFBUFNR)) ++ status = qf_getprop_qfbufnr(qi, retdict); + + return status; + } +*** ../vim-8.1.1014/src/testdir/test_quickfix.vim 2019-03-02 07:57:12.236395037 +0100 +--- src/testdir/test_quickfix.vim 2019-03-17 16:34:27.019774609 +0100 +*************** +*** 3110,3128 **** + call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick) + if a:cchar == 'c' + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, +! \ 'items' : [], 'nr' : 0, 'size' : 0, + \ 'title' : '', 'winid' : 0, 'changedtick': 0}, + \ g:Xgetlist({'all' : 0})) + else + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, + \ 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', +! \ 'winid' : 0, 'changedtick': 0, 'filewinid' : 0}, + \ g:Xgetlist({'all' : 0})) + endif + + " Quickfix window with empty stack + silent! Xopen + let qfwinid = (a:cchar == 'c') ? win_getid() : 0 + call assert_equal(qfwinid, g:Xgetlist({'winid' : 0}).winid) + Xclose + +--- 3110,3130 ---- + call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick) + if a:cchar == 'c' + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, +! \ 'items' : [], 'nr' : 0, 'size' : 0, 'qfbufnr' : 0, + \ 'title' : '', 'winid' : 0, 'changedtick': 0}, + \ g:Xgetlist({'all' : 0})) + else + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, + \ 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', +! \ 'winid' : 0, 'changedtick': 0, 'filewinid' : 0, +! \ 'qfbufnr' : 0}, + \ g:Xgetlist({'all' : 0})) + endif + + " Quickfix window with empty stack + silent! Xopen + let qfwinid = (a:cchar == 'c') ? win_getid() : 0 ++ let qfbufnr = (a:cchar == 'c') ? bufnr('') : 0 + call assert_equal(qfwinid, g:Xgetlist({'winid' : 0}).winid) + Xclose + +*************** +*** 3154,3164 **** + if a:cchar == 'c' + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], + \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, + \ 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0})) + else + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], + \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, +! \ 'changedtick' : 0, 'filewinid' : 0}, + \ g:Xgetlist({'id' : qfid, 'all' : 0})) + endif + +--- 3156,3167 ---- + if a:cchar == 'c' + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], + \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, ++ \ 'qfbufnr' : qfbufnr, + \ 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0})) + else + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], + \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, +! \ 'changedtick' : 0, 'filewinid' : 0, 'qfbufnr' : 0}, + \ g:Xgetlist({'id' : qfid, 'all' : 0})) + endif + +*************** +*** 3175,3185 **** + if a:cchar == 'c' + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], + \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, +! \ 'changedtick' : 0}, g:Xgetlist({'nr' : 5, 'all' : 0})) + else + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], + \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, +! \ 'changedtick' : 0, 'filewinid' : 0}, + \ g:Xgetlist({'nr' : 5, 'all' : 0})) + endif + endfunc +--- 3178,3189 ---- + if a:cchar == 'c' + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], + \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, +! \ 'changedtick' : 0, 'qfbufnr' : qfbufnr}, +! \ g:Xgetlist({'nr' : 5, 'all' : 0})) + else + call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], + \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, +! \ 'changedtick' : 0, 'filewinid' : 0, 'qfbufnr' : 0}, + \ g:Xgetlist({'nr' : 5, 'all' : 0})) + endif + endfunc +*************** +*** 3912,3917 **** +--- 3916,3922 ---- + Xclose + " Even after the quickfix window is closed, the buffer should be loaded + call assert_true(bufloaded(qfbnum)) ++ call assert_true(qfbnum, g:Xgetlist({'qfbufnr' : 0}).qfbufnr) + Xopen + " Buffer should be reused when opening the window again + call assert_equal(qfbnum, bufnr('')) +*************** +*** 3930,3936 **** + close + " When the location list window is closed, the buffer name should not + " change to 'Quickfix List' +! call assert_match(qfbnum . ' h- "\[Location List]"', execute('ls')) + call assert_true(bufloaded(qfbnum)) + + " After deleting a location list buffer using ":bdelete", opening the +--- 3935,3941 ---- + close + " When the location list window is closed, the buffer name should not + " change to 'Quickfix List' +! call assert_match(qfbnum . 'u h- "\[Location List]"', execute('ls!')) + call assert_true(bufloaded(qfbnum)) + + " After deleting a location list buffer using ":bdelete", opening the +*************** +*** 3947,3952 **** +--- 3952,3958 ---- + " removed + call setloclist(0, [], 'f') + call assert_false(bufexists(qfbnum)) ++ call assert_equal(0, getloclist(0, {'qfbufnr' : 0}).qfbufnr) + + " When the location list is freed with the location list window open, the + " location list buffer should not be lost. It should be reused when the +*** ../vim-8.1.1014/src/window.c 2019-03-04 13:18:15.973053562 +0100 +--- src/window.c 2019-03-17 16:36:49.002856677 +0100 +*************** +*** 2382,2399 **** + } + + #ifdef FEAT_GUI +! /* Avoid trouble with scrollbars that are going to be deleted in +! * win_free(). */ + if (gui.in_use) + out_flush(); + #endif + + #ifdef FEAT_SYN_HL +! /* Free independent synblock before the buffer is freed. */ + if (win->w_buffer != NULL) + reset_synblock(win); + #endif + + /* + * Close the link to the buffer. + */ +--- 2382,2405 ---- + } + + #ifdef FEAT_GUI +! // Avoid trouble with scrollbars that are going to be deleted in +! // win_free(). + if (gui.in_use) + out_flush(); + #endif + + #ifdef FEAT_SYN_HL +! // Free independent synblock before the buffer is freed. + if (win->w_buffer != NULL) + reset_synblock(win); + #endif + ++ #ifdef FEAT_QUICKFIX ++ // When the quickfix/location list window is closed, unlist the buffer. ++ if (win->w_buffer != NULL && bt_quickfix(win->w_buffer)) ++ win->w_buffer->b_p_bl = FALSE; ++ #endif ++ + /* + * Close the link to the buffer. + */ +*** ../vim-8.1.1014/src/version.c 2019-03-17 15:47:22.589492071 +0100 +--- src/version.c 2019-03-17 16:33:12.068262826 +0100 +*************** +*** 781,782 **** +--- 781,784 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1015, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +79. All of your most erotic dreams have a scrollbar at the right side. + + /// 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 /// |