# HG changeset patch # User Bram Moolenaar # Date 1339603596 -7200 # Node ID 583e46e4a56c40fa1a7336be85eaec93f6800edf # Parent e7af39fabb8e857387e0c645e93d5141028b8a5a 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) diff --git a/src/screen.c b/src/screen.c --- 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) { diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 553, +/**/ 552, /**/ 551,