mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
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:
parent
a7b98246b3
commit
9b4cbd5cdc
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -434,7 +434,7 @@ static const int included_patches[] = {
|
|||||||
// 521,
|
// 521,
|
||||||
// 520,
|
// 520,
|
||||||
// 519,
|
// 519,
|
||||||
// 518,
|
518,
|
||||||
// 517,
|
// 517,
|
||||||
// 516,
|
// 516,
|
||||||
// 515,
|
// 515,
|
||||||
|
Loading…
Reference in New Issue
Block a user