fix(move): redraw for 'concealcursor' after changing w_wcol (#31276)

This commit is contained in:
zeertzjq
2024-11-20 08:24:58 +08:00
committed by GitHub
parent f111c32ff9
commit ac7e0ff32f
2 changed files with 34 additions and 8 deletions

View File

@@ -150,25 +150,20 @@ static void redraw_for_cursorline(win_T *wp)
} }
} }
/// Redraw when w_virtcol changes and /// Redraw when 'concealcursor' is active, or when w_virtcol changes and:
/// - 'cursorcolumn' is set, or /// - 'cursorcolumn' is set, or
/// - 'cursorlineopt' contains "screenline", or /// - 'cursorlineopt' contains "screenline", or
/// - 'concealcursor' is active, or
/// - Visual mode is active. /// - Visual mode is active.
static void redraw_for_cursorcolumn(win_T *wp) static void redraw_for_cursorcolumn(win_T *wp)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_ALL
{ {
if (wp->w_valid & VALID_VIRTCOL) {
return;
}
// If the cursor moves horizontally when 'concealcursor' is active, then the // If the cursor moves horizontally when 'concealcursor' is active, then the
// current line needs to be redrawn to calculate the correct cursor position. // current line needs to be redrawn to calculate the correct cursor position.
if (wp->w_p_cole > 0 && conceal_cursor_line(wp)) { if (wp->w_p_cole > 0 && conceal_cursor_line(wp)) {
redrawWinline(wp, wp->w_cursor.lnum); redrawWinline(wp, wp->w_cursor.lnum);
} }
if (pum_visible()) { if ((wp->w_valid & VALID_VIRTCOL) || pum_visible()) {
return; return;
} }

View File

@@ -198,7 +198,7 @@ describe('Screen', function()
end) end)
end) -- a region of text (implicit concealing) end) -- a region of text (implicit concealing)
it('cursor position is correct when entering Insert mode with cocu=ni #13916', function() it('cursor position when entering Insert mode with cocu=ni #13916', function()
insert([[foobarfoobarfoobar]]) insert([[foobarfoobarfoobar]])
-- move to end of line -- move to end of line
feed('$') feed('$')
@@ -217,6 +217,37 @@ describe('Screen', function()
{4:-- INSERT --} | {4:-- INSERT --} |
]]) ]])
end) end)
it('cursor position when scrolling in Normal mode with cocu=n #31271', function()
insert(('foo\n'):rep(9) .. 'foofoobarfoofoo' .. ('\nfoo'):rep(9))
command('set concealcursor=n')
command('syn match Foo /bar/ conceal cchar=&')
feed('gg5<C-E>10gg$')
screen:expect([[
foo |*4
foofoo{1:&}foofo^o |
foo |*4
|
]])
feed('zz')
screen:expect_unchanged()
feed('zt')
screen:expect([[
foofoo{1:&}foofo^o |
foo |*8
|
]])
feed('zt')
screen:expect_unchanged()
feed('zb')
screen:expect([[
foo |*8
foofoo{1:&}foofo^o |
|
]])
feed('zb')
screen:expect_unchanged()
end)
end) -- match and conceal end) -- match and conceal
describe('let the conceal level be', function() describe('let the conceal level be', function()