summaryrefslogtreecommitdiffstats
path: root/src/screen.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2015-12-17 21:14:58 +0100
committerBram Moolenaar <Bram@vim.org>2015-12-17 21:14:58 +0100
commit9bc01ebb957d2b30d57bd30d7aee6f1df2a336b0 (patch)
tree422fefc0a324804c737b11d02a308a14280f334e /src/screen.c
parent8def26a0f5f5535e9af64e715cb80845fc8ec322 (diff)
patch 7.4.977v7.4.977
Problem: 'linebreak' does not work properly when using "space" in 'listchars'. Solution: (Hirohito Higashi, Christian Brabandt)
Diffstat (limited to 'src/screen.c')
-rw-r--r--src/screen.c77
1 files changed, 41 insertions, 36 deletions
diff --git a/src/screen.c b/src/screen.c
index 581638157c..5610d8a963 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3345,14 +3345,18 @@ win_line(wp, lnum, startrow, endrow, nochange)
}
#endif
- /* find start of trailing whitespace */
- if (wp->w_p_list && lcs_trail)
+ if (wp->w_p_list)
{
- 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 (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, nochange)
#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, nochange)
}
#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;