forked from aniani/vim
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:
parent
a703aaee4d
commit
fae8ed1fc8
24
src/screen.c
24
src/screen.c
@ -8317,15 +8317,29 @@ screen_char(unsigned off, int row, int col)
|
||||
{
|
||||
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
|
||||
|
@ -771,6 +771,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1388,
|
||||
/**/
|
||||
1387,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user