# HG changeset patch # User Bram Moolenaar # Date 1572793204 -3600 # Node ID 3ebb15e3c28dedd379bbb0968e9d5530064fdc7c # Parent c9777bf23eb866a0a596808be27ef285366d9e36 patch 8.1.2245: third character of 'listchars' tab shows in wrong place Commit: https://github.com/vim/vim/commit/2f7b7b1e123d505637d21e0df28eb9e92667479c Author: Bram Moolenaar Date: Sun Nov 3 15:46:48 2019 +0100 patch 8.1.2245: third character of 'listchars' tab shows in wrong place Problem: Third character of 'listchars' tab shows in wrong place when 'breakindent' is set. Solution: Set c_final to NUL. (Naruhiko Nishino, closes #5165) diff --git a/src/drawline.c b/src/drawline.c --- a/src/drawline.c +++ b/src/drawline.c @@ -1173,6 +1173,7 @@ win_line( # endif p_extra = NULL; c_extra = ' '; + c_final = NUL; n_extra = get_breakindent_win(wp, ml_get_buf(wp->w_buffer, lnum, FALSE)); // Correct end of highlighted area for 'breakindent', @@ -1647,9 +1648,8 @@ win_line( #ifdef FEAT_LINEBREAK int c0; #endif + VIM_CLEAR(p_extra_free); - if (p_extra_free != NULL) - VIM_CLEAR(p_extra_free); // Get a character from the line itself. c = *ptr; #ifdef FEAT_LINEBREAK diff --git a/src/testdir/test_breakindent.vim b/src/testdir/test_breakindent.vim --- a/src/testdir/test_breakindent.vim +++ b/src/testdir/test_breakindent.vim @@ -614,3 +614,44 @@ func Test_breakindent16_vartabs() call s:compare_lines(expect, lines) call s:close_windows('set vts&') endfunc + +func Test_breakindent17_vartabs() + if !has("vartabs") + return + endif + let s:input = "" + call s:test_windows('setl breakindent list listchars=tab:<-> showbreak=+++') + call setline(1, "\t" . repeat('a', 63)) + vert resize 30 + norm! 1gg$ + redraw! + let lines = s:screen_lines(1, 30) + let expect = [ + \ "<-->aaaaaaaaaaaaaaaaaaaaaaaaaa", + \ " +++aaaaaaaaaaaaaaaaaaaaaaa", + \ " +++aaaaaaaaaaaaaa ", + \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set breakindent& list& listchars& showbreak&') +endfunc + +func Test_breakindent18_vartabs() + if !has("vartabs") + return + endif + let s:input = "" + call s:test_windows('setl breakindent list listchars=tab:<->') + call setline(1, "\t" . repeat('a', 63)) + vert resize 30 + norm! 1gg$ + redraw! + let lines = s:screen_lines(1, 30) + let expect = [ + \ "<-->aaaaaaaaaaaaaaaaaaaaaaaaaa", + \ " aaaaaaaaaaaaaaaaaaaaaaaaaa", + \ " aaaaaaaaaaa ", + \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set breakindent& list& listchars&') +endfunc + diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2245, +/**/ 2244, /**/ 2243,