mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #17183 from notomo/expose-extmark-right-gravity
feat(api): expose extmark right_gravity and end_right_gravity
This commit is contained in:
commit
ca3e382a4f
@ -106,9 +106,12 @@ static Array extmark_to_array(ExtmarkInfo extmark, bool id, bool add_dict)
|
|||||||
if (add_dict) {
|
if (add_dict) {
|
||||||
Dictionary dict = ARRAY_DICT_INIT;
|
Dictionary dict = ARRAY_DICT_INIT;
|
||||||
|
|
||||||
|
PUT(dict, "right_gravity", BOOLEAN_OBJ(extmark.right_gravity));
|
||||||
|
|
||||||
if (extmark.end_row >= 0) {
|
if (extmark.end_row >= 0) {
|
||||||
PUT(dict, "end_row", INTEGER_OBJ(extmark.end_row));
|
PUT(dict, "end_row", INTEGER_OBJ(extmark.end_row));
|
||||||
PUT(dict, "end_col", INTEGER_OBJ(extmark.end_col));
|
PUT(dict, "end_col", INTEGER_OBJ(extmark.end_col));
|
||||||
|
PUT(dict, "end_right_gravity", BOOLEAN_OBJ(extmark.end_right_gravity));
|
||||||
}
|
}
|
||||||
|
|
||||||
Decoration *decor = &extmark.decor;
|
Decoration *decor = &extmark.decor;
|
||||||
|
@ -305,12 +305,14 @@ ExtmarkInfoArray extmark_get(buf_T *buf, uint32_t ns_id, int l_row, colnr_T l_co
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mark.ns == ns_id) {
|
if (mark.ns == ns_id) {
|
||||||
mtpos_t endpos = marktree_get_altpos(buf->b_marktree, mark, NULL);
|
mtkey_t end = marktree_get_alt(buf->b_marktree, mark, NULL);
|
||||||
kv_push(array, ((ExtmarkInfo) { .ns_id = mark.ns,
|
kv_push(array, ((ExtmarkInfo) { .ns_id = mark.ns,
|
||||||
.mark_id = mark.id,
|
.mark_id = mark.id,
|
||||||
.row = mark.pos.row, .col = mark.pos.col,
|
.row = mark.pos.row, .col = mark.pos.col,
|
||||||
.end_row = endpos.row,
|
.end_row = end.pos.row,
|
||||||
.end_col = endpos.col,
|
.end_col = end.pos.col,
|
||||||
|
.right_gravity = mt_right(mark),
|
||||||
|
.end_right_gravity = mt_right(end),
|
||||||
.decor = get_decor(mark) }));
|
.decor = get_decor(mark) }));
|
||||||
}
|
}
|
||||||
next_mark:
|
next_mark:
|
||||||
@ -326,20 +328,22 @@ next_mark:
|
|||||||
// Lookup an extmark by id
|
// Lookup an extmark by id
|
||||||
ExtmarkInfo extmark_from_id(buf_T *buf, uint32_t ns_id, uint32_t id)
|
ExtmarkInfo extmark_from_id(buf_T *buf, uint32_t ns_id, uint32_t id)
|
||||||
{
|
{
|
||||||
ExtmarkInfo ret = { 0, 0, -1, -1, -1, -1, DECORATION_INIT };
|
ExtmarkInfo ret = { 0, 0, -1, -1, -1, -1, false, false, DECORATION_INIT };
|
||||||
mtkey_t mark = marktree_lookup_ns(buf->b_marktree, ns_id, id, false, NULL);
|
mtkey_t mark = marktree_lookup_ns(buf->b_marktree, ns_id, id, false, NULL);
|
||||||
if (!mark.id) {
|
if (!mark.id) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
assert(mark.pos.row >= 0);
|
assert(mark.pos.row >= 0);
|
||||||
mtpos_t endpos = marktree_get_altpos(buf->b_marktree, mark, NULL);
|
mtkey_t end = marktree_get_alt(buf->b_marktree, mark, NULL);
|
||||||
|
|
||||||
ret.ns_id = ns_id;
|
ret.ns_id = ns_id;
|
||||||
ret.mark_id = id;
|
ret.mark_id = id;
|
||||||
ret.row = mark.pos.row;
|
ret.row = mark.pos.row;
|
||||||
ret.col = mark.pos.col;
|
ret.col = mark.pos.col;
|
||||||
ret.end_row = endpos.row;
|
ret.end_row = end.pos.row;
|
||||||
ret.end_col = endpos.col;
|
ret.end_col = end.pos.col;
|
||||||
|
ret.right_gravity = mt_right(mark);
|
||||||
|
ret.end_right_gravity = mt_right(end);
|
||||||
ret.decor = get_decor(mark);
|
ret.decor = get_decor(mark);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -16,6 +16,8 @@ typedef struct {
|
|||||||
colnr_T col;
|
colnr_T col;
|
||||||
int end_row;
|
int end_row;
|
||||||
colnr_T end_col;
|
colnr_T end_col;
|
||||||
|
bool right_gravity;
|
||||||
|
bool end_right_gravity;
|
||||||
Decoration decor; // TODO(bfredl): CHONKY
|
Decoration decor; // TODO(bfredl): CHONKY
|
||||||
} ExtmarkInfo;
|
} ExtmarkInfo;
|
||||||
|
|
||||||
|
@ -1078,12 +1078,17 @@ found_node:
|
|||||||
}
|
}
|
||||||
|
|
||||||
mtpos_t marktree_get_altpos(MarkTree *b, mtkey_t mark, MarkTreeIter *itr)
|
mtpos_t marktree_get_altpos(MarkTree *b, mtkey_t mark, MarkTreeIter *itr)
|
||||||
|
{
|
||||||
|
return marktree_get_alt(b, mark, itr).pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
mtkey_t marktree_get_alt(MarkTree *b, mtkey_t mark, MarkTreeIter *itr)
|
||||||
{
|
{
|
||||||
mtkey_t end = MT_INVALID_KEY;
|
mtkey_t end = MT_INVALID_KEY;
|
||||||
if (mt_paired(mark)) {
|
if (mt_paired(mark)) {
|
||||||
end = marktree_lookup_ns(b, mark.ns, mark.id, !mt_end(mark), itr);
|
end = marktree_lookup_ns(b, mark.ns, mark.id, !mt_end(mark), itr);
|
||||||
}
|
}
|
||||||
return end.pos;
|
return end;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void marktree_itr_fix_pos(MarkTree *b, MarkTreeIter *itr)
|
static void marktree_itr_fix_pos(MarkTree *b, MarkTreeIter *itr)
|
||||||
|
@ -1446,13 +1446,20 @@ describe('API/extmarks', function()
|
|||||||
end_col = 0,
|
end_col = 0,
|
||||||
end_line = 1
|
end_line = 1
|
||||||
})
|
})
|
||||||
eq({ {1, 0, 0, { end_col = 0, end_row = 1 }} }, get_extmarks(ns, 0, -1, {details=true}))
|
eq({ {1, 0, 0, {
|
||||||
|
end_col = 0,
|
||||||
|
end_row = 1,
|
||||||
|
right_gravity = true,
|
||||||
|
end_right_gravity = false,
|
||||||
|
}} }, get_extmarks(ns, 0, -1, {details=true}))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('can get details', function()
|
it('can get details', function()
|
||||||
set_extmark(ns, marks[1], 0, 0, {
|
set_extmark(ns, marks[1], 0, 0, {
|
||||||
end_col = 0,
|
end_col = 0,
|
||||||
end_row = 1,
|
end_row = 1,
|
||||||
|
right_gravity = false,
|
||||||
|
end_right_gravity = true,
|
||||||
priority = 0,
|
priority = 0,
|
||||||
hl_eol = true,
|
hl_eol = true,
|
||||||
hl_mode = "blend",
|
hl_mode = "blend",
|
||||||
@ -1472,6 +1479,8 @@ describe('API/extmarks', function()
|
|||||||
eq({0, 0, {
|
eq({0, 0, {
|
||||||
end_col = 0,
|
end_col = 0,
|
||||||
end_row = 1,
|
end_row = 1,
|
||||||
|
right_gravity = false,
|
||||||
|
end_right_gravity = true,
|
||||||
priority = 0,
|
priority = 0,
|
||||||
hl_eol = true,
|
hl_eol = true,
|
||||||
hl_mode = "blend",
|
hl_mode = "blend",
|
||||||
@ -1484,6 +1493,7 @@ describe('API/extmarks', function()
|
|||||||
virt_lines_leftcol = true,
|
virt_lines_leftcol = true,
|
||||||
} }, get_extmark_by_id(ns, marks[1], { details = true }))
|
} }, get_extmark_by_id(ns, marks[1], { details = true }))
|
||||||
eq({0, 0, {
|
eq({0, 0, {
|
||||||
|
right_gravity = true,
|
||||||
priority = 0,
|
priority = 0,
|
||||||
virt_text = { { "text", "Statement" } },
|
virt_text = { { "text", "Statement" } },
|
||||||
virt_text_hide = false,
|
virt_text_hide = false,
|
||||||
|
@ -759,6 +759,7 @@ describe('Buffer highlighting', function()
|
|||||||
priority = 0,
|
priority = 0,
|
||||||
virt_text = s1,
|
virt_text = s1,
|
||||||
-- other details
|
-- other details
|
||||||
|
right_gravity = true,
|
||||||
virt_text_pos = 'eol',
|
virt_text_pos = 'eol',
|
||||||
virt_text_hide = false,
|
virt_text_hide = false,
|
||||||
}}}, get_extmarks(id1, {0,0}, {0, -1}, {details=true}))
|
}}}, get_extmarks(id1, {0,0}, {0, -1}, {details=true}))
|
||||||
@ -770,6 +771,7 @@ describe('Buffer highlighting', function()
|
|||||||
priority = 0,
|
priority = 0,
|
||||||
virt_text = s2,
|
virt_text = s2,
|
||||||
-- other details
|
-- other details
|
||||||
|
right_gravity = true,
|
||||||
virt_text_pos = 'eol',
|
virt_text_pos = 'eol',
|
||||||
virt_text_hide = false,
|
virt_text_hide = false,
|
||||||
}}}, get_extmarks(id1, {lastline,0}, {lastline, -1}, {details=true}))
|
}}}, get_extmarks(id1, {lastline,0}, {lastline, -1}, {details=true}))
|
||||||
|
Loading…
Reference in New Issue
Block a user