vim-patch:7.4.422

Problem:    When using conceal with linebreak some text is not displayed
            correctly. (Grüner Gimpel)
Solution:   Check for conceal mode when using linebreak. (Christian Brabandt)

https://code.google.com/p/vim/source/detail?r=v7-4-422
This commit is contained in:
Scott Prager 2014-10-23 14:18:59 -04:00
parent d11fd1950f
commit 87cf661af6
3 changed files with 28 additions and 0 deletions

View File

@ -3478,6 +3478,11 @@ win_line (
int i; int i;
int saved_nextra = n_extra; int saved_nextra = n_extra;
if (is_concealing && vcol_off > 0) {
// there are characters to conceal
tab_len += vcol_off;
}
/* if n_extra > 0, it gives the number of chars to use for /* if n_extra > 0, it gives the number of chars to use for
* a tab, else we need to calculate the width for a tab */ * a tab, else we need to calculate the width for a tab */
len = (tab_len * mb_char2len(lcs_tab2)); len = (tab_len * mb_char2len(lcs_tab2));
@ -3495,6 +3500,12 @@ win_line (
n_extra += mb_char2len(lcs_tab2) - (saved_nextra > 0 ? 1: 0); n_extra += mb_char2len(lcs_tab2) - (saved_nextra > 0 ? 1: 0);
} }
p_extra = p_extra_free; p_extra = p_extra_free;
// n_extra will be increased by FIX_FOX_BOGUSCOLS
// macro below, so need to adjust for that here
if (is_concealing && vcol_off > 0) {
n_extra -= vcol_off;
}
} }
/* Tab alignment should be identical regardless of /* Tab alignment should be identical regardless of
* 'conceallevel' value. So tab compensates of all * 'conceallevel' value. So tab compensates of all

View File

@ -46,6 +46,16 @@ STARTTEST
:redraw! :redraw!
:let line=ScreenChar(winwidth(0)) :let line=ScreenChar(winwidth(0))
:call DoRecordScreen() :call DoRecordScreen()
:let line="_S_\t bla"
:$put =line
:$
:norm! zt
:let g:test ="Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)"
:set cpo&vim list linebreak conceallevel=2 concealcursor=nv listchars=tab:ab
:syn match ConcealVar contained /_/ conceal
:syn match All /.*/ contains=ConcealVar
:let line=ScreenChar(winwidth(0))
:call DoRecordScreen()
:%w! test.out :%w! test.out
:qa! :qa!
ENDTEST ENDTEST

View File

@ -25,3 +25,10 @@ Test 4: set linebreak with tab and 1 line as long as screen: should break!
+aaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaa
~ ~
~ ~
_S_ bla
Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)
Sabbbbbb bla
~
~
~