aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/extmark.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/extmark.c')
-rw-r--r--src/nvim/extmark.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/nvim/extmark.c b/src/nvim/extmark.c
index a5f669acde..0321a11b0f 100644
--- a/src/nvim/extmark.c
+++ b/src/nvim/extmark.c
@@ -521,10 +521,19 @@ void extmark_splice_impl(buf_T *buf, int start_row, colnr_T start_col, bcount_t
extmark_splice_delete(buf, start_row, start_col, end_row, end_col, uvp, false, undo);
}
+ // Remove signs inside edited region from "b_signcols.count", add after splicing.
+ if (old_row > 0 || new_row > 0) {
+ buf_signcols_count_range(buf, start_row, start_row + old_row + 1, 0, kTrue);
+ }
+
marktree_splice(buf->b_marktree, (int32_t)start_row, start_col,
old_row, old_col,
new_row, new_col);
+ if (old_row > 0 || new_row > 0) {
+ buf_signcols_count_range(buf, start_row, start_row + new_row + 1, 0, kNone);
+ }
+
if (undo == kExtmarkUndo) {
u_header_T *uhp = u_force_get_undo_header(buf);
if (!uhp) {
@@ -603,10 +612,16 @@ void extmark_move_region(buf_T *buf, int start_row, colnr_T start_col, bcount_t
extent_row, extent_col, extent_byte,
0, 0, 0);
+ int row1 = MIN(start_row, new_row);
+ int row2 = MAX(start_row, new_row) + extent_row;
+ buf_signcols_count_range(buf, row1, row2, 0, kTrue);
+
marktree_move_region(buf->b_marktree, start_row, start_col,
extent_row, extent_col,
new_row, new_col);
+ buf_signcols_count_range(buf, row1, row2, 0, kNone);
+
buf_updates_send_splice(buf, new_row, new_col, new_byte,
0, 0, 0,
extent_row, extent_col, extent_byte);