summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-10-15 14:56:30 +0200
committerBram Moolenaar <Bram@vim.org>2016-10-15 14:56:30 +0200
commita6c27ee6db2c328e0ab0e6d143e2a295a0bb9c9a (patch)
tree30807bca218d51b02f8e05a80277f191c5190a9c
parent4575876dc865d4160f20d61bd822fbe7cafbec41 (diff)
patch 8.0.0033v8.0.0033
Problem: Cannot use overlapping positions with matchaddpos(). Solution: Check end of match. (Ozaki Kiichi) Add a test (Hirohito Higashi)
-rw-r--r--src/screen.c14
-rw-r--r--src/testdir/test_match.vim10
-rw-r--r--src/version.c2
3 files changed, 20 insertions, 6 deletions
diff --git a/src/screen.c b/src/screen.c
index 5ebca09804..0889db91d6 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -7786,21 +7786,23 @@ next_search_hl_pos(
shl->lnum = 0;
for (i = posmatch->cur; i < MAXPOSMATCH; i++)
{
- if (posmatch->pos[i].lnum == 0)
+ llpos_T *pos = &posmatch->pos[i];
+
+ if (pos->lnum == 0)
break;
- if (posmatch->pos[i].col < mincol)
+ if (pos->col + pos->len - 1 <= mincol)
continue;
- if (posmatch->pos[i].lnum == lnum)
+ if (pos->lnum == lnum)
{
if (shl->lnum == lnum)
{
/* partially sort positions by column numbers
* on the same line */
- if (posmatch->pos[i].col < posmatch->pos[bot].col)
+ if (pos->col < posmatch->pos[bot].col)
{
- llpos_T tmp = posmatch->pos[i];
+ llpos_T tmp = *pos;
- posmatch->pos[i] = posmatch->pos[bot];
+ *pos = posmatch->pos[bot];
posmatch->pos[bot] = tmp;
}
}
diff --git a/src/testdir/test_match.vim b/src/testdir/test_match.vim
index 9ac1db157f..3b20d5d439 100644
--- a/src/testdir/test_match.vim
+++ b/src/testdir/test_match.vim
@@ -181,6 +181,16 @@ func Test_matchaddpos()
redraw!
call assert_equal(screenattr(2,2), screenattr(1,6))
+ " Check overlapping pos
+ call clearmatches()
+ call setline(1, ['1234567890', 'NH'])
+ call matchaddpos('Error', [[1,1,5], [1,3,5], [2,2]])
+ redraw!
+ call assert_notequal(screenattr(2,2), 0)
+ call assert_equal(screenattr(2,2), screenattr(1,5))
+ call assert_equal(screenattr(2,2), screenattr(1,7))
+ call assert_notequal(screenattr(2,2), screenattr(1,8))
+
nohl
syntax off
set hlsearch&
diff --git a/src/version.c b/src/version.c
index 6fee4abf73..b2066e4e84 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 33,
+/**/
32,
/**/
31,