mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 11:28:22 +00:00
fix(move): redraw for 'concealcursor' after changing w_wcol (#31276)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
Reference in New Issue
Block a user