summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1275
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1275')
-rw-r--r--data/vim/patches/8.1.12751026
1 files changed, 0 insertions, 1026 deletions
diff --git a/data/vim/patches/8.1.1275 b/data/vim/patches/8.1.1275
deleted file mode 100644
index be6dd626d..000000000
--- a/data/vim/patches/8.1.1275
+++ /dev/null
@@ -1,1026 +0,0 @@
-To: vim_dev@googlegroups.com
-Subject: Patch 8.1.1275
-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.1275
-Problem: Cannot navigate to errors before/after the cursor.
-Solution: Add the :cbefore and :cafter commands. (Yegappan Lakshmanan,
- closes #4340)
-Files: runtime/doc/index.txt, runtime/doc/quickfix.txt, src/ex_cmdidxs.h,
- src/ex_cmds.h, src/quickfix.c, src/testdir/test_quickfix.vim
-
-
-*** ../vim-8.1.1274/runtime/doc/index.txt 2019-05-03 21:56:31.363540578 +0200
---- runtime/doc/index.txt 2019-05-05 14:56:42.134251046 +0200
-***************
-*** 1144,1152 ****
- |:caddbuffer| :cad[dbuffer] add errors from buffer
- |:caddexpr| :cadde[xpr] add errors from expr
- |:caddfile| :caddf[ile] add error message to current quickfix list
- |:call| :cal[l] call a function
- |:catch| :cat[ch] part of a :try command
-! |:cbelow| :cbe[low] got to error below current line
- |:cbottom| :cbo[ttom] scroll to the bottom of the quickfix window
- |:cbuffer| :cb[uffer] parse error messages and jump to first error
- |:cc| :cc go to specific error
---- 1196,1206 ----
- |:caddbuffer| :cad[dbuffer] add errors from buffer
- |:caddexpr| :cadde[xpr] add errors from expr
- |:caddfile| :caddf[ile] add error message to current quickfix list
-+ |:cafter| :caf[ter] go to error after current cursor
- |:call| :cal[l] call a function
- |:catch| :cat[ch] part of a :try command
-! |:cbefore| :cbef[ore] go to error before current cursor
-! |:cbelow| :cbel[ow] go to error below current line
- |:cbottom| :cbo[ttom] scroll to the bottom of the quickfix window
- |:cbuffer| :cb[uffer] parse error messages and jump to first error
- |:cc| :cc go to specific error
-***************
-*** 1308,1317 ****
- |:laddexpr| :lad[dexpr] add locations from expr
- |:laddbuffer| :laddb[uffer] add locations from buffer
- |:laddfile| :laddf[ile] add locations to current location list
- |:last| :la[st] go to the last file in the argument list
- |:language| :lan[guage] set the language (locale)
- |:later| :lat[er] go to newer change, redo
-! |:lbelow| :lbe[low] go to location below current line
- |:lbottom| :lbo[ttom] scroll to the bottom of the location window
- |:lbuffer| :lb[uffer] parse locations and jump to first location
- |:lcd| :lc[d] change directory locally
---- 1362,1373 ----
- |:laddexpr| :lad[dexpr] add locations from expr
- |:laddbuffer| :laddb[uffer] add locations from buffer
- |:laddfile| :laddf[ile] add locations to current location list
-+ |:lafter| :laf[ter] go to location after current cursor
- |:last| :la[st] go to the last file in the argument list
- |:language| :lan[guage] set the language (locale)
- |:later| :lat[er] go to newer change, redo
-! |:lbefore| :lbef[ore] go to location before current cursor
-! |:lbelow| :lbel[ow] go to location below current line
- |:lbottom| :lbo[ttom] scroll to the bottom of the location window
- |:lbuffer| :lb[uffer] parse locations and jump to first location
- |:lcd| :lc[d] change directory locally
---- 1707,1712 ----
-*** ../vim-8.1.1274/runtime/doc/quickfix.txt 2019-05-04 15:05:24.927269310 +0200
---- runtime/doc/quickfix.txt 2019-05-05 14:56:42.134251046 +0200
-***************
-*** 152,159 ****
- exceeds the number of entries below the current line,
- then the last error in the file is selected.
-
-! *:lbe* *:lbelow*
-! :[count]lbe[low] Same as ":cbelow", except the location list for the
- current window is used instead of the quickfix list.
-
- *:cnf* *:cnfile*
---- 152,187 ----
- exceeds the number of entries below the current line,
- then the last error in the file is selected.
-
-! *:lbel* *:lbelow*
-! :[count]lbel[ow] Same as ":cbelow", except the location list for the
-! current window is used instead of the quickfix list.
-!
-! *:cbe* *:cbefore*
-! :[count]cbe[fore] Go to the [count] error before the current cursor
-! position in the current buffer. If [count] is
-! omitted, then 1 is used. If there are no errors, then
-! an error message is displayed. Assumes that the
-! entries in a quickfix list are sorted by their buffer,
-! line and column numbers. If [count] exceeds the
-! number of entries before the current position, then
-! the first error in the file is selected.
-!
-! *:lbef* *:lbefore*
-! :[count]lbef[ore] Same as ":cbefore", except the location list for the
-! current window is used instead of the quickfix list.
-!
-! *:caf* *:cafter*
-! :[count]caf[ter] Go to the [count] error after the current cursor
-! position in the current buffer. If [count] is
-! omitted, then 1 is used. If there are no errors, then
-! an error message is displayed. Assumes that the
-! entries in a quickfix list are sorted by their buffer,
-! line and column numbers. If [count] exceeds the
-! number of entries after the current position, then
-! the last error in the file is selected.
-!
-! *:laf* *:lafter*
-! :[count]laf[ter] Same as ":cafter", except the location list for the
- current window is used instead of the quickfix list.
-
- *:cnf* *:cnfile*
-*** ../vim-8.1.1274/src/ex_cmdidxs.h 2019-05-03 21:56:31.363540578 +0200
---- src/ex_cmdidxs.h 2019-05-05 14:56:42.134251046 +0200
-***************
-*** 8,36 ****
- /* a */ 0,
- /* b */ 19,
- /* c */ 42,
-! /* d */ 105,
-! /* e */ 127,
-! /* f */ 147,
-! /* g */ 163,
-! /* h */ 169,
-! /* i */ 178,
-! /* j */ 196,
-! /* k */ 198,
-! /* l */ 203,
-! /* m */ 263,
-! /* n */ 281,
-! /* o */ 301,
-! /* p */ 313,
-! /* q */ 352,
-! /* r */ 355,
-! /* s */ 375,
-! /* t */ 443,
-! /* u */ 488,
-! /* v */ 499,
-! /* w */ 517,
-! /* x */ 531,
-! /* y */ 540,
-! /* z */ 541
- };
-
- /*
---- 8,36 ----
- /* a */ 0,
- /* b */ 19,
- /* c */ 42,
-! /* d */ 107,
-! /* e */ 129,
-! /* f */ 149,
-! /* g */ 165,
-! /* h */ 171,
-! /* i */ 180,
-! /* j */ 198,
-! /* k */ 200,
-! /* l */ 205,
-! /* m */ 267,
-! /* n */ 285,
-! /* o */ 305,
-! /* p */ 317,
-! /* q */ 356,
-! /* r */ 359,
-! /* s */ 379,
-! /* t */ 447,
-! /* u */ 492,
-! /* v */ 503,
-! /* w */ 521,
-! /* x */ 535,
-! /* y */ 544,
-! /* z */ 545
- };
-
- /*
-***************
-*** 43,49 ****
- { /* a b c d e f g h i j k l m n o p q r s t u v w x y z */
- /* a */ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 7, 15, 0, 16, 0, 0, 0, 0, 0 },
- /* b */ { 2, 0, 0, 4, 5, 7, 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 0, 13, 0, 0, 0, 0, 22, 0, 0, 0 },
-! /* c */ { 3, 11, 14, 16, 18, 20, 23, 0, 0, 0, 0, 31, 35, 38, 44, 53, 55, 56, 57, 0, 59, 0, 62, 0, 0, 0 },
- /* d */ { 0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 0, 16, 0, 0, 17, 0, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0 },
- /* e */ { 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0 },
- /* f */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0 },
---- 43,49 ----
- { /* a b c d e f g h i j k l m n o p q r s t u v w x y z */
- /* a */ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 7, 15, 0, 16, 0, 0, 0, 0, 0 },
- /* b */ { 2, 0, 0, 4, 5, 7, 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 0, 13, 0, 0, 0, 0, 22, 0, 0, 0 },
-! /* c */ { 3, 12, 16, 18, 20, 22, 25, 0, 0, 0, 0, 33, 37, 40, 46, 55, 57, 58, 59, 0, 61, 0, 64, 0, 0, 0 },
- /* d */ { 0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 0, 16, 0, 0, 17, 0, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0 },
- /* e */ { 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0 },
- /* f */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0 },
-***************
-*** 52,58 ****
- /* i */ { 1, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 5, 6, 0, 0, 0, 0, 0, 13, 0, 15, 0, 0, 0, 0, 0 },
- /* j */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
- /* k */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-! /* l */ { 3, 10, 13, 17, 18, 22, 25, 30, 0, 0, 0, 32, 35, 38, 42, 48, 0, 50, 59, 51, 52, 56, 58, 0, 0, 0 },
- /* m */ { 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 },
- /* n */ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 10, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0 },
- /* o */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 0, 9, 0, 11, 0, 0, 0 },
---- 52,58 ----
- /* i */ { 1, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 5, 6, 0, 0, 0, 0, 0, 13, 0, 15, 0, 0, 0, 0, 0 },
- /* j */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
- /* k */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-! /* l */ { 3, 11, 15, 19, 20, 24, 27, 32, 0, 0, 0, 34, 37, 40, 44, 50, 0, 52, 61, 53, 54, 58, 60, 0, 0, 0 },
- /* m */ { 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 },
- /* n */ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 10, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0 },
- /* o */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 0, 9, 0, 11, 0, 0, 0 },
-***************
-*** 69,72 ****
- /* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
- };
-
-! static const int command_count = 554;
---- 69,72 ----
- /* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
- };
-
-! static const int command_count = 558;
-*** ../vim-8.1.1274/src/ex_cmds.h 2019-05-04 15:05:24.927269310 +0200
---- src/ex_cmds.h 2019-05-05 14:56:42.134251046 +0200
-***************
-*** 266,271 ****
---- 266,274 ----
- EX(CMD_caddfile, "caddfile", ex_cfile,
- TRLBAR|FILE1,
- ADDR_NONE),
-+ EX(CMD_cafter, "cafter", ex_cbelow,
-+ RANGE|COUNT|TRLBAR,
-+ ADDR_UNSIGNED),
- EX(CMD_call, "call", ex_call,
- RANGE|NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
- ADDR_LINES),
-***************
-*** 275,280 ****
---- 278,286 ----
- EX(CMD_cbuffer, "cbuffer", ex_cbuffer,
- BANG|RANGE|WORD1|TRLBAR,
- ADDR_OTHER),
-+ EX(CMD_cbefore, "cbefore", ex_cbelow,
-+ RANGE|COUNT|TRLBAR,
-+ ADDR_UNSIGNED),
- EX(CMD_cbelow, "cbelow", ex_cbelow,
- RANGE|COUNT|TRLBAR,
- ADDR_UNSIGNED),
-***************
-*** 749,760 ****
---- 755,772 ----
- EX(CMD_laddfile, "laddfile", ex_cfile,
- TRLBAR|FILE1,
- ADDR_NONE),
-+ EX(CMD_lafter, "lafter", ex_cbelow,
-+ RANGE|COUNT|TRLBAR,
-+ ADDR_UNSIGNED),
- EX(CMD_later, "later", ex_later,
- TRLBAR|EXTRA|NOSPC|CMDWIN,
- ADDR_NONE),
- EX(CMD_lbuffer, "lbuffer", ex_cbuffer,
- BANG|RANGE|WORD1|TRLBAR,
- ADDR_OTHER),
-+ EX(CMD_lbefore, "lbefore", ex_cbelow,
-+ RANGE|COUNT|TRLBAR,
-+ ADDR_UNSIGNED),
- EX(CMD_lbelow, "lbelow", ex_cbelow,
- RANGE|COUNT|TRLBAR,
- ADDR_UNSIGNED),
-*** ../vim-8.1.1274/src/quickfix.c 2019-05-04 15:05:24.927269310 +0200
---- src/quickfix.c 2019-05-05 14:56:42.138251022 +0200
-***************
-*** 5128,5163 ****
- }
-
- /*
-! * Find the first quickfix entry below line 'lnum' in buffer 'bnr'.
- * 'qfp' points to the very first entry in the buffer and 'errornr' is the
- * index of the very first entry in the quickfix list.
-! * Returns NULL if an entry is not found after 'lnum'.
- */
- static qfline_T *
-! qf_find_entry_on_next_line(
- int bnr,
-! linenr_T lnum,
- qfline_T *qfp,
- int *errornr)
- {
-! if (qfp->qf_lnum > lnum)
-! // First entry is after line 'lnum'
- return qfp;
-
-! // Find the entry just before or at the line 'lnum'
- while (qfp->qf_next != NULL
- && qfp->qf_next->qf_fnum == bnr
-! && qfp->qf_next->qf_lnum <= lnum)
- {
- qfp = qfp->qf_next;
- ++*errornr;
- }
-
- if (qfp->qf_next == NULL || qfp->qf_next->qf_fnum != bnr)
-! // No entries found after 'lnum'
- return NULL;
-
-! // Use the entry just after line 'lnum'
- qfp = qfp->qf_next;
- ++*errornr;
-
---- 5128,5227 ----
- }
-
- /*
-! * Returns TRUE if the specified quickfix entry is
-! * after the given line (linewise is TRUE)
-! * or after the line and column.
-! */
-! static int
-! qf_entry_after_pos(qfline_T *qfp, pos_T *pos, int linewise)
-! {
-! if (linewise)
-! return qfp->qf_lnum > pos->lnum;
-! else
-! return (qfp->qf_lnum > pos->lnum ||
-! (qfp->qf_lnum == pos->lnum && qfp->qf_col > pos->col));
-! }
-!
-! /*
-! * Returns TRUE if the specified quickfix entry is
-! * before the given line (linewise is TRUE)
-! * or before the line and column.
-! */
-! static int
-! qf_entry_before_pos(qfline_T *qfp, pos_T *pos, int linewise)
-! {
-! if (linewise)
-! return qfp->qf_lnum < pos->lnum;
-! else
-! return (qfp->qf_lnum < pos->lnum ||
-! (qfp->qf_lnum == pos->lnum && qfp->qf_col < pos->col));
-! }
-!
-! /*
-! * Returns TRUE if the specified quickfix entry is
-! * on or after the given line (linewise is TRUE)
-! * or on or after the line and column.
-! */
-! static int
-! qf_entry_on_or_after_pos(qfline_T *qfp, pos_T *pos, int linewise)
-! {
-! if (linewise)
-! return qfp->qf_lnum >= pos->lnum;
-! else
-! return (qfp->qf_lnum > pos->lnum ||
-! (qfp->qf_lnum == pos->lnum && qfp->qf_col >= pos->col));
-! }
-!
-! /*
-! * Returns TRUE if the specified quickfix entry is
-! * on or before the given line (linewise is TRUE)
-! * or on or before the line and column.
-! */
-! static int
-! qf_entry_on_or_before_pos(qfline_T *qfp, pos_T *pos, int linewise)
-! {
-! if (linewise)
-! return qfp->qf_lnum <= pos->lnum;
-! else
-! return (qfp->qf_lnum < pos->lnum ||
-! (qfp->qf_lnum == pos->lnum && qfp->qf_col <= pos->col));
-! }
-!
-! /*
-! * Find the first quickfix entry after position 'pos' in buffer 'bnr'.
-! * If 'linewise' is TRUE, returns the entry after the specified line and treats
-! * multiple entries on a single line as one. Otherwise returns the entry after
-! * the specified line and column.
- * 'qfp' points to the very first entry in the buffer and 'errornr' is the
- * index of the very first entry in the quickfix list.
-! * Returns NULL if an entry is not found after 'pos'.
- */
- static qfline_T *
-! qf_find_entry_after_pos(
- int bnr,
-! pos_T *pos,
-! int linewise,
- qfline_T *qfp,
- int *errornr)
- {
-! if (qf_entry_after_pos(qfp, pos, linewise))
-! // First entry is after postion 'pos'
- return qfp;
-
-! // Find the entry just before or at the position 'pos'
- while (qfp->qf_next != NULL
- && qfp->qf_next->qf_fnum == bnr
-! && qf_entry_on_or_before_pos(qfp->qf_next, pos, linewise))
- {
- qfp = qfp->qf_next;
- ++*errornr;
- }
-
- if (qfp->qf_next == NULL || qfp->qf_next->qf_fnum != bnr)
-! // No entries found after position 'pos'
- return NULL;
-
-! // Use the entry just after position 'pos'
- qfp = qfp->qf_next;
- ++*errornr;
-
-***************
-*** 5165,5210 ****
- }
-
- /*
-! * Find the first quickfix entry before line 'lnum' in buffer 'bnr'.
- * 'qfp' points to the very first entry in the buffer and 'errornr' is the
- * index of the very first entry in the quickfix list.
-! * Returns NULL if an entry is not found before 'lnum'.
- */
- static qfline_T *
-! qf_find_entry_on_prev_line(
- int bnr,
-! linenr_T lnum,
- qfline_T *qfp,
- int *errornr)
- {
-! // Find the entry just before the line 'lnum'
- while (qfp->qf_next != NULL
- && qfp->qf_next->qf_fnum == bnr
-! && qfp->qf_next->qf_lnum < lnum)
- {
- qfp = qfp->qf_next;
- ++*errornr;
- }
-
-! if (qfp->qf_lnum >= lnum) // entry is after 'lnum'
- return NULL;
-
-! // If multiple entries are on the same line, then use the first entry
-! qfp = qf_find_first_entry_on_line(qfp, errornr);
-
- return qfp;
- }
-
- /*
-! * Find a quickfix entry in 'qfl' closest to line 'lnum' in buffer 'bnr' in
- * the direction 'dir'.
- */
- static qfline_T *
- qf_find_closest_entry(
- qf_list_T *qfl,
- int bnr,
-! linenr_T lnum,
- int dir,
- int *errornr)
- {
- qfline_T *qfp;
---- 5229,5280 ----
- }
-
- /*
-! * Find the first quickfix entry before position 'pos' in buffer 'bnr'.
-! * If 'linewise' is TRUE, returns the entry before the specified line and
-! * treats multiple entries on a single line as one. Otherwise returns the entry
-! * before the specified line and column.
- * 'qfp' points to the very first entry in the buffer and 'errornr' is the
- * index of the very first entry in the quickfix list.
-! * Returns NULL if an entry is not found before 'pos'.
- */
- static qfline_T *
-! qf_find_entry_before_pos(
- int bnr,
-! pos_T *pos,
-! int linewise,
- qfline_T *qfp,
- int *errornr)
- {
-! // Find the entry just before the position 'pos'
- while (qfp->qf_next != NULL
- && qfp->qf_next->qf_fnum == bnr
-! && qf_entry_before_pos(qfp->qf_next, pos, linewise))
- {
- qfp = qfp->qf_next;
- ++*errornr;
- }
-
-! if (qf_entry_on_or_after_pos(qfp, pos, linewise))
- return NULL;
-
-! if (linewise)
-! // If multiple entries are on the same line, then use the first entry
-! qfp = qf_find_first_entry_on_line(qfp, errornr);
-
- return qfp;
- }
-
- /*
-! * Find a quickfix entry in 'qfl' closest to position 'pos' in buffer 'bnr' in
- * the direction 'dir'.
- */
- static qfline_T *
- qf_find_closest_entry(
- qf_list_T *qfl,
- int bnr,
-! pos_T *pos,
- int dir,
-+ int linewise,
- int *errornr)
- {
- qfline_T *qfp;
-***************
-*** 5217,5251 ****
- return NULL; // no entry in this file
-
- if (dir == FORWARD)
-! qfp = qf_find_entry_on_next_line(bnr, lnum, qfp, errornr);
- else
-! qfp = qf_find_entry_on_prev_line(bnr, lnum, qfp, errornr);
-
- return qfp;
- }
-
- /*
-! * Get the nth quickfix entry below the specified entry treating multiple
-! * entries on a single line as one. Searches forward in the list.
- */
- static qfline_T *
-! qf_get_nth_below_entry(qfline_T *entry, int *errornr, int n)
- {
- while (n-- > 0 && !got_int)
- {
- qfline_T *first_entry = entry;
- int first_errornr = *errornr;
-
-! // Treat all the entries on the same line in this file as one
-! entry = qf_find_last_entry_on_line(entry, errornr);
-
- if (entry->qf_next == NULL
- || entry->qf_next->qf_fnum != entry->qf_fnum)
- {
-! // If multiple entries are on the same line, then use the first
-! // entry
-! entry = first_entry;
-! *errornr = first_errornr;
- break;
- }
-
---- 5287,5326 ----
- return NULL; // no entry in this file
-
- if (dir == FORWARD)
-! qfp = qf_find_entry_after_pos(bnr, pos, linewise, qfp, errornr);
- else
-! qfp = qf_find_entry_before_pos(bnr, pos, linewise, qfp, errornr);
-
- return qfp;
- }
-
- /*
-! * Get the nth quickfix entry below the specified entry. Searches forward in
-! * the list. If linewise is TRUE, then treat multiple entries on a single line
-! * as one.
- */
- static qfline_T *
-! qf_get_nth_below_entry(qfline_T *entry, int n, int linewise, int *errornr)
- {
- while (n-- > 0 && !got_int)
- {
- qfline_T *first_entry = entry;
- int first_errornr = *errornr;
-
-! if (linewise)
-! // Treat all the entries on the same line in this file as one
-! entry = qf_find_last_entry_on_line(entry, errornr);
-
- if (entry->qf_next == NULL
- || entry->qf_next->qf_fnum != entry->qf_fnum)
- {
-! if (linewise)
-! {
-! // If multiple entries are on the same line, then use the first
-! // entry
-! entry = first_entry;
-! *errornr = first_errornr;
-! }
- break;
- }
-
-***************
-*** 5257,5267 ****
- }
-
- /*
-! * Get the nth quickfix entry above the specified entry treating multiple
-! * entries on a single line as one. Searches backwards in the list.
- */
- static qfline_T *
-! qf_get_nth_above_entry(qfline_T *entry, int *errornr, int n)
- {
- while (n-- > 0 && !got_int)
- {
---- 5332,5343 ----
- }
-
- /*
-! * Get the nth quickfix entry above the specified entry. Searches backwards in
-! * the list. If linewise is TRUE, then treat multiple entries on a single line
-! * as one.
- */
- static qfline_T *
-! qf_get_nth_above_entry(qfline_T *entry, int n, int linewise, int *errornr)
- {
- while (n-- > 0 && !got_int)
- {
-***************
-*** 5273,5297 ****
- --*errornr;
-
- // If multiple entries are on the same line, then use the first entry
-! entry = qf_find_first_entry_on_line(entry, errornr);
- }
-
- return entry;
- }
-
- /*
-! * Find the n'th quickfix entry adjacent to line 'lnum' in buffer 'bnr' in the
-! * specified direction.
-! * Returns the error number in the quickfix list or 0 if an entry is not found.
- */
- static int
-! qf_find_nth_adj_entry(qf_list_T *qfl, int bnr, linenr_T lnum, int n, int dir)
- {
- qfline_T *adj_entry;
- int errornr;
-
-! // Find an entry closest to the specified line
-! adj_entry = qf_find_closest_entry(qfl, bnr, lnum, dir, &errornr);
- if (adj_entry == NULL)
- return 0;
-
---- 5349,5380 ----
- --*errornr;
-
- // If multiple entries are on the same line, then use the first entry
-! if (linewise)
-! entry = qf_find_first_entry_on_line(entry, errornr);
- }
-
- return entry;
- }
-
- /*
-! * Find the n'th quickfix entry adjacent to position 'pos' in buffer 'bnr' in
-! * the specified direction. Returns the error number in the quickfix list or 0
-! * if an entry is not found.
- */
- static int
-! qf_find_nth_adj_entry(
-! qf_list_T *qfl,
-! int bnr,
-! pos_T *pos,
-! int n,
-! int dir,
-! int linewise)
- {
- qfline_T *adj_entry;
- int errornr;
-
-! // Find an entry closest to the specified position
-! adj_entry = qf_find_closest_entry(qfl, bnr, pos, dir, linewise, &errornr);
- if (adj_entry == NULL)
- return 0;
-
-***************
-*** 5299,5315 ****
- {
- // Go to the n'th entry in the current buffer
- if (dir == FORWARD)
-! adj_entry = qf_get_nth_below_entry(adj_entry, &errornr, n);
- else
-! adj_entry = qf_get_nth_above_entry(adj_entry, &errornr, n);
- }
-
- return errornr;
- }
-
- /*
-! * Jump to a quickfix entry in the current file nearest to the current line.
-! * ":cabove", ":cbelow", ":labove" and ":lbelow" commands
- */
- void
- ex_cbelow(exarg_T *eap)
---- 5382,5402 ----
- {
- // Go to the n'th entry in the current buffer
- if (dir == FORWARD)
-! adj_entry = qf_get_nth_below_entry(adj_entry, n, linewise,
-! &errornr);
- else
-! adj_entry = qf_get_nth_above_entry(adj_entry, n, linewise,
-! &errornr);
- }
-
- return errornr;
- }
-
- /*
-! * Jump to a quickfix entry in the current file nearest to the current line or
-! * current line/col.
-! * ":cabove", ":cbelow", ":labove", ":lbelow", ":cafter", ":cbefore",
-! * ":lafter" and ":lbefore" commands
- */
- void
- ex_cbelow(exarg_T *eap)
-***************
-*** 5319,5324 ****
---- 5406,5412 ----
- int dir;
- int buf_has_flag;
- int errornr = 0;
-+ pos_T pos;
-
- if (eap->addr_count > 0 && eap->line2 <= 0)
- {
-***************
-*** 5327,5333 ****
- }
-
- // Check whether the current buffer has any quickfix entries
-! if (eap->cmdidx == CMD_cabove || eap->cmdidx == CMD_cbelow)
- buf_has_flag = BUF_HAS_QF_ENTRY;
- else
- buf_has_flag = BUF_HAS_LL_ENTRY;
---- 5415,5422 ----
- }
-
- // Check whether the current buffer has any quickfix entries
-! if (eap->cmdidx == CMD_cabove || eap->cmdidx == CMD_cbelow
-! || eap->cmdidx == CMD_cbefore || eap->cmdidx == CMD_cafter)
- buf_has_flag = BUF_HAS_QF_ENTRY;
- else
- buf_has_flag = BUF_HAS_LL_ENTRY;
-***************
-*** 5348,5360 ****
- return;
- }
-
-! if (eap->cmdidx == CMD_cbelow || eap->cmdidx == CMD_lbelow)
- dir = FORWARD;
- else
- dir = BACKWARD;
-
-! errornr = qf_find_nth_adj_entry(qfl, curbuf->b_fnum, curwin->w_cursor.lnum,
-! eap->addr_count > 0 ? eap->line2 : 0, dir);
-
- if (errornr > 0)
- qf_jump(qi, 0, errornr, FALSE);
---- 5437,5461 ----
- return;
- }
-
-! if (eap->cmdidx == CMD_cbelow
-! || eap->cmdidx == CMD_lbelow
-! || eap->cmdidx == CMD_cafter
-! || eap->cmdidx == CMD_lafter)
-! // Forward motion commands
- dir = FORWARD;
- else
- dir = BACKWARD;
-
-! pos = curwin->w_cursor;
-! // A quickfix entry column number is 1 based whereas cursor column
-! // number is 0 based. Adjust the column number.
-! pos.col++;
-! errornr = qf_find_nth_adj_entry(qfl, curbuf->b_fnum, &pos,
-! eap->addr_count > 0 ? eap->line2 : 0, dir,
-! eap->cmdidx == CMD_cbelow
-! || eap->cmdidx == CMD_lbelow
-! || eap->cmdidx == CMD_cabove
-! || eap->cmdidx == CMD_labove);
-
- if (errornr > 0)
- qf_jump(qi, 0, errornr, FALSE);
-*** ../vim-8.1.1274/src/testdir/test_quickfix.vim 2019-05-04 15:05:24.927269310 +0200
---- src/testdir/test_quickfix.vim 2019-05-05 14:56:42.138251022 +0200
-***************
-*** 39,44 ****
---- 39,46 ----
- command! -nargs=0 -count Xcc <count>cc
- command! -count=1 -nargs=0 Xbelow <mods><count>cbelow
- command! -count=1 -nargs=0 Xabove <mods><count>cabove
-+ command! -count=1 -nargs=0 Xbefore <mods><count>cbefore
-+ command! -count=1 -nargs=0 Xafter <mods><count>cafter
- let g:Xgetlist = function('getqflist')
- let g:Xsetlist = function('setqflist')
- call setqflist([], 'f')
-***************
-*** 74,79 ****
---- 76,83 ----
- command! -nargs=0 -count Xcc <count>ll
- command! -count=1 -nargs=0 Xbelow <mods><count>lbelow
- command! -count=1 -nargs=0 Xabove <mods><count>labove
-+ command! -count=1 -nargs=0 Xbefore <mods><count>lbefore
-+ command! -count=1 -nargs=0 Xafter <mods><count>lafter
- let g:Xgetlist = function('getloclist', [0])
- let g:Xsetlist = function('setloclist', [0])
- call setloclist(0, [], 'f')
-***************
-*** 4041,4057 ****
---- 4045,4066 ----
- endfunc
-
- " Test for the :cbelow, :cabove, :lbelow and :labove commands.
-+ " And for the :cafter, :cbefore, :lafter and :lbefore commands.
- func Xtest_below(cchar)
- call s:setup_commands(a:cchar)
-
- " No quickfix/location list
- call assert_fails('Xbelow', 'E42:')
- call assert_fails('Xabove', 'E42:')
-+ call assert_fails('Xbefore', 'E42:')
-+ call assert_fails('Xafter', 'E42:')
-
- " Empty quickfix/location list
- call g:Xsetlist([])
- call assert_fails('Xbelow', 'E42:')
- call assert_fails('Xabove', 'E42:')
-+ call assert_fails('Xbefore', 'E42:')
-+ call assert_fails('Xafter', 'E42:')
-
- call s:create_test_file('X1')
- call s:create_test_file('X2')
-***************
-*** 4065,4103 ****
- call assert_fails('Xabove', 'E42:')
- call assert_fails('3Xbelow', 'E42:')
- call assert_fails('4Xabove', 'E42:')
-
- " Test the commands with various arguments
-! Xexpr ["X1:5:L5", "X2:5:L5", "X2:10:L10", "X2:15:L15", "X3:3:L3"]
- edit +7 X2
- Xabove
- call assert_equal(['X2', 5], [bufname(''), line('.')])
- call assert_fails('Xabove', 'E553:')
- normal 2j
- Xbelow
- call assert_equal(['X2', 10], [bufname(''), line('.')])
- " Last error in this file
- Xbelow 99
- call assert_equal(['X2', 15], [bufname(''), line('.')])
- call assert_fails('Xbelow', 'E553:')
- " First error in this file
- Xabove 99
- call assert_equal(['X2', 5], [bufname(''), line('.')])
- call assert_fails('Xabove', 'E553:')
- normal gg
- Xbelow 2
- call assert_equal(['X2', 10], [bufname(''), line('.')])
- normal G
- Xabove 2
- call assert_equal(['X2', 10], [bufname(''), line('.')])
- edit X4
- call assert_fails('Xabove', 'E42:')
- call assert_fails('Xbelow', 'E42:')
- if a:cchar == 'l'
- " If a buffer has location list entries from some other window but not
- " from the current window, then the commands should fail.
- edit X1 | split | call setloclist(0, [], 'f')
- call assert_fails('Xabove', 'E776:')
- call assert_fails('Xbelow', 'E776:')
- close
- endif
-
---- 4074,4147 ----
- call assert_fails('Xabove', 'E42:')
- call assert_fails('3Xbelow', 'E42:')
- call assert_fails('4Xabove', 'E42:')
-+ call assert_fails('Xbefore', 'E42:')
-+ call assert_fails('Xafter', 'E42:')
-+ call assert_fails('3Xbefore', 'E42:')
-+ call assert_fails('4Xafter', 'E42:')
-
- " Test the commands with various arguments
-! Xexpr ["X1:5:3:L5", "X2:5:2:L5", "X2:10:3:L10", "X2:15:4:L15", "X3:3:5:L3"]
- edit +7 X2
- Xabove
- call assert_equal(['X2', 5], [bufname(''), line('.')])
- call assert_fails('Xabove', 'E553:')
-+ normal 7G
-+ Xbefore
-+ call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')])
-+ call assert_fails('Xbefore', 'E553:')
-+
- normal 2j
- Xbelow
- call assert_equal(['X2', 10], [bufname(''), line('.')])
-+ normal 7G
-+ Xafter
-+ call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')])
-+
- " Last error in this file
- Xbelow 99
- call assert_equal(['X2', 15], [bufname(''), line('.')])
- call assert_fails('Xbelow', 'E553:')
-+ normal gg
-+ Xafter 99
-+ call assert_equal(['X2', 15, 4], [bufname(''), line('.'), col('.')])
-+ call assert_fails('Xafter', 'E553:')
-+
- " First error in this file
- Xabove 99
- call assert_equal(['X2', 5], [bufname(''), line('.')])
- call assert_fails('Xabove', 'E553:')
-+ normal G
-+ Xbefore 99
-+ call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')])
-+ call assert_fails('Xbefore', 'E553:')
-+
- normal gg
- Xbelow 2
- call assert_equal(['X2', 10], [bufname(''), line('.')])
-+ normal gg
-+ Xafter 2
-+ call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')])
-+
- normal G
- Xabove 2
- call assert_equal(['X2', 10], [bufname(''), line('.')])
-+ normal G
-+ Xbefore 2
-+ call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')])
-+
- edit X4
- call assert_fails('Xabove', 'E42:')
- call assert_fails('Xbelow', 'E42:')
-+ call assert_fails('Xbefore', 'E42:')
-+ call assert_fails('Xafter', 'E42:')
- if a:cchar == 'l'
- " If a buffer has location list entries from some other window but not
- " from the current window, then the commands should fail.
- edit X1 | split | call setloclist(0, [], 'f')
- call assert_fails('Xabove', 'E776:')
- call assert_fails('Xbelow', 'E776:')
-+ call assert_fails('Xbefore', 'E776:')
-+ call assert_fails('Xafter', 'E776:')
- close
- endif
-
-***************
-*** 4108,4134 ****
---- 4152,4203 ----
- edit +1 X2
- Xbelow 2
- call assert_equal(['X2', 10, 1], [bufname(''), line('.'), col('.')])
-+ normal 1G
-+ Xafter 2
-+ call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')])
-+
- normal gg
- Xbelow 99
- call assert_equal(['X2', 15, 1], [bufname(''), line('.'), col('.')])
-+ normal gg
-+ Xafter 99
-+ call assert_equal(['X2', 15, 3], [bufname(''), line('.'), col('.')])
-+
- normal G
- Xabove 2
- call assert_equal(['X2', 10, 1], [bufname(''), line('.'), col('.')])
- normal G
-+ Xbefore 2
-+ call assert_equal(['X2', 15, 2], [bufname(''), line('.'), col('.')])
-+
-+ normal G
- Xabove 99
- call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')])
-+ normal G
-+ Xbefore 99
-+ call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')])
-+
- normal 10G
- Xabove
- call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')])
-+ normal 10G$
-+ 2Xbefore
-+ call assert_equal(['X2', 10, 2], [bufname(''), line('.'), col('.')])
-+
- normal 10G
- Xbelow
- call assert_equal(['X2', 15, 1], [bufname(''), line('.'), col('.')])
-+ normal 9G
-+ 5Xafter
-+ call assert_equal(['X2', 15, 2], [bufname(''), line('.'), col('.')])
-
- " Invalid range
- if a:cchar == 'c'
- call assert_fails('-2cbelow', 'E16:')
-+ call assert_fails('-2cafter', 'E16:')
- else
- call assert_fails('-2lbelow', 'E16:')
-+ call assert_fails('-2lafter', 'E16:')
- endif
-
- call delete('X1')
-*** ../vim-8.1.1274/src/version.c 2019-05-05 14:19:17.594303166 +0200
---- src/version.c 2019-05-05 14:58:18.513708487 +0200
-***************
-*** 769,770 ****
---- 769,772 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 1275,
- /**/
-
---
-Permission is granted to read this message out aloud on Kings Cross Road,
-London, under the condition that the orator is properly dressed.
-
- /// 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 ///