And here is a patch including a test. The test also improves 
test_display.vim to make use of view_util.vim and to only run when 
folding is enabled.

Best,
Christian
-- 
Ironie heißt fast immer aus einer Not eine Überlegenheit zu machen.
                -- Thomas Mann

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
From d87cb99a385d789c490a87b01b9915732a2707db Mon Sep 17 00:00:00 2001
From: Christian Brabandt <[email protected]>
Date: Wed, 22 Mar 2017 10:39:51 +0100
Subject: [PATCH] Make sure, fold_fill char is correctly written to ScreenLines

Currently, a 32bit integer might be written to an unsigned char and if
the first byte is zero, screen_line() will later on assume the width of
the corresponding utf-character is 2. So make sure, that at least
non-zero is written to the ScreenLines array.

Also improve test_display.vim:

Make use of view_util.vim
only run when folding is actually enabled
Add test for fixing issue #1567
---
 src/screen.c                 |  5 +++-
 src/testdir/test_display.vim | 56 ++++++++++++++++++++++++++++++--------------
 2 files changed, 42 insertions(+), 19 deletions(-)

diff --git a/src/screen.c b/src/screen.c
index 01ab01a40..ba0211bf8 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -2697,12 +2697,15 @@ fold_line(
 	    {
 		ScreenLinesUC[off + col] = fill_fold;
 		ScreenLinesC[0][off + col] = 0;
+                ScreenLines[off + col] = 0x80; /* avoid storing zero */
 	    }
 	    else
 		ScreenLinesUC[off + col] = 0;
+	    col++;
 	}
+	else
 #endif
-	ScreenLines[off + col++] = fill_fold;
+	    ScreenLines[off + col++] = fill_fold;
     }
 
     if (text != buf)
diff --git a/src/testdir/test_display.vim b/src/testdir/test_display.vim
index 609e16c73..4253b5693 100644
--- a/src/testdir/test_display.vim
+++ b/src/testdir/test_display.vim
@@ -3,18 +3,12 @@ if !has('gui_running') && has('unix')
   set term=ansi
 endif
 
-function! s:screenline(lnum, nr) abort
-  let line = []
-  for j in range(a:nr)
-    for c in range(1, winwidth(0))
-        call add(line, nr2char(screenchar(a:lnum+j, c)))
-    endfor
-    call add(line, "\n")
-  endfor
-  return join(line, '')
-endfunction
+source view_util.vim
 
-function! Test_display_foldcolumn()
+func! Test_display_foldcolumn()
+  if !has("folding")
+    return
+  endif
   new
   vnew
   vert resize 25
@@ -23,17 +17,43 @@ function! Test_display_foldcolumn()
 
   1put='e more noise blah blah‚ more stuff here'
 
-  let expect = "e more noise blah blah<82\n> more stuff here        \n"
+  let expect = [
+        \ "e more noise blah blah<82",
+        \ "> more stuff here        "
+        \ ]
 
   call cursor(2, 1)
   norm! zt
-  redraw!
-  call assert_equal(expect, s:screenline(1,2))
+  let lines=ScreenLines([1,2], winwidth(0))
+  call assert_equal(expect, lines)
   set fdc=2
-  redraw!
-  let expect = "  e more noise blah blah<\n  82> more stuff here    \n"
-  call assert_equal(expect, s:screenline(1,2))
+  let lines=ScreenLines([1,2], winwidth(0))
+  let expect = [
+        \ "  e more noise blah blah<",
+        \ "  82> more stuff here    "
+        \ ]
+  call assert_equal(expect, lines)
 
   quit!
   quit!
-endfunction
+endfunc
+
+func! Test_display_foldtext_mbyte()
+  if !has("folding") || !has("multi_byte")
+    return
+  endif
+  call NewWindow(10, 40)
+  call append(0, range(1,20))
+  exe "set foldmethod=manual foldtext=foldtext() fillchars=fold:\u2500,vert:\u2502 fdc=2"
+  call cursor(2, 1)
+  norm! zf13G
+  let lines=ScreenLines([1,3], winwidth(0)+1)
+  let expect=[
+        \ "  1                                     \u2502",
+        \ "+ +-- 12 lines: 2". repeat("\u2500", 23). "\u2502",
+        \ "  14                                    \u2502",
+        \ ]
+  call assert_equal(expect, lines)
+  set foldtext& fillchars& foldmethod& fdc&
+  bw!
+endfunc
-- 
2.11.0

Raspunde prin e-mail lui