diff options
author | Bram Moolenaar <Bram@vim.org> | 2012-06-13 18:06:36 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2012-06-13 18:06:36 +0200 |
commit | 5641f38d41068e92c2ba15cb6359f8d80188f6cf (patch) | |
tree | 701b9a21b1a91c0847213f16774808499949c2ac /src/screen.c | |
parent | bfe3bf806a8a4300289055643d13d19e2dbc8967 (diff) | |
download | vim-5641f38d41068e92c2ba15cb6359f8d80188f6cf.zip |
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)
Diffstat (limited to 'src/screen.c')
-rw-r--r-- | src/screen.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/screen.c b/src/screen.c index 7bc77f296..64d06ebe0 100644 --- 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, nochange) 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, nochange) 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) { |