aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotomo <notomo.motono@gmail.com>2022-01-24 09:52:13 +0900
committernotomo <notomo.motono@gmail.com>2022-01-24 09:52:13 +0900
commit3d9ae9d2dad88a4e2c2263dc7e256657842244c0 (patch)
treec6374905f58e7f3a089736e877eaf7a236a95ee8
parent7e2ce35e3b7f8be5e8d01b44c2fdba0b4e23fbd4 (diff)
downloadrneovim-3d9ae9d2dad88a4e2c2263dc7e256657842244c0.tar.gz
rneovim-3d9ae9d2dad88a4e2c2263dc7e256657842244c0.tar.bz2
rneovim-3d9ae9d2dad88a4e2c2263dc7e256657842244c0.zip
feat(api): expose extmark right_gravity and end_right_gravity
-rw-r--r--src/nvim/api/extmark.c3
-rw-r--r--src/nvim/extmark.c18
-rw-r--r--src/nvim/extmark.h2
-rw-r--r--src/nvim/marktree.c7
-rw-r--r--test/functional/api/extmark_spec.lua12
-rw-r--r--test/functional/ui/bufhl_spec.lua2
6 files changed, 35 insertions, 9 deletions
diff --git a/src/nvim/api/extmark.c b/src/nvim/api/extmark.c
index 80bd88c4ee..3a968f07ab 100644
--- a/src/nvim/api/extmark.c
+++ b/src/nvim/api/extmark.c
@@ -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;
diff --git a/src/nvim/extmark.c b/src/nvim/extmark.c
index cee657c8c9..48e57e20e1 100644
--- a/src/nvim/extmark.c
+++ b/src/nvim/extmark.c
@@ -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;
diff --git a/src/nvim/extmark.h b/src/nvim/extmark.h
index c6ec1d0aa8..af9526cd43 100644
--- a/src/nvim/extmark.h
+++ b/src/nvim/extmark.h
@@ -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;
diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c
index 8ae138b2eb..918db8b76c 100644
--- a/src/nvim/marktree.c
+++ b/src/nvim/marktree.c
@@ -1079,11 +1079,16 @@ 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)
diff --git a/test/functional/api/extmark_spec.lua b/test/functional/api/extmark_spec.lua
index 3f79515949..3f96efd4ef 100644
--- a/test/functional/api/extmark_spec.lua
+++ b/test/functional/api/extmark_spec.lua
@@ -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,
diff --git a/test/functional/ui/bufhl_spec.lua b/test/functional/ui/bufhl_spec.lua
index 7716414e87..9f84b71ece 100644
--- a/test/functional/ui/bufhl_spec.lua
+++ b/test/functional/ui/bufhl_spec.lua
@@ -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}))