mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #24853 from zeertzjq/inline-virt-eol
fix(ui): wrong cursor position with left gravity inline virt text at eol
This commit is contained in:
commit
d7d3d757c1
@ -868,8 +868,8 @@ static void apply_cursorline_highlight(win_T *wp, winlinevars_T *wlv)
|
||||
}
|
||||
}
|
||||
|
||||
// Checks if there is more inline virtual text that need to be drawn
|
||||
// and sets has_more_virt_inline_chunks to reflect that.
|
||||
/// Checks if there is more inline virtual text that need to be drawn
|
||||
/// and sets has_more_virt_inline_chunks to reflect that.
|
||||
static bool has_more_inline_virt(winlinevars_T *wlv, ptrdiff_t v)
|
||||
{
|
||||
DecorState *state = &decor_state;
|
||||
@ -3096,8 +3096,8 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool number_onl
|
||||
|| wlv.filler_todo > 0
|
||||
|| (wp->w_p_list && wp->w_p_lcs_chars.eol != NUL
|
||||
&& wlv.p_extra != at_end_str)
|
||||
|| (wlv.n_extra != 0
|
||||
&& (wlv.c_extra != NUL || *wlv.p_extra != NUL)) || wlv.more_virt_inline_chunks)) {
|
||||
|| (wlv.n_extra != 0 && (wlv.c_extra != NUL || *wlv.p_extra != NUL))
|
||||
|| wlv.more_virt_inline_chunks)) {
|
||||
bool wrap = wp->w_p_wrap // Wrapping enabled.
|
||||
&& wlv.filler_todo <= 0 // Not drawing diff filler lines.
|
||||
&& lcs_eol_one != -1 // Haven't printed the lcs_eol character.
|
||||
|
@ -862,15 +862,6 @@ void curs_columns(win_T *wp, int may_scroll)
|
||||
n = (wp->w_wcol - wp->w_width_inner) / width2 + 1;
|
||||
wp->w_wcol -= n * width2;
|
||||
wp->w_wrow += n;
|
||||
|
||||
// When cursor wraps to first char of next line in Insert
|
||||
// mode, the 'showbreak' string isn't shown, backup to first
|
||||
// column
|
||||
char *const sbr = get_showbreak_value(wp);
|
||||
if (*sbr && *get_cursor_pos_ptr() == NUL
|
||||
&& wp->w_wcol == (wp->w_width_inner - width2) + vim_strsize(sbr)) {
|
||||
wp->w_wcol = 0;
|
||||
}
|
||||
}
|
||||
} else if (may_scroll
|
||||
&& !wp->w_cline_folded) {
|
||||
|
@ -359,7 +359,7 @@ int win_lbr_chartabsize(chartabsize_T *cts, int *headp)
|
||||
if (width <= 0) {
|
||||
width = 1;
|
||||
}
|
||||
// divide "size - prev_width" by "width", rounding up
|
||||
// Divide "size - prev_rem" by "width", rounding up.
|
||||
int cnt = (size - prev_rem + width - 1) / width;
|
||||
added += cnt * head_mid;
|
||||
|
||||
@ -371,7 +371,11 @@ int win_lbr_chartabsize(chartabsize_T *cts, int *headp)
|
||||
} else if (max_head_vcol < 0) {
|
||||
int off = virt_text_cursor_off(cts, c == NUL);
|
||||
if (off >= prev_rem) {
|
||||
if (size > off) {
|
||||
head += (1 + (off - prev_rem) / width) * head_mid;
|
||||
} else {
|
||||
head += (off - prev_rem + width - 1) / width * head_mid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ describe('breakindent', function()
|
||||
set listchars=eol:$
|
||||
let &signcolumn = 'yes'
|
||||
let &showbreak = '++'
|
||||
let &breakindent = v:true
|
||||
let &breakindentopt = 'shift:2'
|
||||
let leftcol = win_getid()->getwininfo()->get(0, {})->get('textoff')
|
||||
eval repeat('x', &columns - leftcol - 1)->setline(1)
|
||||
@ -39,6 +38,9 @@ describe('breakindent', function()
|
||||
-- No line wraps, so changing 'showbreak' should lead to the same screen.
|
||||
command('setlocal showbreak=+')
|
||||
screen:expect_unchanged()
|
||||
-- No line wraps, so setting 'breakindent' should lead to the same screen.
|
||||
command('setlocal breakindent')
|
||||
screen:expect_unchanged()
|
||||
-- The first line now wraps because of "eol" in 'listchars'.
|
||||
command('setlocal list')
|
||||
screen:expect{grid=[[
|
||||
@ -49,5 +51,14 @@ describe('breakindent', function()
|
||||
{0:~ }|
|
||||
{2:-- INSERT --} |
|
||||
]]}
|
||||
command('setlocal nobreakindent')
|
||||
screen:expect{grid=[[
|
||||
{1: }xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxX|
|
||||
{1: }{0:+^$} |
|
||||
{1: }second line{0:$} |
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{2:-- INSERT --} |
|
||||
]]}
|
||||
end)
|
||||
end)
|
||||
|
@ -1976,90 +1976,99 @@ describe('decorations: inline virtual text', function()
|
||||
end)
|
||||
|
||||
it('text is drawn correctly with a wrapping virtual text', function()
|
||||
screen:try_resize(50, 8)
|
||||
feed('o<esc>')
|
||||
insert([[aaaaaaa
|
||||
|
||||
bbbbbbb]])
|
||||
meths.buf_set_extmark(0, ns, 0, 0, { virt_text = { { string.rep('X', 51), 'Special' } }, virt_text_pos = 'inline' })
|
||||
meths.buf_set_extmark(0, ns, 2, 0, { virt_text = { { string.rep('X', 50), 'Special' } }, virt_text_pos = 'inline' })
|
||||
feed('gg0')
|
||||
screen:try_resize(60, 8)
|
||||
exec([[
|
||||
call setline(1, ['', 'aaa', '', 'bbbbbb'])
|
||||
normal gg0
|
||||
]])
|
||||
meths.buf_set_extmark(0, ns, 0, 0, { virt_text = { { string.rep('X', 60), 'Special' } }, virt_text_pos = 'inline' })
|
||||
meths.buf_set_extmark(0, ns, 2, 0, { virt_text = { { string.rep('X', 61), 'Special' } }, virt_text_pos = 'inline' })
|
||||
feed('$')
|
||||
screen:expect{grid=[[
|
||||
{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
aaa |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:X} |
|
||||
aaaaaaa |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
bbbbbbb |
|
||||
bbbbbb |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
|
||||
feed('j')
|
||||
screen:expect{grid=[[
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
aa^a |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:X} |
|
||||
^aaaaaaa |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
bbbbbbb |
|
||||
bbbbbb |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
|
||||
feed('j')
|
||||
screen:expect{grid=[[
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
aaa |
|
||||
{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:X} |
|
||||
aaaaaaa |
|
||||
{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
bbbbbbb |
|
||||
bbbbbb |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
|
||||
feed('j')
|
||||
screen:expect{grid=[[
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
aaa |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:X} |
|
||||
aaaaaaa |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
^bbbbbbb |
|
||||
bbbbb^b |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
|
||||
feed('ggic')
|
||||
feed('0<C-V>2l2k')
|
||||
screen:expect{grid=[[
|
||||
c{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{7:aa}^a |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:X} |
|
||||
{7:bbb}bbb |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{8:-- VISUAL BLOCK --} |
|
||||
]]}
|
||||
feed([[<Esc>/aaa\n\%V<CR>]])
|
||||
screen:expect{grid=[[
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{12:^aaa } |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:X} |
|
||||
bbbbbb |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{16:search hit BOTTOM, continuing at TOP} |
|
||||
]]}
|
||||
feed('3ggic')
|
||||
screen:expect{grid=[[
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{12:aaa } |
|
||||
c{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:XX} |
|
||||
aaaaaaa |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
bbbbbbb |
|
||||
bbbbbb |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
end)
|
||||
|
||||
it('regexp \\%V does not count trailing virtual text', function()
|
||||
screen:try_resize(50, 4)
|
||||
meths.buf_set_lines(0, 0, -1, true, {'foofoo', '', 'foofoo'})
|
||||
meths.buf_set_extmark(0, ns, 1, 0, { virt_text = {{'barbarbar', 'Special'}}, virt_text_pos = 'inline' })
|
||||
feed([[<C-V>G5l<Esc>/foo\n\%V<CR>]])
|
||||
feed([[<Esc>/aaa\nc\%V<CR>]])
|
||||
screen:expect{grid=[[
|
||||
foo{12:^foo } |
|
||||
{10:barbarbar} |
|
||||
foofoo |
|
||||
{16:search hit BOTTOM, continuing at TOP} |
|
||||
]]}
|
||||
feed([[jIbaz<Esc>/foo\nbaz\%V<CR>]])
|
||||
screen:expect{grid=[[
|
||||
foo{12:^foo } |
|
||||
{12:baz}{10:barbarbar} |
|
||||
foofoo |
|
||||
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{12:^aaa } |
|
||||
{12:c}{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||
{10:XX} |
|
||||
bbbbbb |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{16:search hit BOTTOM, continuing at TOP} |
|
||||
]]}
|
||||
end)
|
||||
@ -2209,61 +2218,70 @@ bbbbbbb]])
|
||||
end)
|
||||
|
||||
it('cursor position is correct when inserting around a virtual text with left gravity', function()
|
||||
insert('foo foo foo foo')
|
||||
meths.buf_set_extmark(0, ns, 0, 8, { virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline', right_gravity = false })
|
||||
feed('0')
|
||||
feed('8l')
|
||||
screen:try_resize(27, 4)
|
||||
insert(('a'):rep(15))
|
||||
meths.buf_set_extmark(0, ns, 0, 8, { virt_text = { { ('>'):rep(43), 'Special' } }, virt_text_pos = 'inline', right_gravity = false })
|
||||
command('setlocal showbreak=+ breakindent breakindentopt=shift:2')
|
||||
feed('08l')
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:virtual text}^foo foo |
|
||||
{1:~ }|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}^aaaaaaa |
|
||||
|
|
||||
]]}
|
||||
|
||||
feed('i')
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:virtual text}^foo foo |
|
||||
{1:~ }|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}^aaaaaaa |
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
|
||||
feed([[<C-\><C-O>]])
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:virtual text}^foo foo |
|
||||
{1:~ }|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}^aaaaaaa |
|
||||
{8:-- (insert) --} |
|
||||
]]}
|
||||
|
||||
feed('D')
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:virtual text}^ |
|
||||
{1:~ }|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:^~ }|
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
command('setlocal list listchars=eol:$')
|
||||
screen:expect{grid=[[
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+^$} |
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
|
||||
feed('<C-U>')
|
||||
screen:expect{grid=[[
|
||||
{10:virtual text}^ |
|
||||
{10:>>>>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>}{1:^$} |
|
||||
{1:~ }|
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
|
||||
feed('a')
|
||||
screen:expect{grid=[[
|
||||
{10:virtual text}a^ |
|
||||
{10:>>>>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>}a{1:^$} |
|
||||
{1:~ }|
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
|
||||
feed('<Esc>')
|
||||
screen:expect{grid=[[
|
||||
{10:virtual text}^a |
|
||||
{10:>>>>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>}^a{1:$} |
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
|
||||
feed('x')
|
||||
screen:expect{grid=[[
|
||||
{10:^virtual text} |
|
||||
{10:^>>>>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>>>>>>>}{1:$} |
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
@ -2272,48 +2290,47 @@ bbbbbbb]])
|
||||
it('cursor position is correct when inserting around virtual texts with both left and right gravity', function()
|
||||
screen:try_resize(30, 4)
|
||||
command('setlocal showbreak=+ breakindent breakindentopt=shift:2')
|
||||
insert('foo foo foo foo')
|
||||
insert(('a'):rep(15))
|
||||
meths.buf_set_extmark(0, ns, 0, 8, { virt_text = {{ ('>'):rep(32), 'Special' }}, virt_text_pos = 'inline', right_gravity = false })
|
||||
meths.buf_set_extmark(0, ns, 0, 8, { virt_text = {{ ('<'):rep(32), 'Special' }}, virt_text_pos = 'inline', right_gravity = true })
|
||||
|
||||
feed('08l')
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>><<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<<<<<<<<<<<<<<<}^foo foo |
|
||||
{1:+}{10:<<<<<<<<<<<<<<<}^aaaaaaa |
|
||||
|
|
||||
]]}
|
||||
feed('i')
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>^<<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<<<<<<<<<<<<<<<}foo foo |
|
||||
{1:+}{10:<<<<<<<<<<<<<<<}aaaaaaa |
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
feed('a')
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>}a{10:^<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<<<<<<<<<<<<<<<<}foo foo |
|
||||
{1:+}{10:<<<<<<<<<<<<<<<<}aaaaaaa |
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
feed([[<C-\><C-O>]])
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>}a{10:<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<<<<<<<<<<<<<<<<}^foo foo |
|
||||
{1:+}{10:<<<<<<<<<<<<<<<<}^aaaaaaa |
|
||||
{8:-- (insert) --} |
|
||||
]]}
|
||||
feed('D')
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>}a{10:^<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<<<<<<<<<<<<<<<<} |
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
feed('<BS>')
|
||||
screen:expect{grid=[[
|
||||
foo foo {10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
aaaaaaaa{10:>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>>>>>>>>>^<<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<<<<<<<<<<<<<<<} |
|
||||
{8:-- INSERT --} |
|
||||
@ -2346,6 +2363,27 @@ bbbbbbb]])
|
||||
{1:+}{10:<<<<<<<} |
|
||||
|
|
||||
]]}
|
||||
feed('i')
|
||||
screen:expect{grid=[[
|
||||
{10:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:>>^<<<<<<<<<<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<<<<<<<} |
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
screen:try_resize(32, 4)
|
||||
screen:expect{grid=[[
|
||||
{10:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<<<} |
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
command('setlocal nobreakindent')
|
||||
screen:expect{grid=[[
|
||||
{10:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}|
|
||||
{1:+}{10:^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}|
|
||||
{1:+}{10:<} |
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
end)
|
||||
|
||||
it('draws correctly with no wrap multiple virtual text, where one is hidden', function()
|
||||
@ -2639,7 +2677,45 @@ bbbbbbb]])
|
||||
]]}
|
||||
end)
|
||||
|
||||
it('list "extends" is drawn with only inline virtual text offscreen', function()
|
||||
it('lcs-extends is drawn with inline virtual text at end of screen line', function()
|
||||
exec([[
|
||||
setlocal nowrap list listchars=extends:!
|
||||
call setline(1, repeat('a', 51))
|
||||
]])
|
||||
meths.buf_set_extmark(0, ns, 0, 50, { virt_text = { { 'bbb', 'Special' } }, virt_text_pos = 'inline' })
|
||||
feed('20l')
|
||||
screen:expect{grid=[[
|
||||
aaaaaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaaaaaaaaaaaaaaaa{1:!}|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
feed('zl')
|
||||
screen:expect{grid=[[
|
||||
aaaaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{1:!}|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
feed('zl')
|
||||
screen:expect{grid=[[
|
||||
aaaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{10:b}{1:!}|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
feed('zl')
|
||||
screen:expect{grid=[[
|
||||
aaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{10:bb}{1:!}|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
feed('zl')
|
||||
screen:expect{grid=[[
|
||||
aaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{10:bbb}a|
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
end)
|
||||
|
||||
it('lcs-extends is drawn with only inline virtual text offscreen', function()
|
||||
command('set nowrap')
|
||||
command('set list')
|
||||
command('set listchars+=extends:c')
|
||||
@ -2797,9 +2873,9 @@ bbbbbbb]])
|
||||
screen:try_resize(30, 6)
|
||||
exec([[
|
||||
highlight! link LineNr Normal
|
||||
call setline(1, repeat('a', 28))
|
||||
setlocal number showbreak=+ breakindent breakindentopt=shift:2
|
||||
setlocal scrolloff=0 smoothscroll
|
||||
call setline(1, repeat('a', 28))
|
||||
normal! $
|
||||
]])
|
||||
meths.buf_set_extmark(0, ns, 0, 27, { virt_text = { { ('123'):rep(23) } }, virt_text_pos = 'inline' })
|
||||
@ -3002,6 +3078,24 @@ bbbbbbb]])
|
||||
{1:~ }|
|
||||
|
|
||||
]]}
|
||||
feed('26ia<Esc>a')
|
||||
screen:expect{grid=[[
|
||||
1 aaaaaaaaaaaaaaaaaaaaaaaaaa|
|
||||
{1:+}^12312312312312312312312|
|
||||
{1:+}31231231231231231231231|
|
||||
{1:+}23123123123123123123123|
|
||||
{1:~ }|
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
feed([[<C-\><C-O>:setlocal breakindentopt=<CR>]])
|
||||
screen:expect{grid=[[
|
||||
1 aaaaaaaaaaaaaaaaaaaaaaaaaa|
|
||||
{1:+}^1231231231231231231231231|
|
||||
{1:+}2312312312312312312312312|
|
||||
{1:+}3123123123123123123 |
|
||||
{1:~ }|
|
||||
{8:-- INSERT --} |
|
||||
]]}
|
||||
end
|
||||
|
||||
describe('with showbreak, smoothscroll', function()
|
||||
@ -3019,8 +3113,8 @@ bbbbbbb]])
|
||||
it('before TABs with smoothscroll', function()
|
||||
screen:try_resize(30, 6)
|
||||
exec([[
|
||||
call setline(1, repeat("\t", 4) .. 'a')
|
||||
setlocal list listchars=tab:<-> scrolloff=0 smoothscroll
|
||||
call setline(1, repeat("\t", 4) .. 'a')
|
||||
normal! $
|
||||
]])
|
||||
meths.buf_set_extmark(0, ns, 0, 3, { virt_text = { { ('12'):rep(32) } }, virt_text_pos = 'inline' })
|
||||
|
@ -938,7 +938,6 @@ func Test_cursor_position_with_showbreak()
|
||||
vim9script
|
||||
&signcolumn = 'yes'
|
||||
&showbreak = '++'
|
||||
&breakindent = true
|
||||
&breakindentopt = 'shift:2'
|
||||
var leftcol: number = win_getid()->getwininfo()->get(0, {})->get('textoff')
|
||||
repeat('x', &columns - leftcol - 1)->setline(1)
|
||||
@ -952,9 +951,14 @@ func Test_cursor_position_with_showbreak()
|
||||
" No line wraps, so changing 'showbreak' should lead to the same screen.
|
||||
call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal showbreak=+\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
|
||||
" No line wraps, so setting 'breakindent' should lead to the same screen.
|
||||
call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal breakindent\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
|
||||
" The first line now wraps because of "eol" in 'listchars'.
|
||||
call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal list\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_2', {})
|
||||
call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal nobreakindent\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_3', {})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
Loading…
Reference in New Issue
Block a user