0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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)
This commit is contained in:
Bram Moolenaar 2017-12-12 22:29:30 +01:00
parent a703aaee4d
commit fae8ed1fc8
2 changed files with 21 additions and 5 deletions

View File

@ -8317,15 +8317,29 @@ screen_char(unsigned off, int row, int col)
{ {
char_u buf[MB_MAXBYTES + 1]; 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 (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; screen_cur_col = 9999;
}
else if (utf_char2cells(ScreenLinesUC[off]) > 1) else if (utf_char2cells(ScreenLinesUC[off]) > 1)
++screen_cur_col; ++screen_cur_col;
/* Convert the UTF-8 character to bytes and write it. */
buf[utfc_char2bytes(off, buf)] = NUL;
out_str(buf);
} }
else else
#endif #endif

View File

@ -771,6 +771,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1388,
/**/ /**/
1387, 1387,
/**/ /**/