patch 8.2.4707: redrawing could be a bit more efficient
Problem: Redrawing could be a bit more efficient.
Solution: Optimize redrawing. (closes #10105)
diff --git a/src/edit.c b/src/edit.c
index c52583a..53e86ff 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -293,14 +293,9 @@
conceal_check_cursor_line(cursor_line_was_concealed);
#endif
- // Need to recompute the cursor position, it might move when the cursor
- // is on a TAB or special character.
- // ptr2cells() treats a TAB character as double-width.
- if (ptr2cells(ml_get_cursor()) > 1)
- {
- curwin->w_valid &= ~VALID_VIRTCOL;
- curs_columns(TRUE);
- }
+ // need to position cursor again when on a TAB
+ if (gchar_cursor() == TAB)
+ curwin->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL);
/*
* Enable langmap or IME, indicated by 'iminsert'.
@@ -3149,21 +3144,20 @@
replace_push(c);
break;
}
+
+ buf[0] = c;
+ for (i = 1; i < n; ++i)
+ buf[i] = replace_pop();
+ if (utf_iscomposing(utf_ptr2char(buf)))
+ ins_bytes_len(buf, n);
else
{
- buf[0] = c;
- for (i = 1; i < n; ++i)
- buf[i] = replace_pop();
- if (utf_iscomposing(utf_ptr2char(buf)))
- ins_bytes_len(buf, n);
- else
- {
- // Not a composing char, put it back.
- for (i = n - 1; i >= 0; --i)
- replace_push(buf[i]);
- break;
- }
+ // Not a composing char, put it back.
+ for (i = n - 1; i >= 0; --i)
+ replace_push(buf[i]);
+ break;
}
+
}
}
@@ -3702,8 +3696,9 @@
State = NORMAL;
trigger_modechanged();
- // need to position cursor again (e.g. when on a TAB )
- changed_cline_bef_curs();
+ // need to position cursor again when on a TAB
+ if (gchar_cursor() == TAB)
+ curwin->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL);
setmouse();
#ifdef CURSOR_SHAPE