Mercurial > vim
changeset 13024:27934188d7b5 v8.0.1388
patch 8.0.1388: char not overwritten with ambiguous width char
commit https://github.com/vim/vim/commit/fae8ed1fc8c06b28528d726e8440dfc66852bca8
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Dec 12 22:29:30 2017 +0100
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)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 12 Dec 2017 22:30:05 +0100 |
parents | 999318b2de68 |
children | 5f7d269284a3 |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 21 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -8317,15 +8317,29 @@ screen_char(unsigned off, int row, int c { 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