]> granicus.if.org Git - vim/commitdiff
patch 7.4.949 v7.4.949
authorBram Moolenaar <Bram@vim.org>
Thu, 3 Dec 2015 13:29:02 +0000 (14:29 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 3 Dec 2015 13:29:02 +0000 (14:29 +0100)
Problem:    When using 'colorcolumn' and there is a sign with a fullwidth
            character the highlighting is wrong. (Andrew Stewart)
Solution:   Only increment vcol when in the right state. (Christian Brabandt)

src/screen.c
src/testdir/test_listlbr_utf8.in
src/testdir/test_listlbr_utf8.ok
src/version.c

index d80ad6f96e69b3b6a89da5f4c879d27531ec545e..581638157c6a01f6f4317b35f2979752e33e8c3f 100644 (file)
@@ -5422,7 +5422,12 @@ win_line(wp, lnum, startrow, endrow, nochange)
                else
                    /* DBCS: Put second byte in the second screen char. */
                    ScreenLines[off] = mb_c & 0xff;
-               ++vcol;
+               if (draw_state > WL_NR
+#ifdef FEAT_DIFF
+                       && filler_todo <= 0
+#endif
+                       )
+                   ++vcol;
                /* When "tocol" is halfway a character, set it to the end of
                 * the character, otherwise highlighting won't stop. */
                if (tocol == vcol)
index 61bb8a71b38dce9861c52d964774b4925f3ee820..c8bbe103c913fcd38bba697adc00c0dd269939b0 100644 (file)
@@ -2,7 +2,7 @@ Test for linebreak and list option in utf-8 mode
 
 STARTTEST
 :so small.vim
-:if !exists("+linebreak") || !has("conceal") | e! test.ok | w! test.out | qa! | endif
+:if !exists("+linebreak") || !has("conceal") || !has("signs") | e! test.ok | w! test.out | qa! | endif
 :so mbyte.vim
 :if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif
 :10new|:vsp|:vert resize 20
@@ -25,6 +25,7 @@ STARTTEST
 :      $put =g:line
 :      wincmd p
 :endfu
+:"
 :let g:test ="Test 1: set linebreak + set list + fancy listchars"
 :exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
 :redraw!
@@ -45,6 +46,7 @@ STARTTEST
 :redraw!
 :let line=ScreenChar(winwidth(0),4)
 :call DoRecordScreen()
+:"
 :let g:test ="Test 4: set linebreak list listchars and concealing"
 :let c_defines=['#define ABCDE         1','#define ABCDEF              1','#define ABCDEFG             1','#define ABCDEFGH    1', '#define MSG_MODE_FILE                      1','#define MSG_MODE_CONSOLE            2','#define MSG_MODE_FILE_AND_CONSOLE   3','#define MSG_MODE_FILE_THEN_CONSOLE  4']
 :call append('$', c_defines)
@@ -56,6 +58,7 @@ 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)
@@ -74,6 +77,7 @@ STARTTEST
 :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 */')
@@ -92,10 +96,39 @@ GGlGGlGGlGGlGGlGGlGGlGGlGGlGGl
 :   call append('$', "Not all attributes are different")
 :endif
 :set cpo&vim linebreak selection=exclusive
+:"
 :let g:test ="Test 8: set linebreak with visual block mode and v_b_A and selection=exclusive and multibyte char"
 :$put =g:test
 Golong line: \e40afoobar \eaTARGETÃ' at end\e
 :exe "norm! $3B\<C-v>eAx\<Esc>"
+:"
+:let g:test ="Test 9: a multibyte sign and colorcolumn"
+:let attr=[]
+:let attr2=[]
+:$put =''
+:$put ='a b c'
+:$put ='a b c'
+:set list nolinebreak cc=3
+:sign define foo text=ï¼\8b
+:sign place 1 name=foo line=50 buffer=2
+:norm! 2kztj
+:let line1=line('.')
+0GGlGGlGGlGGl
+:let line2=line('.')
+:let attr2=attr
+:let attr=[]
+0GGlGGlGGlGGl
+:redraw!
+:let line=ScreenChar(winwidth(0),3)
+:call DoRecordScreen()
+:call append('$', ['ScreenAttributes for test9:'])
+:call append('$', ["Line: ".line1. " ". string(g:attr),"Line: ".line2. " ". string(g:attr2)])
+:" expected: attr[2] is different because of colorcolumn
+:if attr[0] != attr2[0] || attr[1] != attr2[1] || attr[2] != attr2[2]
+:   call append('$', "Screen attributes are different!")
+:else
+:   call append('$', "Screen attributes are the same!")
+:endif
 :%w! test.out
 :qa!
 ENDTEST
index 25316c7531e8ed612a6f75894345bac9356b546c..490f1a108058506540fa2043350891ab5f90011d 100644 (file)
@@ -46,3 +46,15 @@ ScreenAttributes for test6:
 Attribut 0 and 1 and 3 and 5 are different!
 Test 8: set linebreak with visual block mode and v_b_A and selection=exclusive and multibyte char
 long line: foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar TARGETÃx' at end
+
+a b c
+a b c
+
+Test 9: a multibyte sign and colorcolumn
+  Â¶                                     
+ï¼\8ba b c¶                                
+  a b c¶                                
+ScreenAttributes for test9:
+Line: 50 ['0', '0', '72', '0']
+Line: 51 ['0', '0', '72', '0']
+Screen attributes are the same!
index 306f01c91bb79cd3c3e87fce483e2975eb60356b..90f08e9a891603c82c6defe0d72e07c9361c362e 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    949,
 /**/
     948,
 /**/