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:
bfredl 2022-01-28 12:38:56 +01:00 committed by GitHub
commit ca3e382a4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 35 additions and 9 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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)

View File

@ -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,

View File

@ -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}))