}
}
+/*
+ * Update "shl->has_cursor" based on the match in "shl" and the cursor
+ * position.
+ */
+ static void
+check_cur_search_hl(win_T *wp, match_T *shl)
+{
+ long linecount = shl->rm.endpos[0].lnum - shl->rm.startpos[0].lnum;
+
+ if (wp->w_cursor.lnum >= shl->lnum
+ && wp->w_cursor.lnum <= shl->lnum + shl->rm.endpos[0].lnum
+ && (wp->w_cursor.lnum > shl->lnum
+ || wp->w_cursor.col >= shl->rm.startpos[0].col)
+ && (wp->w_cursor.lnum < shl->lnum + linecount
+ || wp->w_cursor.col < shl->rm.endpos[0].col))
+ shl->has_cursor = TRUE;
+ else
+ shl->has_cursor = FALSE;
+}
+
/*
* Prepare for 'hlsearch' and match highlighting in one window line.
* Return TRUE if there is such highlighting and set "search_attr" to the
shl->endcol = shl->rm.endpos[0].col;
else
shl->endcol = MAXCOL;
- if (shl->rm.endpos[0].lnum != shl->rm.startpos[0].lnum)
- shl->lines = shl->rm.endpos[0].lnum - shl->rm.startpos[0].lnum;
- else
+ shl->lines = shl->rm.endpos[0].lnum - shl->rm.startpos[0].lnum;
+ if (shl->lines == 0)
shl->lines = 1;
// check if the cursor is in the match before changing the columns
- if (wp->w_cursor.lnum >= shl->lnum
- && wp->w_cursor.lnum
- <= shl->lnum + shl->rm.endpos[0].lnum
- && (wp->w_cursor.lnum > shl->lnum
- || wp->w_cursor.col >= shl->rm.startpos[0].col)
- && (wp->w_cursor.lnum < shl->lnum + shl->lines
- || wp->w_cursor.col < shl->rm.endpos[0].col))
- shl->has_cursor = TRUE;
+ if (shl == search_hl)
+ check_cur_search_hl(wp, shl);
// Highlight one character for an empty match.
if (shl->startcol == shl->endcol)
else
shl->endcol = MAXCOL;
+ // check if the cursor is in the match
+ if (shl == search_hl)
+ check_cur_search_hl(wp, shl);
+
if (shl->startcol == shl->endcol)
{
// highlight empty match, try again after
let lines =<< trim END
set hlsearch scrolloff=0
- call setline(1, ['one', 'foo', 'bar', 'baz', 'foo', 'bar'])
+ call setline(1, ['one', 'foo', 'bar', 'baz', 'foo the foo and foo', 'bar'])
hi Search ctermbg=yellow
hi CurSearch ctermbg=blue
END
call term_sendkeys(buf, "n")
call VerifyScreenDump(buf, 'Test_hlsearch_cursearch_single_line_2', {})
- call term_sendkeys(buf, "?\<CR>")
+ call term_sendkeys(buf, "n")
+ call VerifyScreenDump(buf, 'Test_hlsearch_cursearch_single_line_2a', {})
+
+ call term_sendkeys(buf, "n")
+ call VerifyScreenDump(buf, 'Test_hlsearch_cursearch_single_line_2b', {})
+
+ call term_sendkeys(buf, ":call setline(5, 'foo')\<CR>")
+ call term_sendkeys(buf, "0?\<CR>")
call VerifyScreenDump(buf, 'Test_hlsearch_cursearch_single_line_3', {})
call term_sendkeys(buf, "gg/foo\\nbar\<CR>")