aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/drawline.c3
-rw-r--r--src/nvim/plines.c7
-rw-r--r--test/functional/ui/decorations_spec.lua27
3 files changed, 32 insertions, 5 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c
index 012cce7b22..ed22f71239 100644
--- a/src/nvim/drawline.c
+++ b/src/nvim/drawline.c
@@ -1796,8 +1796,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
if (has_decor && v >= 0) {
bool selected = (area_active || (area_highlighting && noinvcur
&& wlv.vcol == wp->w_virtcol));
- extmark_attr = decor_redraw_col(wp, (colnr_T)v, wlv.off,
- selected, &decor_state);
+ extmark_attr = decor_redraw_col(wp, (colnr_T)v, wlv.off, selected, &decor_state);
// we could already be inside an existing virt_line with multiple chunks
if (!(virt_inline_i < kv_size(virt_inline))) {
diff --git a/src/nvim/plines.c b/src/nvim/plines.c
index 738057b696..dd4955c352 100644
--- a/src/nvim/plines.c
+++ b/src/nvim/plines.c
@@ -396,12 +396,13 @@ int win_lbr_chartabsize(chartabsize_T *cts, int *headp)
mtkey_t mark = marktree_itr_current(cts->cts_iter);
if (mark.pos.row != cts->cts_row || mark.pos.col > col) {
break;
- } else if (mark.pos.col == col) { // TODO: or maybe unconditionally, what if byte-misaligned?
+ } else if (mark.pos.col
+ == col) { // TODO(bfredl): or maybe unconditionally, what if byte-misaligned?
if (!mt_end(mark)) {
Decoration decor = get_decor(mark);
if (decor.virt_text_pos == kVTInline) {
- cts->cts_cur_text_width = decor.virt_text_width;
- size += cts->cts_cur_text_width;
+ cts->cts_cur_text_width += decor.virt_text_width;
+ size += decor.virt_text_width;
}
}
}
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua
index 80dfebd33e..d029a66301 100644
--- a/test/functional/ui/decorations_spec.lua
+++ b/test/functional/ui/decorations_spec.lua
@@ -1245,6 +1245,33 @@ end]]
|
]]}
end)
+
+ it('cursor positions are correct with multiple inline virtual text', function()
+ insert('12345678')
+ meths.buf_set_extmark(0, ns, 0, 4,
+ { virt_text = { { ' virtual text ', 'Special' } }, virt_text_pos = 'inline' })
+ meths.buf_set_extmark(0, ns, 0, 4,
+ { virt_text = { { ' virtual text ', 'Special' } }, virt_text_pos = 'inline' })
+ feed '^'
+ feed '4l'
+ screen:expect { grid = [[
+ 1234{28: virtual text virtual text }^5678 |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ |
+ ]]}
+ end)
end)
describe('decorations: virtual lines', function()