diff options
author | Bram Moolenaar <Bram@vim.org> | 2015-02-17 17:26:10 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2015-02-17 17:26:10 +0100 |
commit | 8fc6bc71266e342d339c851b3ee472357f917597 (patch) | |
tree | 46e4320feaeea87b455b948953f4dba627f3fdd2 /src | |
parent | 46538ee46cb04ed47c546d92583d6eb023e51b32 (diff) |
updated for version 7.4.639v7.4.639
Problem: Combination of linebreak and conceal doesn't work well.
Solution: Fix the display problems. (Christian Brabandt)
Diffstat (limited to 'src')
-rw-r--r-- | src/screen.c | 33 | ||||
-rw-r--r-- | src/testdir/test88.in | 11 | ||||
-rw-r--r-- | src/testdir/test88.ok | 5 | ||||
-rw-r--r-- | src/testdir/test_listlbr_utf8.in | 35 | ||||
-rw-r--r-- | src/testdir/test_listlbr_utf8.ok | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 80 insertions, 14 deletions
diff --git a/src/screen.c b/src/screen.c index f735552b04..6816503871 100644 --- a/src/screen.c +++ b/src/screen.c @@ -4571,7 +4571,7 @@ win_line(wp, lnum, startrow, endrow, nochange) 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, nochange) #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 */ diff --git a/src/testdir/test88.in b/src/testdir/test88.in index c2e6a752fa..9e43f703e9 100644 --- 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) diff --git a/src/testdir/test88.ok b/src/testdir/test88.ok index e29698b7bd..12949f274a 100644 --- a/src/testdir/test88.ok +++ b/src/testdir/test88.ok @@ -22,3 +22,8 @@ end: 9:25 9:26 9:26 +9:1 +9:9 +9:17 +9:25 +9:26 diff --git a/src/testdir/test_listlbr_utf8.in b/src/testdir/test_listlbr_utf8.in index bb6350ddec..7448142a6d 100644 --- 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 diff --git a/src/testdir/test_listlbr_utf8.ok b/src/testdir/test_listlbr_utf8.ok index b90e696972..5bd35bdecc 100644 --- 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 concealing #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! diff --git a/src/version.c b/src/version.c index a1f5b66266..e92064400f 100644 --- 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 */ /**/ + 639, +/**/ 638, /**/ 637, |