aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/extmark.c
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2021-11-01 23:50:19 +0100
committerGitHub <noreply@github.com>2021-11-01 23:50:19 +0100
commit29cec32f44db358b0dfcd560d2ba8228b9d9de39 (patch)
tree0e3edc2c677273a56a2f98d437f954c381dbde0a /src/nvim/extmark.c
parentb8eabb37b1d4e267a4db7e639e8cbdec2ed64b8e (diff)
parent995dbd2ca6c112dc745f226690a99d79b9dc51c9 (diff)
downloadrneovim-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.c19
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,