diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2021-11-01 23:50:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-01 23:50:19 +0100 |
commit | 29cec32f44db358b0dfcd560d2ba8228b9d9de39 (patch) | |
tree | 0e3edc2c677273a56a2f98d437f954c381dbde0a /src/nvim/extmark.c | |
parent | b8eabb37b1d4e267a4db7e639e8cbdec2ed64b8e (diff) | |
parent | 995dbd2ca6c112dc745f226690a99d79b9dc51c9 (diff) | |
download | rneovim-29cec32f44db358b0dfcd560d2ba8228b9d9de39.tar.gz rneovim-29cec32f44db358b0dfcd560d2ba8228b9d9de39.tar.bz2 rneovim-29cec32f44db358b0dfcd560d2ba8228b9d9de39.zip |
Merge pull request #16203 from bfredl/revision
fix(extmark): fix missing virt_lines when using id param of set_extmark
Diffstat (limited to 'src/nvim/extmark.c')
-rw-r--r-- | src/nvim/extmark.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/nvim/extmark.c b/src/nvim/extmark.c index 8726abc59d..c4d8f75a21 100644 --- a/src/nvim/extmark.c +++ b/src/nvim/extmark.c @@ -68,6 +68,14 @@ uint64_t extmark_set(buf_T *buf, uint64_t ns_id, uint64_t *idp, int row, colnr_T uint64_t mark = 0; uint64_t id = idp ? *idp : 0; + uint8_t decor_level = kDecorLevelNone; // no decor + if (decor) { + decor_level = kDecorLevelVisible; // decor affects redraw + if (kv_size(decor->virt_lines)) { + decor_level = kDecorLevelVirtLine; // decor affects horizontal size + } + } + if (id == 0) { id = ns->free_id++; } else { @@ -76,7 +84,6 @@ uint64_t extmark_set(buf_T *buf, uint64_t ns_id, uint64_t *idp, int row, colnr_T if (old_mark & MARKTREE_PAIRED_FLAG || end_row > -1) { extmark_del(buf, ns_id, id); } else { - // TODO(bfredl): we need to do more if "revising" a decoration mark. MarkTreeIter itr[1] = { 0 }; old_pos = marktree_lookup(buf->b_marktree, old_mark, itr); assert(itr->node); @@ -86,7 +93,7 @@ uint64_t extmark_set(buf_T *buf, uint64_t ns_id, uint64_t *idp, int row, colnr_T if (it.decor) { decor_remove(buf, row, row, it.decor); } - mark = marktree_revise(buf->b_marktree, itr); + mark = marktree_revise(buf->b_marktree, itr, decor_level); goto revised; } marktree_del_itr(buf->b_marktree, itr, false); @@ -96,14 +103,6 @@ uint64_t extmark_set(buf_T *buf, uint64_t ns_id, uint64_t *idp, int row, colnr_T } } - uint8_t decor_level = kDecorLevelNone; // no decor - if (decor) { - decor_level = kDecorLevelVisible; // decor affects redraw - if (kv_size(decor->virt_lines)) { - decor_level = kDecorLevelVirtLine; // decor affects horizontal size - } - } - if (end_row > -1) { mark = marktree_put_pair(buf->b_marktree, row, col, right_gravity, |