mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
fix(ui): fix incorrect highlighting when virtual text next to match
This commit is contained in:
parent
332b70d2ed
commit
75f350aac6
@ -102,7 +102,6 @@ typedef struct {
|
|||||||
///< when c_extra and c_final are NUL
|
///< when c_extra and c_final are NUL
|
||||||
char *p_extra_free; ///< p_extra buffer that needs to be freed
|
char *p_extra_free; ///< p_extra buffer that needs to be freed
|
||||||
int extra_attr; ///< attributes for p_extra
|
int extra_attr; ///< attributes for p_extra
|
||||||
///< with win_attr if needed
|
|
||||||
int c_extra; ///< extra chars, all the same
|
int c_extra; ///< extra chars, all the same
|
||||||
int c_final; ///< final char, mandatory if set
|
int c_final; ///< final char, mandatory if set
|
||||||
|
|
||||||
@ -1026,6 +1025,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
|
|||||||
int prev_c1 = 0; // first composing char for prev_c
|
int prev_c1 = 0; // first composing char for prev_c
|
||||||
|
|
||||||
bool search_attr_from_match = false; // if search_attr is from :match
|
bool search_attr_from_match = false; // if search_attr is from :match
|
||||||
|
bool saved_search_attr_from_match = false; // if search_attr is from :match
|
||||||
bool has_decor = false; // this buffer has decoration
|
bool has_decor = false; // this buffer has decoration
|
||||||
int win_col_offset = 0; // offset for window columns
|
int win_col_offset = 0; // offset for window columns
|
||||||
|
|
||||||
@ -1786,6 +1786,8 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
|
|||||||
// is down to zero
|
// is down to zero
|
||||||
saved_search_attr = search_attr;
|
saved_search_attr = search_attr;
|
||||||
saved_area_attr = area_attr;
|
saved_area_attr = area_attr;
|
||||||
|
saved_search_attr_from_match = search_attr_from_match;
|
||||||
|
search_attr_from_match = false;
|
||||||
search_attr = 0;
|
search_attr = 0;
|
||||||
area_attr = 0;
|
area_attr = 0;
|
||||||
extmark_attr = 0;
|
extmark_attr = 0;
|
||||||
@ -1815,7 +1817,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wlv.n_extra) {
|
if (wlv.n_extra == 0) {
|
||||||
// Check for start/end of 'hlsearch' and other matches.
|
// Check for start/end of 'hlsearch' and other matches.
|
||||||
// After end, check for start/end of next match.
|
// After end, check for start/end of next match.
|
||||||
// When another match, have to check for start again.
|
// When another match, have to check for start again.
|
||||||
@ -2606,6 +2608,8 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
|
|||||||
if (reset_extra_attr) {
|
if (reset_extra_attr) {
|
||||||
reset_extra_attr = false;
|
reset_extra_attr = false;
|
||||||
wlv.extra_attr = 0;
|
wlv.extra_attr = 0;
|
||||||
|
// search_attr_from_match can be restored now that the extra_attr has been applied
|
||||||
|
search_attr_from_match = saved_search_attr_from_match;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1746,9 +1746,9 @@ bbbbbbb]])
|
|||||||
insert('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz')
|
insert('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz')
|
||||||
command("set nowrap")
|
command("set nowrap")
|
||||||
meths.buf_set_extmark(0, ns, 0, 50,
|
meths.buf_set_extmark(0, ns, 0, 50,
|
||||||
{ virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline', right_gravity = false })
|
{ virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline' })
|
||||||
meths.buf_set_extmark(0, ns, 0, 2,
|
meths.buf_set_extmark(0, ns, 0, 2,
|
||||||
{ virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline', right_gravity = false })
|
{ virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline' })
|
||||||
feed('$')
|
feed('$')
|
||||||
screen:expect { grid = [[
|
screen:expect { grid = [[
|
||||||
opqrstuvwxyzabcdefghijklmnopqrstuvwx{28:virtual text}y^z|
|
opqrstuvwxyzabcdefghijklmnopqrstuvwx{28:virtual text}y^z|
|
||||||
@ -1773,7 +1773,7 @@ bbbbbbb]])
|
|||||||
insert('abcdefghi')
|
insert('abcdefghi')
|
||||||
command("set nowrap")
|
command("set nowrap")
|
||||||
meths.buf_set_extmark(0, ns, 0, 2,
|
meths.buf_set_extmark(0, ns, 0, 2,
|
||||||
{ virt_text = { { string.rep('X', 55), 'Special' } }, virt_text_pos = 'inline', right_gravity = false })
|
{ virt_text = { { string.rep('X', 55), 'Special' } }, virt_text_pos = 'inline' })
|
||||||
feed('$')
|
feed('$')
|
||||||
screen:expect { grid = [[
|
screen:expect { grid = [[
|
||||||
{28:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}cdefgh^i|
|
{28:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}cdefgh^i|
|
||||||
@ -1823,7 +1823,7 @@ bbbbbbb]])
|
|||||||
insert('abcdef')
|
insert('abcdef')
|
||||||
command("set nowrap")
|
command("set nowrap")
|
||||||
meths.buf_set_extmark(0, ns, 0, 3,
|
meths.buf_set_extmark(0, ns, 0, 3,
|
||||||
{ virt_text = { { string.rep('X', 50), 'Special' } }, virt_text_pos = 'inline', right_gravity = false })
|
{ virt_text = { { string.rep('X', 50), 'Special' } }, virt_text_pos = 'inline' })
|
||||||
feed('$')
|
feed('$')
|
||||||
screen:expect { grid = [[
|
screen:expect { grid = [[
|
||||||
{28:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}de^f|
|
{28:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}de^f|
|
||||||
@ -1850,7 +1850,7 @@ bbbbbbb]])
|
|||||||
test]])
|
test]])
|
||||||
command('set number')
|
command('set number')
|
||||||
meths.buf_set_extmark(0, ns, 0, 1,
|
meths.buf_set_extmark(0, ns, 0, 1,
|
||||||
{ virt_text = { { string.rep('X', 55), 'Special' } }, virt_text_pos = 'inline', right_gravity = false })
|
{ virt_text = { { string.rep('X', 55), 'Special' } }, virt_text_pos = 'inline' })
|
||||||
feed('gg0')
|
feed('gg0')
|
||||||
screen:expect { grid = [[
|
screen:expect { grid = [[
|
||||||
{2: 1 }^t{28:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
{2: 1 }^t{28:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
|
||||||
@ -1870,6 +1870,49 @@ bbbbbbb]])
|
|||||||
|
|
|
|
||||||
]]}
|
]]}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('highlighting is correct when virtual text is proceeded with a match', function()
|
||||||
|
insert([[test]])
|
||||||
|
meths.buf_set_extmark(0, ns, 0, 2,
|
||||||
|
{ virt_text = { { 'virtual text', 'Special' } }, virt_text_pos = 'inline' })
|
||||||
|
feed('gg0')
|
||||||
|
command('match ErrorMsg /e/')
|
||||||
|
screen:expect { grid = [[
|
||||||
|
^t{4:e}{28:virtual text}st |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
command('match ErrorMsg /s/')
|
||||||
|
screen:expect { grid = [[
|
||||||
|
^te{28:virtual text}{4:s}t |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('decorations: virtual lines', function()
|
describe('decorations: virtual lines', function()
|
||||||
|
Loading…
Reference in New Issue
Block a user