changeset 6172:69da1498ce89 v7.4.422

updated for version 7.4.422 Problem: When using conceal with linebreak some text is not displayed correctly. (Gr?ner Gimpel) Solution: Check for conceal mode when using linebreak. (Christian Brabandt)
author Bram Moolenaar <bram@vim.org>
date Fri, 29 Aug 2014 12:08:43 +0200
parents a5a88ec312f3
children 0ecbaf8b09d9
files src/screen.c src/testdir/test_listlbr.in src/testdir/test_listlbr.ok src/version.c
diffstat 4 files changed, 30 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/screen.c
+++ b/src/screen.c
@@ -4514,6 +4514,11 @@ win_line(wp, lnum, startrow, endrow, noc
 			int	i;
 			int	saved_nextra = n_extra;
 
+#ifdef FEAT_CONCEAL
+			if (is_concealing && vcol_off > 0)
+			    /* there are characters to conceal */
+			    tab_len += vcol_off;
+#endif
 			/* if n_extra > 0, it gives the number of chars, to
 			 * use for a tab, else we need to calculate the width
 			 * for a tab */
@@ -4539,6 +4544,12 @@ win_line(wp, lnum, startrow, endrow, noc
 #endif
 			}
 			p_extra = p_extra_free;
+#ifdef FEAT_CONCEAL
+			/* n_extra will be increased by FIX_FOX_BOGUSCOLS
+			 * macro below, so need to adjust for that here */
+			if (is_concealing && vcol_off > 0)
+			    n_extra -= vcol_off;
+#endif
 		    }
 #endif
 #ifdef FEAT_CONCEAL
--- a/src/testdir/test_listlbr.in
+++ b/src/testdir/test_listlbr.in
@@ -46,6 +46,16 @@ STARTTEST
 :redraw!
 :let line=ScreenChar(winwidth(0))
 :call DoRecordScreen()
+:let line="_S_\t bla"
+:$put =line
+:$
+:norm! zt
+:let g:test ="Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)"
+:set cpo&vim list linebreak conceallevel=2 concealcursor=nv listchars=tab:ab
+:syn match ConcealVar contained /_/ conceal
+:syn match All /.*/ contains=ConcealVar
+:let line=ScreenChar(winwidth(0))
+:call DoRecordScreen()
 :%w! test.out
 :qa!
 ENDTEST
--- a/src/testdir/test_listlbr.ok
+++ b/src/testdir/test_listlbr.ok
@@ -25,3 +25,10 @@ 1
 +aaaaaaaaaaaaaaaaaa 
 ~                   
 ~                   
+_S_	 bla
+
+Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)
+Sabbbbbb bla        
+~                   
+~                   
+~                   
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    422,
+/**/
     421,
 /**/
     420,