Mercurial > vim
diff src/screen.c @ 7344:68f2cac6b0db v7.4.977
commit https://github.com/vim/vim/commit/9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Dec 17 21:14:58 2015 +0100
patch 7.4.977
Problem: 'linebreak' does not work properly when using "space" in
'listchars'.
Solution: (Hirohito Higashi, Christian Brabandt)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 17 Dec 2015 21:15:05 +0100 |
parents | 6fcadba9ec7a |
children | d3892f6c917e |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -3345,14 +3345,18 @@ win_line(wp, lnum, startrow, endrow, noc } #endif - /* find start of trailing whitespace */ - if (wp->w_p_list && lcs_trail) - { - trailcol = (colnr_T)STRLEN(ptr); - while (trailcol > (colnr_T)0 && vim_iswhite(ptr[trailcol - 1])) - --trailcol; - trailcol += (colnr_T) (ptr - line); - extra_check = TRUE; + if (wp->w_p_list) + { + if (lcs_space || lcs_trail) + extra_check = TRUE; + /* find start of trailing whitespace */ + if (lcs_trail) + { + trailcol = (colnr_T)STRLEN(ptr); + while (trailcol > (colnr_T)0 && vim_iswhite(ptr[trailcol - 1])) + --trailcol; + trailcol += (colnr_T) (ptr - line); + } } /* @@ -4354,35 +4358,6 @@ win_line(wp, lnum, startrow, endrow, noc #endif ++ptr; - /* 'list': change char 160 to lcs_nbsp and space to lcs_space. */ - if (wp->w_p_list - && (((c == 160 -#ifdef FEAT_MBYTE - || (mb_utf8 && (mb_c == 160 || mb_c == 0x202f)) -#endif - ) && lcs_nbsp) - || (c == ' ' && lcs_space && ptr - line <= trailcol))) - { - c = (c == ' ') ? lcs_space : lcs_nbsp; - if (area_attr == 0 && search_attr == 0) - { - n_attr = 1; - extra_attr = hl_attr(HLF_8); - saved_attr2 = char_attr; /* save current attr */ - } -#ifdef FEAT_MBYTE - mb_c = c; - if (enc_utf8 && (*mb_char2len)(c) > 1) - { - mb_utf8 = TRUE; - u8cc[0] = 0; - c = 0xc0; - } - else - mb_utf8 = FALSE; -#endif - } - if (extra_check) { #ifdef FEAT_SPELL @@ -4567,6 +4542,36 @@ win_line(wp, lnum, startrow, endrow, noc } #endif + /* 'list': change char 160 to lcs_nbsp and space to lcs_space. + */ + if (wp->w_p_list + && (((c == 160 +#ifdef FEAT_MBYTE + || (mb_utf8 && (mb_c == 160 || mb_c == 0x202f)) +#endif + ) && lcs_nbsp) + || (c == ' ' && lcs_space && ptr - line <= trailcol))) + { + c = (c == ' ') ? lcs_space : lcs_nbsp; + if (area_attr == 0 && search_attr == 0) + { + n_attr = 1; + extra_attr = hl_attr(HLF_8); + saved_attr2 = char_attr; /* save current attr */ + } +#ifdef FEAT_MBYTE + mb_c = c; + if (enc_utf8 && (*mb_char2len)(c) > 1) + { + mb_utf8 = TRUE; + u8cc[0] = 0; + c = 0xc0; + } + else + mb_utf8 = FALSE; +#endif + } + if (trailcol != MAXCOL && ptr > line + trailcol && c == ' ') { c = lcs_trail;