Mercurial > vim
changeset 6627:43f444efe6a2 v7.4.639
updated for version 7.4.639
Problem: Combination of linebreak and conceal doesn't work well.
Solution: Fix the display problems. (Christian Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 17 Feb 2015 17:26:10 +0100 |
parents | 7c5728c7f35e |
children | a01e15530232 |
files | src/screen.c src/testdir/test88.in src/testdir/test88.ok src/testdir/test_listlbr_utf8.in src/testdir/test_listlbr_utf8.ok src/version.c |
diffstat | 6 files changed, 80 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -4571,7 +4571,7 @@ win_line(wp, lnum, startrow, endrow, noc int saved_nextra = n_extra; #ifdef FEAT_CONCEAL - if ((is_concealing || boguscols > 0) && vcol_off > 0) + if (vcol_off > 0) /* there are characters to conceal */ tab_len += vcol_off; /* boguscols before FIX_FOR_BOGUSCOLS macro from above @@ -4609,25 +4609,30 @@ win_line(wp, lnum, startrow, endrow, noc #ifdef FEAT_CONCEAL /* n_extra will be increased by FIX_FOX_BOGUSCOLS * macro below, so need to adjust for that here */ - if ((is_concealing || boguscols > 0) && vcol_off > 0) + if (vcol_off > 0) n_extra -= vcol_off; #endif } #endif #ifdef FEAT_CONCEAL - /* Tab alignment should be identical regardless of - * 'conceallevel' value. So tab compensates of all - * previous concealed characters, and thus resets vcol_off - * and boguscols accumulated so far in the line. Note that - * the tab can be longer than 'tabstop' when there - * are concealed characters. */ - FIX_FOR_BOGUSCOLS; - /* Make sure, the highlighting for the tab char will be - * correctly set further below (effectively reverts the - * FIX_FOR_BOGSUCOLS macro */ - if (old_boguscols > 0 && n_extra > tab_len && wp->w_p_list + { + int vc_saved = vcol_off; + + /* Tab alignment should be identical regardless of + * 'conceallevel' value. So tab compensates of all + * previous concealed characters, and thus resets + * vcol_off and boguscols accumulated so far in the + * line. Note that the tab can be longer than + * 'tabstop' when there are concealed characters. */ + FIX_FOR_BOGUSCOLS; + + /* Make sure, the highlighting for the tab char will be + * correctly set further below (effectively reverts the + * FIX_FOR_BOGSUCOLS macro */ + if (n_extra == tab_len + vc_saved && wp->w_p_list && lcs_tab1) - tab_len += n_extra - tab_len; + tab_len += vc_saved; + } #endif #ifdef FEAT_MBYTE mb_utf8 = FALSE; /* don't draw as UTF-8 */
--- a/src/testdir/test88.in +++ b/src/testdir/test88.in @@ -71,6 +71,17 @@ GGk :set lbr :normal $ GGk +:set list listchars=tab:>- +:normal 0 +GGk +:normal W +GGk +:normal W +GGk +:normal W +GGk +:normal $ +GGk :" Display result. :call append('$', 'end:') :call append('$', positions)
--- a/src/testdir/test88.ok +++ b/src/testdir/test88.ok @@ -22,3 +22,8 @@ 9:17 9:25 9:26 9:26 +9:1 +9:9 +9:17 +9:25 +9:26
--- a/src/testdir/test_listlbr_utf8.in +++ b/src/testdir/test_listlbr_utf8.in @@ -56,6 +56,41 @@ STARTTEST :redraw! :let line=ScreenChar(winwidth(0),7) :call DoRecordScreen() +:let g:test ="Test 5: set linebreak list listchars and concealing part2" +:let c_defines=['bbeeeeee ; some text'] +:call append('$', c_defines) +:$ +:norm! zt +:set nowrap ts=2 list linebreak listchars=tab:>- cole=2 concealcursor=n +:syn clear +:syn match meaning /;\s*\zs.*/ +:syn match hasword /^\x\{8}/ contains=word +:syn match word /\<\x\{8}\>/ contains=beginword,endword contained +:syn match beginword /\<\x\x/ contained conceal +:syn match endword /\x\{6}\>/ contained +:hi meaning guibg=blue +:hi beginword guibg=green +:hi endword guibg=red +:redraw! +:let line=ScreenChar(winwidth(0),1) +:call DoRecordScreen() +:let g:test ="Test 6: Screenattributes for comment" +:$put =g:test +:call append('$', ' /* and some more */') +:exe "set ft=c ts=7 linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6" +:syntax on +:hi SpecialKey term=underline ctermfg=red guifg=red +:let attr=[] +:nnoremap <expr> GG ":let attr += ['".screenattr(screenrow(),screencol())."']\n" +:$ +:norm! zt0 +GGlGGlGGlGGlGGlGGlGGlGGlGGlGGl +:call append('$', ['ScreenAttributes for test6:']) +:if attr[0] != attr[1] && attr[1] != attr[3] && attr[3] != attr[5] +: call append('$', "Attribut 0 and 1 and 3 and 5 are different!") +:else +: call append('$', "Not all attributes are different") +:endif :%w! test.out :qa! ENDTEST
--- a/src/testdir/test_listlbr_utf8.ok +++ b/src/testdir/test_listlbr_utf8.ok @@ -36,3 +36,11 @@ Test 4: set linebreak list listchars and #define >_FILE>--------->--->---1 #define >_CONSOLE>---------->---2 #define >_FILE_AND_CONSOLE>---------3 +bbeeeeee ; some text + +Test 5: set linebreak list listchars and concealing part2 +eeeeee>--->-;>some text +Test 6: Screenattributes for comment + /* and some more */ +ScreenAttributes for test6: +Attribut 0 and 1 and 3 and 5 are different!