vim-patch:8.0.0518

Closes #7086

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 vim/vim#1567)

c6cd8409c2
This commit is contained in:
Justin M. Keyes 2017-07-29 01:44:58 +02:00 committed by ckelsel
parent a7b98246b3
commit 9b4cbd5cdc
3 changed files with 45 additions and 21 deletions

View File

@ -1924,10 +1924,14 @@ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T
if (fill_fold >= 0x80) { if (fill_fold >= 0x80) {
ScreenLinesUC[off + col] = fill_fold; ScreenLinesUC[off + col] = fill_fold;
ScreenLinesC[0][off + col] = 0; ScreenLinesC[0][off + col] = 0;
} else ScreenLines[off + col] = 0x80; // avoid storing zero
} else {
ScreenLinesUC[off + col] = 0; ScreenLinesUC[off + col] = 0;
}
col++;
} else {
ScreenLines[off + col++] = fill_fold;
} }
ScreenLines[off + col++] = fill_fold;
} }
if (text != buf) if (text != buf)

View File

@ -3,18 +3,12 @@ if !has('gui_running') && has('unix')
set term=ansi set term=ansi
endif endif
function! s:screenline(lnum, nr) abort source view_util.vim
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() func! Test_display_foldcolumn()
if !has("folding")
return
endif
new new
vnew vnew
vert resize 25 vert resize 25
@ -23,17 +17,43 @@ function! Test_display_foldcolumn()
1put='e more noise blah blah‚ more stuff here' 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) call cursor(2, 1)
norm! zt norm! zt
redraw! let lines=ScreenLines([1,2], winwidth(0))
call assert_equal(expect, s:screenline(1,2)) call assert_equal(expect, lines)
set fdc=2 set fdc=2
redraw! let lines=ScreenLines([1,2], winwidth(0))
let expect = " e more noise blah blah<\n 82> more stuff here \n" let expect = [
call assert_equal(expect, s:screenline(1,2)) \ " e more noise blah blah<",
\ " 82> more stuff here "
\ ]
call assert_equal(expect, lines)
quit! quit!
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

View File

@ -434,7 +434,7 @@ static const int included_patches[] = {
// 521, // 521,
// 520, // 520,
// 519, // 519,
// 518, 518,
// 517, // 517,
// 516, // 516,
// 515, // 515,