Patch 8.0.0040 (after 8.0.0033)
Problem: Whole line highlighting with matchaddpos() does not work.
Solution: Check for zero length. (Hirohito Higashi)
Files: src/screen.c, src/testdir/test_match.vim
*** ../vim-8.0.0039/src/screen.c 2016-10-15 14:56:25.868257421 +0200
--- src/screen.c 2016-10-16 14:28:48.026766302 +0200
***************
*** 7773,7778 ****
--- 7773,7782 ----
}
}
+ /*
+ * If there is a match fill "shl" and return one.
+ * Return zero otherwise.
+ */
static int
next_search_hl_pos(
match_T *shl, /* points to a match */
***************
*** 7781,7835 ****
colnr_T mincol) /* minimal column for a match */
{
int i;
! int bot = -1;
- shl->lnum = 0;
for (i = posmatch->cur; i < MAXPOSMATCH; i++)
{
llpos_T *pos = &posmatch->pos[i];
if (pos->lnum == 0)
break;
! if (pos->col + pos->len - 1 <= mincol)
continue;
if (pos->lnum == lnum)
{
! if (shl->lnum == lnum)
{
! /* partially sort positions by column numbers
! * on the same line */
! if (pos->col < posmatch->pos[bot].col)
{
llpos_T tmp = *pos;
! *pos = posmatch->pos[bot];
! posmatch->pos[bot] = tmp;
}
}
else
! {
! bot = i;
! shl->lnum = lnum;
! }
}
}
posmatch->cur = 0;
! if (shl->lnum == lnum && bot >= 0)
{
! colnr_T start = posmatch->pos[bot].col == 0
! ? 0 : posmatch->pos[bot].col - 1;
! colnr_T end = posmatch->pos[bot].col == 0
! ? MAXCOL : start + posmatch->pos[bot].len;
shl->rm.startpos[0].lnum = 0;
shl->rm.startpos[0].col = start;
shl->rm.endpos[0].lnum = 0;
shl->rm.endpos[0].col = end;
shl->is_addpos = TRUE;
! posmatch->cur = bot + 1;
! return TRUE;
}
! return FALSE;
}
#endif
--- 7785,7836 ----
colnr_T mincol) /* minimal column for a match */
{
int i;
! int found = -1;
for (i = posmatch->cur; i < MAXPOSMATCH; i++)
{
llpos_T *pos = &posmatch->pos[i];
if (pos->lnum == 0)
break;
! if (pos->len == 0 && pos->col < mincol)
continue;
if (pos->lnum == lnum)
{
! if (found >= 0)
{
! /* if this match comes before the one at "found" then swap
! * them */
! if (pos->col < posmatch->pos[found].col)
{
llpos_T tmp = *pos;
! *pos = posmatch->pos[found];
! posmatch->pos[found] = tmp;
}
}
else
! found = i;
}
}
posmatch->cur = 0;
! if (found >= 0)
{
! colnr_T start = posmatch->pos[found].col == 0
! ? 0 : posmatch->pos[found].col - 1;
! colnr_T end = posmatch->pos[found].col == 0
! ? MAXCOL : start + posmatch->pos[found].len;
+ shl->lnum = lnum;
shl->rm.startpos[0].lnum = 0;
shl->rm.startpos[0].col = start;
shl->rm.endpos[0].lnum = 0;
shl->rm.endpos[0].col = end;
shl->is_addpos = TRUE;
! posmatch->cur = found + 1;
! return 1;
}
! return 0;
}
#endif
*** ../vim-8.0.0039/src/testdir/test_match.vim 2016-10-15 14:56:25.868257421
+0200
--- src/testdir/test_match.vim 2016-10-16 14:16:10.376350417 +0200
***************
*** 191,197 ****
--- 191,205 ----
call assert_equal(screenattr(2,2), screenattr(1,7))
call assert_notequal(screenattr(2,2), screenattr(1,8))
+ call clearmatches()
+ call matchaddpos('Error', [[1], [2,2]])
+ redraw!
+ call assert_equal(screenattr(2,2), screenattr(1,1))
+ call assert_equal(screenattr(2,2), screenattr(1,10))
+ call assert_notequal(screenattr(2,2), screenattr(1,11))
+
nohl
+ call clearmatches()
syntax off
set hlsearch&
endfunc
*** ../vim-8.0.0039/src/version.c 2016-10-15 20:46:13.580656069 +0200
--- src/version.c 2016-10-16 14:30:29.174020816 +0200
***************
*** 766,767 ****
--- 766,769 ----
{ /* Add new patch number below this line */
+ /**/
+ 40,
/**/
--
It is illegal for anyone to give lighted cigars to dogs, cats, and other
domesticated animal kept as pets.
[real standing law in Illinois, United States of America]
/// Bram Moolenaar -- [email protected] -- 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 ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.