diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-03-29 19:56:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-29 19:56:45 +0800 |
commit | ba257d74b187e38cd591b2f4eb2a4f0f6483b358 (patch) | |
tree | cae03c1cf49f0fddab237a1a6f4fd4a97eb81fe3 | |
parent | 81d7628c3fadaa72b879b5e934d30c609d7c89f8 (diff) | |
download | rneovim-ba257d74b187e38cd591b2f4eb2a4f0f6483b358.tar.gz rneovim-ba257d74b187e38cd591b2f4eb2a4f0f6483b358.tar.bz2 rneovim-ba257d74b187e38cd591b2f4eb2a4f0f6483b358.zip |
fix(decorations): do not put empty virt_text (#17872)
-rw-r--r-- | src/nvim/screen.c | 3 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 32 |
2 files changed, 34 insertions, 1 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 48f00e1a6a..262f17cd21 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -4335,6 +4335,9 @@ static int draw_virt_text_item(buf_T *buf, int col, VirtText vt, HlMode hl_mode, break; } } + if (!*s.p) { + continue; + } int attr; bool through = false; if (hl_mode == kHlModeCombine) { diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 29fbe9a93b..74eb5d5b8e 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -437,6 +437,7 @@ describe('extmark decorations', function() [22] = {foreground = tonumber('0xb20000'), background = tonumber('0xf13f3f')}; [23] = {foreground = Screen.colors.Magenta1, background = Screen.colors.LightGrey}; [24] = {bold = true}; + [25] = {background = Screen.colors.LightRed}; } ns = meths.create_namespace 'test' @@ -456,6 +457,31 @@ for _,item in ipairs(items) do end end]] + it('empty virtual text at eol should not break colorcolumn #17860', function() + insert(example_text) + feed('gg') + command('set colorcolumn=40') + screen:expect([[ + ^for _,item in ipairs(items) do {25: } | + local text, hl_id_cell, count = unp{25:a}ck(item) | + if hl_id_cell ~= nil then {25: } | + hl_id = hl_id_cell {25: } | + end {25: } | + for _ = 1, (count or 1) do {25: } | + local cell = line[colpos] {25: } | + cell.text = text {25: } | + cell.hl_id = hl_id {25: } | + colpos = colpos+1 {25: } | + end {25: } | + end {25: } | + {1:~ }| + {1:~ }| + | + ]]) + meths.buf_set_extmark(0, ns, 4, 0, { virt_text={{''}}, virt_text_pos='eol'}) + screen:expect_unchanged() + end) + it('can have virtual text of overlay position', function() insert(example_text) feed 'gg' @@ -471,7 +497,9 @@ end]] -- can "float" beyond end of line meths.buf_set_extmark(0, ns, 5, 28, { virt_text={{'loopy', 'ErrorMsg'}}, virt_text_pos='overlay'}) -- bound check: right edge of window - meths.buf_set_extmark(0, ns, 2, 26, { virt_text={{'bork bork bork ' }, {'bork bork bork', 'ErrorMsg'}}, virt_text_pos='overlay'}) + meths.buf_set_extmark(0, ns, 2, 26, { virt_text={{'bork bork bork '}, {'bork bork bork', 'ErrorMsg'}}, virt_text_pos='overlay'}) + -- empty virt_text should not change anything + meths.buf_set_extmark(0, ns, 6, 16, { virt_text={{''}}, virt_text_pos='overlay'}) screen:expect{grid=[[ ^for _,item in ipairs(items) do | @@ -621,6 +649,8 @@ end]] meths.buf_set_extmark(0, ns, 2, 10, { virt_text={{'Much', 'ErrorMsg'}}, virt_text_win_col=31, hl_mode='blend'}) meths.buf_set_extmark(0, ns, 3, 15, { virt_text={{'Error', 'ErrorMsg'}}, virt_text_win_col=31, hl_mode='blend'}) meths.buf_set_extmark(0, ns, 7, 21, { virt_text={{'-', 'NonText'}}, virt_text_win_col=4, hl_mode='blend'}) + -- empty virt_text should not change anything + meths.buf_set_extmark(0, ns, 8, 0, { virt_text={{''}}, virt_text_win_col=14, hl_mode='blend'}) screen:expect{grid=[[ ^for _,item in ipairs(items) do | |