diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c index c789c42af4..c9ebcd8ed4 100644 --- a/src/nvim/drawline.c +++ b/src/nvim/drawline.c @@ -1743,12 +1743,12 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange, DecorState *state = &decor_state; for (size_t i = 0; i < kv_size(state->active); i++) { DecorRange *item = &kv_A(state->active, i); - if (!(item->start_row == state->row - && kv_size(item->decor.virt_text) - && item->decor.virt_text_pos == kVTInline)) { + if (item->start_row != state->row + || !kv_size(item->decor.virt_text) + || item->decor.virt_text_pos != kVTInline) { continue; } - if (item->win_col >= -1 && item->start_col <= v) { + if (item->win_col >= -1 && item->start_col == v) { virt_inline = item->decor.virt_text; virt_inline_i = 0; item->win_col = -2; diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index de3f7e7a5b..68c0e5eaca 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -1741,6 +1741,33 @@ bbbbbbb]]) {24:-- INSERT --} | ]]} end) + + it('no wrap is rendered correctly with multiple virtual text, where one is hidden', function() + insert('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz') + command("set nowrap") + meths.buf_set_extmark(0, ns, 0, 50, + { virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline', right_gravity = false }) + meths.buf_set_extmark(0, ns, 0, 2, + { virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline', right_gravity = false }) + feed('$') + screen:expect { grid = [[ + opqrstuvwxyzabcdefghijklmnopqrstuvwx{28:virtual text}y^z| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + | + ]]} + end) end) describe('decorations: virtual lines', function()