diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-04-04 13:28:45 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-04-04 13:28:45 +0200 |
commit | e5e4e22c1c15c8c22b14935affe969569acc8df9 (patch) | |
tree | 051197659f151800c889fd04bb8383e543d303fa /src/screen.c | |
parent | 39b76b7df851608fe4d7179269d3c6736db30733 (diff) | |
download | vim-git-e5e4e22c1c15c8c22b14935affe969569acc8df9.tar.gz |
patch 8.1.1110: composing chars on space wrong when 'listchars' is setv8.1.1110
Problem: Composing chars on space wrong when 'listchars' is set.
Solution: Do not use "space" and "nbsp" entries of 'listchars' when there is
a composing character. (Yee Cheng Chin, closes #4197)
Diffstat (limited to 'src/screen.c')
-rw-r--r-- | src/screen.c | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/screen.c b/src/screen.c index e6bb33566..46e3f629f 100644 --- a/src/screen.c +++ b/src/screen.c @@ -4808,34 +4808,36 @@ win_line( } #endif - // 'list': change char 160 to lcs_nbsp and space to lcs_space. - if (wp->w_p_list) - { - if ((c == 160 - || (mb_utf8 && (mb_c == 160 || mb_c == 0x202f))) - && lcs_nbsp) + // 'list': Change char 160 to lcs_nbsp and space to lcs_space. + // But not when the character is followed by a composing + // character (use mb_l to check that). + if (wp->w_p_list + && ((((c == 160 && mb_l == 1) + || (mb_utf8 + && ((mb_c == 160 && mb_l == 2) + || (mb_c == 0x202f && mb_l == 3)))) + && lcs_nbsp) + || (c == ' ' + && mb_l == 1 + && lcs_space + && ptr - line <= trailcol))) + { + c = (c == ' ') ? lcs_space : lcs_nbsp; + if (area_attr == 0 && search_attr == 0) { - c = lcs_nbsp; - mb_c = c; - if (enc_utf8 && utf_char2len(c) > 1) - { - mb_utf8 = TRUE; - u8cc[0] = 0; - c = 0xc0; - } - else - mb_utf8 = FALSE; + n_attr = 1; + extra_attr = HL_ATTR(HLF_8); + saved_attr2 = char_attr; /* save current attr */ } - else if (c == ' ' && lcs_space && ptr - line <= trailcol) + mb_c = c; + if (enc_utf8 && utf_char2len(c) > 1) { - c = lcs_space; - if (mb_utf8 == FALSE && area_attr == 0 && search_attr == 0) - { - n_attr = 1; - extra_attr = HL_ATTR(HLF_8); - saved_attr2 = char_attr; // save current attr - } + mb_utf8 = TRUE; + u8cc[0] = 0; + c = 0xc0; } + else + mb_utf8 = FALSE; } if (trailcol != MAXCOL && ptr > line + trailcol && c == ' ') |