Mercurial > vim
changeset 3586:583e46e4a56c v7.3.553
updated for version 7.3.553
Problem: With double-width characters and 'listchars' containing "precedes"
the text is displayed one cell off.
Solution: Check for double-width character being overwritten by the
"precedes" character. (Yasuhiro Matsumoto)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 13 Jun 2012 18:06:36 +0200 |
parents | e7af39fabb8e |
children | ce38abb98cf3 |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 15 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -89,6 +89,9 @@ #include "vim.h" +#define MB_FILLER_CHAR '<' /* character used when a double-width character + * doesn't fit. */ + /* * The attributes that are actually active for writing to the screen. */ @@ -4016,7 +4019,7 @@ win_line(wp, lnum, startrow, endrow, noc if (n_skip > 0 && mb_l > 1 && n_extra == 0) { n_extra = 1; - c_extra = '<'; + c_extra = MB_FILLER_CHAR; c = ' '; if (area_attr == 0 && search_attr == 0) { @@ -4576,6 +4579,15 @@ win_line(wp, lnum, startrow, endrow, noc c = lcs_prec; lcs_prec_todo = NUL; #ifdef FEAT_MBYTE + if (has_mbyte && (*mb_char2cells)(mb_c) > 1) + { + /* Double-width character being overwritten by the "precedes" + * character, need to fill up half the character. */ + c_extra = MB_FILLER_CHAR; + n_extra = 1; + n_attr = 2; + extra_attr = hl_attr(HLF_AT); + } mb_c = c; if (enc_utf8 && (*mb_char2len)(c) > 1) {