aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2020-02-02 12:50:57 +0100
committerGitHub <noreply@github.com>2020-02-02 12:50:57 +0100
commit3051342f96fd49820490237013ce1ba21171f72b (patch)
tree6e2603e2db48a42de7de6b33da089a53b834b013 /src
parent045e86474b75992834f54157b04ea2a941ab03a7 (diff)
parent459a362cc140644d104de326258f9dfe75dbdcdf (diff)
downloadrneovim-3051342f96fd49820490237013ce1ba21171f72b.tar.gz
rneovim-3051342f96fd49820490237013ce1ba21171f72b.tar.bz2
rneovim-3051342f96fd49820490237013ce1ba21171f72b.zip
Merge pull request #11801 from bfredl/incsubcrash
extmark: fix crash due to invalid column values in inccommand preview
Diffstat (limited to 'src')
-rw-r--r--src/nvim/extmark.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/nvim/extmark.c b/src/nvim/extmark.c
index d60723c755..60ff5c3af9 100644
--- a/src/nvim/extmark.c
+++ b/src/nvim/extmark.c
@@ -699,21 +699,30 @@ void bufhl_add_hl_pos_offset(buf_T *buf,
// TODO(bfredl): if decoration had blocky mode, we could avoid this loop
for (linenr_T lnum = pos_start.lnum; lnum <= pos_end.lnum; lnum ++) {
+ int end_off = 0;
if (pos_start.lnum < lnum && lnum < pos_end.lnum) {
- hl_start = offset-1;
- hl_end = MAXCOL;
+ // TODO(bfredl): This is quite ad-hoc, but the space between |num| and
+ // text being highlighted is the indication of \n being part of the
+ // substituted text. But it would be more consistent to highlight
+ // a space _after_ the previous line instead (like highlight EOL list
+ // char)
+ hl_start = MAX(offset-1, 0);
+ end_off = 1;
+ hl_end = 0;
} else if (lnum == pos_start.lnum && lnum < pos_end.lnum) {
hl_start = pos_start.col + offset;
- hl_end = MAXCOL;
+ end_off = 1;
+ hl_end = 0;
} else if (pos_start.lnum < lnum && lnum == pos_end.lnum) {
- hl_start = offset-1;
+ hl_start = MAX(offset-1, 0);
hl_end = pos_end.col + offset;
} else if (pos_start.lnum == lnum && pos_end.lnum == lnum) {
hl_start = pos_start.col + offset;
hl_end = pos_end.col + offset;
}
(void)extmark_add_decoration(buf, (uint64_t)src_id, hl_id,
- (int)lnum-1, hl_start, (int)lnum-1, hl_end,
+ (int)lnum-1, hl_start,
+ (int)lnum-1+end_off, hl_end,
VIRTTEXT_EMPTY);
}
}