0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.0.0033

Problem:    Cannot use overlapping positions with matchaddpos().
Solution:   Check end of match. (Ozaki Kiichi) Add a test (Hirohito Higashi)
This commit is contained in:
Bram Moolenaar
2016-10-15 14:56:30 +02:00
parent 4575876dc8
commit a6c27ee6db
3 changed files with 20 additions and 6 deletions

View File

@@ -7786,21 +7786,23 @@ next_search_hl_pos(
shl->lnum = 0; shl->lnum = 0;
for (i = posmatch->cur; i < MAXPOSMATCH; i++) for (i = posmatch->cur; i < MAXPOSMATCH; i++)
{ {
if (posmatch->pos[i].lnum == 0) llpos_T *pos = &posmatch->pos[i];
if (pos->lnum == 0)
break; break;
if (posmatch->pos[i].col < mincol) if (pos->col + pos->len - 1 <= mincol)
continue; continue;
if (posmatch->pos[i].lnum == lnum) if (pos->lnum == lnum)
{ {
if (shl->lnum == lnum) if (shl->lnum == lnum)
{ {
/* partially sort positions by column numbers /* partially sort positions by column numbers
* on the same line */ * 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; posmatch->pos[bot] = tmp;
} }
} }

View File

@@ -181,6 +181,16 @@ func Test_matchaddpos()
redraw! redraw!
call assert_equal(screenattr(2,2), screenattr(1,6)) 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 nohl
syntax off syntax off
set hlsearch& set hlsearch&

View File

@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
33,
/**/ /**/
32, 32,
/**/ /**/