diff options
author | notomo <notomo.motono@gmail.com> | 2022-01-24 09:52:13 +0900 |
---|---|---|
committer | notomo <notomo.motono@gmail.com> | 2022-01-24 09:52:13 +0900 |
commit | 3d9ae9d2dad88a4e2c2263dc7e256657842244c0 (patch) | |
tree | c6374905f58e7f3a089736e877eaf7a236a95ee8 | |
parent | 7e2ce35e3b7f8be5e8d01b44c2fdba0b4e23fbd4 (diff) | |
download | rneovim-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.c | 3 | ||||
-rw-r--r-- | src/nvim/extmark.c | 18 | ||||
-rw-r--r-- | src/nvim/extmark.h | 2 | ||||
-rw-r--r-- | src/nvim/marktree.c | 7 | ||||
-rw-r--r-- | test/functional/api/extmark_spec.lua | 12 | ||||
-rw-r--r-- | test/functional/ui/bufhl_spec.lua | 2 |
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})) |