diff --git a/src/nvim/decoration.c b/src/nvim/decoration.c index e4828bcc31..792204bdbc 100644 --- a/src/nvim/decoration.c +++ b/src/nvim/decoration.c @@ -121,7 +121,8 @@ void decor_redraw(buf_T *buf, int row1, int row2, int col1, DecorInline decor) void decor_redraw_sh(buf_T *buf, int row1, int row2, DecorSignHighlight sh) { - if (sh.hl_id || (sh.url != NULL) || (sh.flags & (kSHIsSign|kSHSpellOn|kSHSpellOff))) { + if (sh.hl_id || (sh.url != NULL) + || (sh.flags & (kSHIsSign | kSHSpellOn | kSHSpellOff | kSHConceal))) { if (row2 >= row1) { redraw_buf_range_later(buf, row1 + 1, row2 + 1); } diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 951188614b..e877dd2283 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -1742,6 +1742,35 @@ describe('extmark decorations', function() ]]} end) + it('redraws properly when adding/removing conceal on non-current line', function() + screen:try_resize(50, 5) + api.nvim_buf_set_lines(0, 0, -1, true, {'abcd', 'efgh','ijkl', 'mnop'}) + command('setlocal conceallevel=2') + screen:expect{grid=[[ + ^abcd | + efgh | + ijkl | + mnop | + | + ]]} + api.nvim_buf_set_extmark(0, ns, 2, 1, {end_col=3, conceal=''}) + screen:expect{grid=[[ + ^abcd | + efgh | + il | + mnop | + | + ]]} + api.nvim_buf_clear_namespace(0, ns, 0, -1) + screen:expect{grid=[[ + ^abcd | + efgh | + ijkl | + mnop | + | + ]]} + end) + it('avoids redraw issue #20651', function() exec_lua[[ vim.cmd.normal'10oXXX'