patch 8.0.1388: char not overwritten with ambiguous width char
Problem: Char not overwritten with ambiguous width char, if the ambiguous
char is single width but we reserve double-width space.
Solution: First clear the screen cells. (Ozaki Kiichi, closes #2436)
diff --git a/src/screen.c b/src/screen.c
index a74f750..090a4b3 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -8317,15 +8317,29 @@
{
char_u buf[MB_MAXBYTES + 1];
- /* Convert UTF-8 character to bytes and write it. */
-
- buf[utfc_char2bytes(off, buf)] = NUL;
-
- out_str(buf);
if (utf_ambiguous_width(ScreenLinesUC[off]))
+ {
+ if (*p_ambw == 'd'
+# ifdef FEAT_GUI
+ && !gui.in_use
+# endif
+ )
+ {
+ /* Clear the two screen cells. If the character is actually
+ * single width it won't change the second cell. */
+ out_str((char_u *)" ");
+ term_windgoto(row, col);
+ }
+ /* not sure where the cursor is after drawing the ambiguous width
+ * character */
screen_cur_col = 9999;
+ }
else if (utf_char2cells(ScreenLinesUC[off]) > 1)
++screen_cur_col;
+
+ /* Convert the UTF-8 character to bytes and write it. */
+ buf[utfc_char2bytes(off, buf)] = NUL;
+ out_str(buf);
}
else
#endif
diff --git a/src/version.c b/src/version.c
index 2f9957a..b805fd7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1388,
+/**/
1387,
/**/
1386,