aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-02-12 21:24:28 +0800
committerGitHub <noreply@github.com>2024-02-12 21:24:28 +0800
commit2d9e063a63f8af7eb9e8321c4845ec4f077ccf58 (patch)
treefb83cdefeccd710ae3545053fe59ffee430556c2 /src
parent597ecf751603cde2d5f58021d503ae20a12eb2f2 (diff)
downloadrneovim-2d9e063a63f8af7eb9e8321c4845ec4f077ccf58.tar.gz
rneovim-2d9e063a63f8af7eb9e8321c4845ec4f077ccf58.tar.bz2
rneovim-2d9e063a63f8af7eb9e8321c4845ec4f077ccf58.zip
fix(extmarks): redraw pre-undo position (#27437)
Problem: Virtual text not redrawn properly after undo moves its extmark. Solution: Redraw the moved extmark's pre-undo position.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/extmark.c6
-rw-r--r--src/nvim/undo.c4
2 files changed, 7 insertions, 3 deletions
diff --git a/src/nvim/extmark.c b/src/nvim/extmark.c
index 0f9e7749f1..e753ad199a 100644
--- a/src/nvim/extmark.c
+++ b/src/nvim/extmark.c
@@ -116,6 +116,12 @@ static void extmark_setraw(buf_T *buf, uint64_t mark, int row, colnr_T col, bool
return;
}
+ // Only the position before undo needs to be redrawn here,
+ // as the position after undo should be marked as changed.
+ if (!invalid && mt_decor_any(key) && key.pos.row != row) {
+ decor_redraw(buf, key.pos.row, key.pos.row, key.pos.col, mt_decor(key));
+ }
+
int row1 = 0;
int row2 = 0;
if (invalid) {
diff --git a/src/nvim/undo.c b/src/nvim/undo.c
index 547ac605e7..6081268e53 100644
--- a/src/nvim/undo.c
+++ b/src/nvim/undo.c
@@ -2390,9 +2390,7 @@ static void u_undoredo(bool undo, bool do_buf_event)
// When text has been changed, possibly the start of the next line
// may have SpellCap that should be removed or it needs to be
// displayed. Schedule the next line for redrawing just in case.
- // Also just in case the line had a sign which needs to be removed.
- if ((spell_check_window(curwin) || buf_meta_total(curbuf, kMTMetaSignText))
- && bot <= curbuf->b_ml.ml_line_count) {
+ if (spell_check_window(curwin) && bot <= curbuf->b_ml.ml_line_count) {
redrawWinline(curwin, bot);
}