summaryrefslogtreecommitdiff
path: root/src/screen.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-06-13 18:06:36 +0200
committerBram Moolenaar <Bram@vim.org>2012-06-13 18:06:36 +0200
commit5641f38d41068e92c2ba15cb6359f8d80188f6cf (patch)
tree701b9a21b1a91c0847213f16774808499949c2ac /src/screen.c
parentbfe3bf806a8a4300289055643d13d19e2dbc8967 (diff)
downloadvim-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.c14
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)
{