mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
feat(api): expose extmark right_gravity and end_right_gravity
This commit is contained in:
parent
7e2ce35e3b
commit
3d9ae9d2da
@ -106,9 +106,12 @@ static Array extmark_to_array(ExtmarkInfo extmark, bool id, bool add_dict)
|
||||
if (add_dict) {
|
||||
Dictionary dict = ARRAY_DICT_INIT;
|
||||
|
||||
PUT(dict, "right_gravity", BOOLEAN_OBJ(extmark.right_gravity));
|
||||
|
||||
if (extmark.end_row >= 0) {
|
||||
PUT(dict, "end_row", INTEGER_OBJ(extmark.end_row));
|
||||
PUT(dict, "end_col", INTEGER_OBJ(extmark.end_col));
|
||||
PUT(dict, "end_right_gravity", BOOLEAN_OBJ(extmark.end_right_gravity));
|
||||
}
|
||||
|
||||
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) {
|
||||
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,
|
||||
.mark_id = mark.id,
|
||||
.row = mark.pos.row, .col = mark.pos.col,
|
||||
.end_row = endpos.row,
|
||||
.end_col = endpos.col,
|
||||
.end_row = end.pos.row,
|
||||
.end_col = end.pos.col,
|
||||
.right_gravity = mt_right(mark),
|
||||
.end_right_gravity = mt_right(end),
|
||||
.decor = get_decor(mark) }));
|
||||
}
|
||||
next_mark:
|
||||
@ -326,20 +328,22 @@ next_mark:
|
||||
// Lookup an extmark by 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);
|
||||
if (!mark.id) {
|
||||
return ret;
|
||||
}
|
||||
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.mark_id = id;
|
||||
ret.row = mark.pos.row;
|
||||
ret.col = mark.pos.col;
|
||||
ret.end_row = endpos.row;
|
||||
ret.end_col = endpos.col;
|
||||
ret.end_row = end.pos.row;
|
||||
ret.end_col = end.pos.col;
|
||||
ret.right_gravity = mt_right(mark);
|
||||
ret.end_right_gravity = mt_right(end);
|
||||
ret.decor = get_decor(mark);
|
||||
|
||||
return ret;
|
||||
|
@ -16,6 +16,8 @@ typedef struct {
|
||||
colnr_T col;
|
||||
int end_row;
|
||||
colnr_T end_col;
|
||||
bool right_gravity;
|
||||
bool end_right_gravity;
|
||||
Decoration decor; // TODO(bfredl): CHONKY
|
||||
} ExtmarkInfo;
|
||||
|
||||
|
@ -1078,12 +1078,17 @@ found_node:
|
||||
}
|
||||
|
||||
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;
|
||||
if (mt_paired(mark)) {
|
||||
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)
|
||||
|
@ -1446,13 +1446,20 @@ describe('API/extmarks', function()
|
||||
end_col = 0,
|
||||
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)
|
||||
|
||||
it('can get details', function()
|
||||
set_extmark(ns, marks[1], 0, 0, {
|
||||
end_col = 0,
|
||||
end_row = 1,
|
||||
right_gravity = false,
|
||||
end_right_gravity = true,
|
||||
priority = 0,
|
||||
hl_eol = true,
|
||||
hl_mode = "blend",
|
||||
@ -1472,6 +1479,8 @@ describe('API/extmarks', function()
|
||||
eq({0, 0, {
|
||||
end_col = 0,
|
||||
end_row = 1,
|
||||
right_gravity = false,
|
||||
end_right_gravity = true,
|
||||
priority = 0,
|
||||
hl_eol = true,
|
||||
hl_mode = "blend",
|
||||
@ -1484,6 +1493,7 @@ describe('API/extmarks', function()
|
||||
virt_lines_leftcol = true,
|
||||
} }, get_extmark_by_id(ns, marks[1], { details = true }))
|
||||
eq({0, 0, {
|
||||
right_gravity = true,
|
||||
priority = 0,
|
||||
virt_text = { { "text", "Statement" } },
|
||||
virt_text_hide = false,
|
||||
|
@ -759,6 +759,7 @@ describe('Buffer highlighting', function()
|
||||
priority = 0,
|
||||
virt_text = s1,
|
||||
-- other details
|
||||
right_gravity = true,
|
||||
virt_text_pos = 'eol',
|
||||
virt_text_hide = false,
|
||||
}}}, get_extmarks(id1, {0,0}, {0, -1}, {details=true}))
|
||||
@ -770,6 +771,7 @@ describe('Buffer highlighting', function()
|
||||
priority = 0,
|
||||
virt_text = s2,
|
||||
-- other details
|
||||
right_gravity = true,
|
||||
virt_text_pos = 'eol',
|
||||
virt_text_hide = false,
|
||||
}}}, get_extmarks(id1, {lastline,0}, {lastline, -1}, {details=true}))
|
||||
|
Loading…
Reference in New Issue
Block a user