Mercurial > vim
changeset 19174:d5b793803236 v8.2.0146
patch 8.2.0146: wrong indent when 'showbreak' and 'breakindent' are set
Commit: https://github.com/vim/vim/commit/dfede9a70b3136988a8f262742101ad5cb98f46d
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jan 23 19:59:22 2020 +0100
patch 8.2.0146: wrong indent when 'showbreak' and 'breakindent' are set
Problem: Wrong indent when 'showbreak' and 'breakindent' are set and
'briopt' includes "sbr".
Solution: Reset "need_showbreak" where needed. (Ken Takata, closes #5523)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 23 Jan 2020 20:00:04 +0100 |
parents | df5258538488 |
children | eded52b4666b |
files | src/drawline.c src/testdir/test_breakindent.vim src/version.c |
diffstat | 3 files changed, 32 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/drawline.c +++ b/src/drawline.c @@ -1176,6 +1176,8 @@ win_line( c_final = NUL; n_extra = get_breakindent_win(wp, ml_get_buf(wp->w_buffer, lnum, FALSE)); + if (wp->w_skipcol > 0 && wp->w_p_wrap) + need_showbreak = FALSE; // Correct end of highlighted area for 'breakindent', // required when 'linebreak' is also set. if (tocol == vcol) @@ -1222,7 +1224,8 @@ win_line( c_extra = NUL; c_final = NUL; n_extra = (int)STRLEN(sbr); - need_showbreak = FALSE; + if (wp->w_skipcol == 0 || !wp->w_p_wrap) + need_showbreak = FALSE; vcol_sbr = vcol + MB_CHARLEN(sbr); // Correct end of highlighted area for 'showbreak', // required when 'linebreak' is also set.
--- a/src/testdir/test_breakindent.vim +++ b/src/testdir/test_breakindent.vim @@ -658,3 +658,29 @@ func Test_breakindent18_vartabs() call s:close_windows('set breakindent& list& listchars&') endfunc +func Test_breakindent19_sbr_nextpage() + let s:input = "" + call s:test_windows('setl breakindent briopt=shift:2,sbr,min:18 sbr=>') + call setline(1, repeat('a', 200)) + norm! 1gg + redraw! + let lines = s:screen_lines(1, 20) + let expect = [ + \ "aaaaaaaaaaaaaaaaaaaa", + \ "> aaaaaaaaaaaaaaaaaa", + \ "> aaaaaaaaaaaaaaaaaa", + \ ] + call s:compare_lines(expect, lines) + " Scroll down one screen line + setl scrolloff=5 + norm! 5gj + redraw! + let lines = s:screen_lines(1, 20) + let expect = [ + \ "> aaaaaaaaaaaaaaaaaa", + \ "> aaaaaaaaaaaaaaaaaa", + \ "> aaaaaaaaaaaaaaaaaa", + \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set breakindent& briopt& sbr&') +endfunc