To: vim_dev@googlegroups.com Subject: Patch 8.0.0518 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.0518 Problem: Storing a zero byte from a multi-byte character causes fold text to show up wrong. Solution: Avoid putting zero in ScreenLines. (Christian Brabandt, closes #1567) Files: src/screen.c, src/testdir/test_display.vim *** ../vim-8.0.0517/src/screen.c 2017-03-16 17:23:26.835815782 +0100 --- src/screen.c 2017-03-29 14:35:40.360222232 +0200 *************** *** 2697,2708 **** { ScreenLinesUC[off + col] = fill_fold; ScreenLinesC[0][off + col] = 0; } else ScreenLinesUC[off + col] = 0; } #endif ! ScreenLines[off + col++] = fill_fold; } if (text != buf) --- 2697,2711 ---- { 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; } if (text != buf) *** ../vim-8.0.0517/src/testdir/test_display.vim 2016-12-09 19:51:45.715697789 +0100 --- src/testdir/test_display.vim 2017-03-29 14:35:40.360222232 +0200 *************** *** 3,20 **** 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 ! function! Test_display_foldcolumn() new vnew vert resize 25 --- 3,14 ---- set term=ansi endif ! source view_util.vim ! func! Test_display_foldcolumn() ! if !has("folding") ! return ! endif new vnew vert resize 25 *************** *** 23,39 **** 1put='e more noise blah blah‚ more stuff here' ! let expect = "e more noise blah blah<82\n> more stuff here \n" call cursor(2, 1) norm! zt ! redraw! ! call assert_equal(expect, s:screenline(1,2)) 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)) quit! quit! ! endfunction --- 17,59 ---- 1put='e more noise blah blah‚ more stuff here' ! let expect = [ ! \ "e more noise blah blah<82", ! \ "> more stuff here " ! \ ] call cursor(2, 1) norm! zt ! let lines=ScreenLines([1,2], winwidth(0)) ! call assert_equal(expect, lines) set fdc=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! ! 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 *** ../vim-8.0.0517/src/version.c 2017-03-29 14:19:21.886199149 +0200 --- src/version.c 2017-03-29 14:39:51.506650519 +0200 *************** *** 766,767 **** --- 766,769 ---- { /* Add new patch number below this line */ + /**/ + 518, /**/ -- A computer without Windows is like a fish without a bicycle. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///