mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 11:15:14 -07:00
fix(extmarks): make empty "conceal" respect &conceallevel = 1 (#24785)
This treats extmark conceal more like matchadd() conceal.
This commit is contained in:
parent
f0e6e2ae46
commit
5a6c7c805b
@ -332,7 +332,7 @@ next_mark:
|
|||||||
|
|
||||||
int attr = 0;
|
int attr = 0;
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
bool conceal = 0;
|
int conceal = 0;
|
||||||
int conceal_char = 0;
|
int conceal_char = 0;
|
||||||
int conceal_attr = 0;
|
int conceal_attr = 0;
|
||||||
TriState spell = kNone;
|
TriState spell = kNone;
|
||||||
@ -362,8 +362,9 @@ next_mark:
|
|||||||
attr = hl_combine_attr(attr, item.attr_id);
|
attr = hl_combine_attr(attr, item.attr_id);
|
||||||
}
|
}
|
||||||
if (active && item.decor.conceal) {
|
if (active && item.decor.conceal) {
|
||||||
conceal = true;
|
conceal = 1;
|
||||||
if (item.start_row == state->row && item.start_col == col && item.decor.conceal_char) {
|
if (item.start_row == state->row && item.start_col == col) {
|
||||||
|
conceal = 2;
|
||||||
conceal_char = item.decor.conceal_char;
|
conceal_char = item.decor.conceal_char;
|
||||||
state->col_until = MIN(state->col_until, item.start_col);
|
state->col_until = MIN(state->col_until, item.start_col);
|
||||||
conceal_attr = item.attr_id;
|
conceal_attr = item.attr_id;
|
||||||
|
@ -101,7 +101,7 @@ typedef struct {
|
|||||||
int current;
|
int current;
|
||||||
int eol_col;
|
int eol_col;
|
||||||
|
|
||||||
bool conceal;
|
int conceal;
|
||||||
int conceal_char;
|
int conceal_char;
|
||||||
int conceal_attr;
|
int conceal_attr;
|
||||||
|
|
||||||
|
@ -2179,11 +2179,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool number_onl
|
|||||||
if (has_decor && v > 0) {
|
if (has_decor && v > 0) {
|
||||||
// extmarks take preceedence over syntax.c
|
// extmarks take preceedence over syntax.c
|
||||||
decor_attr = hl_combine_attr(decor_attr, extmark_attr);
|
decor_attr = hl_combine_attr(decor_attr, extmark_attr);
|
||||||
|
|
||||||
decor_conceal = decor_state.conceal;
|
decor_conceal = decor_state.conceal;
|
||||||
if (decor_conceal && decor_state.conceal_char) {
|
|
||||||
decor_conceal = 2; // really??
|
|
||||||
}
|
|
||||||
can_spell = TRISTATE_TO_BOOL(decor_state.spell, can_spell);
|
can_spell = TRISTATE_TO_BOOL(decor_state.spell, can_spell);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1361,18 +1361,43 @@ describe('extmark decorations', function()
|
|||||||
assert_alive()
|
assert_alive()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('conceal #19007', function()
|
it('conceal with conceal char #19007', function()
|
||||||
screen:try_resize(50, 5)
|
screen:try_resize(50, 5)
|
||||||
insert('foo\n')
|
insert('foo\n')
|
||||||
command('let &conceallevel=2')
|
|
||||||
meths.buf_set_extmark(0, ns, 0, 0, {end_col=0, end_row=2, conceal='X'})
|
meths.buf_set_extmark(0, ns, 0, 0, {end_col=0, end_row=2, conceal='X'})
|
||||||
|
command('set conceallevel=2')
|
||||||
screen:expect([[
|
screen:expect([[
|
||||||
{26:X} |
|
{26:X} |
|
||||||
^ |
|
^ |
|
||||||
{1:~ }|
|
{1:~ }|
|
||||||
{1:~ }|
|
{1:~ }|
|
||||||
|
|
|
|
||||||
]])
|
]])
|
||||||
|
command('set conceallevel=1')
|
||||||
|
screen:expect_unchanged()
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('conceal without conceal char #24782', function()
|
||||||
|
screen:try_resize(50, 5)
|
||||||
|
insert('foobar\n')
|
||||||
|
meths.buf_set_extmark(0, ns, 0, 0, {end_col=3, conceal=''})
|
||||||
|
command('set listchars=conceal:?')
|
||||||
|
command('let &conceallevel=1')
|
||||||
|
screen:expect([[
|
||||||
|
{26:?}bar |
|
||||||
|
^ |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
command('let &conceallevel=2')
|
||||||
|
screen:expect([[
|
||||||
|
bar |
|
||||||
|
^ |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('conceal works just before truncated double-width char #21486', function()
|
it('conceal works just before truncated double-width char #21486', function()
|
||||||
|
@ -1655,8 +1655,7 @@ describe('ui/mouse/input', function()
|
|||||||
test_mouse_click_conceal()
|
test_mouse_click_conceal()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- FIXME: cannot make extmark conceal behave exactly like syntax conceal without cchar
|
describe('(extmarks)', function()
|
||||||
pending('(extmarks)', function()
|
|
||||||
before_each(function()
|
before_each(function()
|
||||||
local ns = meths.create_namespace('conceal')
|
local ns = meths.create_namespace('conceal')
|
||||||
meths.buf_set_extmark(0, ns, 0, 11, { end_col = 12, conceal = '' })
|
meths.buf_set_extmark(0, ns, 0, 11, { end_col = 12, conceal = '' })
|
||||||
|
Loading…
Reference in New Issue
Block a user