forked from aniani/vim
patch 7.4.949
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)
This commit is contained in:
@@ -5422,7 +5422,12 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
else
|
else
|
||||||
/* DBCS: Put second byte in the second screen char. */
|
/* DBCS: Put second byte in the second screen char. */
|
||||||
ScreenLines[off] = mb_c & 0xff;
|
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
|
/* When "tocol" is halfway a character, set it to the end of
|
||||||
* the character, otherwise highlighting won't stop. */
|
* the character, otherwise highlighting won't stop. */
|
||||||
if (tocol == vcol)
|
if (tocol == vcol)
|
||||||
|
@@ -2,7 +2,7 @@ Test for linebreak and list option in utf-8 mode
|
|||||||
|
|
||||||
STARTTEST
|
STARTTEST
|
||||||
:so small.vim
|
: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
|
:so mbyte.vim
|
||||||
:if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif
|
:if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif
|
||||||
:10new|:vsp|:vert resize 20
|
:10new|:vsp|:vert resize 20
|
||||||
@@ -25,6 +25,7 @@ STARTTEST
|
|||||||
: $put =g:line
|
: $put =g:line
|
||||||
: wincmd p
|
: wincmd p
|
||||||
:endfu
|
:endfu
|
||||||
|
:"
|
||||||
:let g:test ="Test 1: set linebreak + set list + fancy listchars"
|
: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"
|
:exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
|
||||||
:redraw!
|
:redraw!
|
||||||
@@ -45,6 +46,7 @@ STARTTEST
|
|||||||
:redraw!
|
:redraw!
|
||||||
:let line=ScreenChar(winwidth(0),4)
|
:let line=ScreenChar(winwidth(0),4)
|
||||||
:call DoRecordScreen()
|
:call DoRecordScreen()
|
||||||
|
:"
|
||||||
:let g:test ="Test 4: set linebreak list listchars and concealing"
|
: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']
|
: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)
|
:call append('$', c_defines)
|
||||||
@@ -56,6 +58,7 @@ STARTTEST
|
|||||||
:redraw!
|
:redraw!
|
||||||
:let line=ScreenChar(winwidth(0),7)
|
:let line=ScreenChar(winwidth(0),7)
|
||||||
:call DoRecordScreen()
|
:call DoRecordScreen()
|
||||||
|
:"
|
||||||
:let g:test ="Test 5: set linebreak list listchars and concealing part2"
|
:let g:test ="Test 5: set linebreak list listchars and concealing part2"
|
||||||
:let c_defines=['bbeeeeee ; some text']
|
:let c_defines=['bbeeeeee ; some text']
|
||||||
:call append('$', c_defines)
|
:call append('$', c_defines)
|
||||||
@@ -74,6 +77,7 @@ STARTTEST
|
|||||||
:redraw!
|
:redraw!
|
||||||
:let line=ScreenChar(winwidth(0),1)
|
:let line=ScreenChar(winwidth(0),1)
|
||||||
:call DoRecordScreen()
|
:call DoRecordScreen()
|
||||||
|
:"
|
||||||
:let g:test ="Test 6: Screenattributes for comment"
|
:let g:test ="Test 6: Screenattributes for comment"
|
||||||
:$put =g:test
|
:$put =g:test
|
||||||
:call append('$', ' /* and some more */')
|
:call append('$', ' /* and some more */')
|
||||||
@@ -92,10 +96,39 @@ GGlGGlGGlGGlGGlGGlGGlGGlGGlGGl
|
|||||||
: call append('$', "Not all attributes are different")
|
: call append('$', "Not all attributes are different")
|
||||||
:endif
|
:endif
|
||||||
:set cpo&vim linebreak selection=exclusive
|
: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"
|
:let g:test ="Test 8: set linebreak with visual block mode and v_b_A and selection=exclusive and multibyte char"
|
||||||
:$put =g:test
|
:$put =g:test
|
||||||
Golong line: 40afoobar aTARGETÃ' at end
|
Golong line: 40afoobar aTARGETÃ' at end
|
||||||
:exe "norm! $3B\<C-v>eAx\<Esc>"
|
: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=ï¼
|
||||||
|
: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
|
:%w! test.out
|
||||||
:qa!
|
:qa!
|
||||||
ENDTEST
|
ENDTEST
|
||||||
|
@@ -46,3 +46,15 @@ ScreenAttributes for test6:
|
|||||||
Attribut 0 and 1 and 3 and 5 are different!
|
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
|
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
|
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
|
||||||
|
¶
|
||||||
|
ï¼a 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!
|
||||||
|
@@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
949,
|
||||||
/**/
|
/**/
|
||||||
948,
|
948,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user