mirror of
https://github.com/vim/vim.git
synced 2025-09-06 21:53:38 -04:00
patch 8.0.0394: tabs are not aligned when scrolling horizontally
Problem: Tabs are not aligned when scrolling horizontally and a Tab doesn't fit. (Axel Bender) Solution: Handle a Tab as a not fitting character. (Christian Brabandt) Also fix that ":redraw" does not scroll horizontally to show the cursor. And fix the test that depended on the old behavior.
This commit is contained in:
parent
98e83b2956
commit
abc39ab642
@ -9812,6 +9812,7 @@ ex_redraw(exarg_T *eap)
|
||||
|
||||
RedrawingDisabled = 0;
|
||||
p_lz = FALSE;
|
||||
validate_cursor();
|
||||
update_topline();
|
||||
update_screen(eap->forceit ? CLEAR : VIsual_active ? INVERTED : 0);
|
||||
#ifdef FEAT_TITLE
|
||||
|
@ -3429,10 +3429,13 @@ win_line(
|
||||
#else
|
||||
--ptr;
|
||||
#endif
|
||||
/* If the character fits on the screen, don't need to skip it.
|
||||
* Except for a TAB. */
|
||||
if ((
|
||||
#ifdef FEAT_MBYTE
|
||||
/* character fits on the screen, don't need to skip it */
|
||||
if ((*mb_ptr2cells)(ptr) >= c && col == 0)
|
||||
(*mb_ptr2cells)(ptr) >= c ||
|
||||
#endif
|
||||
*ptr == TAB) && col == 0)
|
||||
n_skip = v - vcol;
|
||||
}
|
||||
|
||||
|
@ -274,7 +274,6 @@ endfunction
|
||||
|
||||
function Test_breakindent16()
|
||||
" Check that overlong lines are indented correctly.
|
||||
" TODO: currently it does not fail even when the bug is not fixed.
|
||||
let s:input=""
|
||||
call s:test_windows('setl breakindent briopt=min:0 ts=4')
|
||||
call setline(1, "\t".repeat("1234567890", 10))
|
||||
@ -283,16 +282,16 @@ function Test_breakindent16()
|
||||
redraw!
|
||||
let lines=s:screen_lines(1,10)
|
||||
let expect=[
|
||||
\ " 123456",
|
||||
\ " 789012",
|
||||
\ " 345678",
|
||||
\ " 901234",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
let lines=s:screen_lines(4,10)
|
||||
let expect=[
|
||||
\ " 901234",
|
||||
\ " 567890",
|
||||
\ " 123456",
|
||||
\ " 7890 ",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
|
@ -217,3 +217,19 @@ func Test_list_with_listchars()
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfunc
|
||||
|
||||
func Test_list_with_tab_and_skipping_first_chars()
|
||||
call s:test_windows('setl list listchars=tab:>- ts=70 nowrap')
|
||||
call setline(1, ["iiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa"])
|
||||
call cursor(4,64)
|
||||
norm! 2zl
|
||||
let lines = s:screen_lines([1, 4], winwidth(0))
|
||||
let expect = [
|
||||
\ "---------------aaaaa",
|
||||
\ "---------------aaaaa",
|
||||
\ "---------------aaaaa",
|
||||
\ "iiiiiiiii>-----aaaaa",
|
||||
\ ]
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfu
|
||||
|
@ -220,3 +220,37 @@ func Test_multibyte_wrap_and_breakat()
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows('setl brk&vim')
|
||||
endfunc
|
||||
|
||||
func Test_chinese_char_on_wrap_column()
|
||||
call s:test_windows("setl nolbr wrap sbr=")
|
||||
syntax off
|
||||
call setline(1, [
|
||||
\ 'aaaaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'aaaaaaaaaaaaaaaaa中'.
|
||||
\ 'hello'])
|
||||
call cursor(1,1)
|
||||
norm! $
|
||||
redraw!
|
||||
let expect=[
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中aaaaaaaaaaaaaaaaa>',
|
||||
\ '中hello ']
|
||||
let lines = s:screen_lines([1, 10], winwidth(0))
|
||||
call s:compare_lines(expect, lines)
|
||||
call s:close_windows()
|
||||
endfu
|
||||
|
@ -764,6 +764,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
394,
|
||||
/**/
|
||||
393,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user