Skip to content

Commit

Permalink
patch 9.0.1067: in diff mode virtual text is highlighted incorrectly
Browse files Browse the repository at this point in the history
Problem:    In diff mode virtual text is highlighted incorrectly. (Rick Howe)
Solution:   Do not use diff attributes for virtual text. (closes vim#11714)
  • Loading branch information
brammool committed Dec 17, 2022
1 parent 67f3094 commit d097af7
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/drawline.c
Original file line number Diff line number Diff line change
Expand Up @@ -2206,11 +2206,13 @@ win_line(
#ifdef FEAT_DIFF
if (wlv.diff_hlf != (hlf_T)0)
{
// When there is extra text (e.g. virtual text) it gets the
// diff highlighting for the line, but not for changed text.
if (wlv.diff_hlf == HLF_CHD && ptr - line >= change_start
&& wlv.n_extra == 0)
wlv.diff_hlf = HLF_TXD; // changed text
if (wlv.diff_hlf == HLF_TXD && ptr - line > change_end
&& wlv.n_extra == 0)
if (wlv.diff_hlf == HLF_TXD && (ptr - line > change_end
|| wlv.n_extra > 0))
wlv.diff_hlf = HLF_CHD; // changed line
wlv.line_attr = HL_ATTR(wlv.diff_hlf);
if (wp->w_p_cul && lnum == wp->w_cursor.lnum
Expand Down
10 changes: 10 additions & 0 deletions src/testdir/dumps/Test_prop_diff_mode_1.dump
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
>0+0&#ffd7ff255@2| @26||+1&#ffffff0|<+0&#ffd7ff255|t|e|x|t|>|9+2&#ff404010|0+0&#ffd7ff255@2| @18
|0@2| @26||+1&#ffffff0|0+0&#ffd7ff255@2|9+2&#ff404010|<+0&#ffd7ff255|t|e|x|t|>| @18
|0@2| @26||+1&#ffffff0|0+0&#ffd7ff255@2|9+2&#ff404010| +0&#ffd7ff255@18|<|t|e|x|t|>
|0@2| @26||+1&#ffffff0|<+0&#ffd7ff255|t|e|x|t|>| @22
|0@2| @26||+1&#ffffff0|9+2&#ff404010|0+0&#ffd7ff255@2| @24
|~+0#4040ff13#ffffff0| @28||+1#0000000&|0+0&#ffd7ff255@2|9+2&#ff404010| +0&#ffd7ff255@24
|~+0#4040ff13#ffffff0| @28||+1#0000000&|<+0&#ffd7ff255|t|e|x|t|>| @22
|~+0#4040ff13#ffffff0| @28||+1#0000000&|~+0#4040ff13&| @27
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @1|1|,|1| @8|A|l@1| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|,|1|-|7| @5|A|l@1
| +0&&@59
10 changes: 10 additions & 0 deletions src/testdir/dumps/Test_prop_diff_mode_2.dump
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
| +0#af5f00255#ffffff0@1|1| |0+0#0000000#ffd7ff255@2| @22||+1&#ffffff0| +0#af5f00255&@1|1| |<+0#0000000#ffd7ff255|t|e|x|t|>>9+2&#ff404010|0+0&#ffd7ff255@2| @14
| +0#af5f00255#ffffff0@1|2| |0+0#0000000#ffd7ff255@2| @22||+1&#ffffff0| +0#af5f00255&@1|2| |0+0#0000000#ffd7ff255@2|9+2&#ff404010|<+0&#ffd7ff255|t|e|x|t|>| @14
| +0#af5f00255#ffffff0@1|3| |0+0#0000000#ffd7ff255@2| @22||+1&#ffffff0| +0#af5f00255&@1|3| |0+0#0000000#ffd7ff255@2|9+2&#ff404010| +0&#ffd7ff255@14|<|t|e|x|t|>
| +0#af5f00255#ffffff0@1|4| |0+0#0000000#ffd7ff255@2| @22||+1&#ffffff0| +0#af5f00255&@3|<+0#0000000#ffd7ff255|t|e|x|t|>| @18
| +0#af5f00255#ffffff0@1|5| |0+0#0000000#ffd7ff255@2| @22||+1&#ffffff0| +0#af5f00255&@1|4| |9+2#0000000#ff404010|0+0&#ffd7ff255@2| @20
|~+0#4040ff13#ffffff0| @28||+1#0000000&| +0#af5f00255&@1|5| |0+0#0000000#ffd7ff255@2|9+2&#ff404010| +0&#ffd7ff255@20
|~+0#4040ff13#ffffff0| @28||+1#0000000&| +0#af5f00255&@3|<+0#0000000#ffd7ff255|t|e|x|t|>| @18
|~+0#4040ff13#ffffff0| @28||+1#0000000&|~+0#4040ff13&| @27
|[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @1|1|,|1| @8|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|,|1|-|7| @5|A|l@1
|:+0&&|w|i|n|d|o| |s|e|t| |n|u|m|b|e|r| @42
30 changes: 30 additions & 0 deletions src/testdir/test_textprop.vim
Original file line number Diff line number Diff line change
Expand Up @@ -3696,5 +3696,35 @@ func Test_text_prop_delete_updates()
call StopVimInTerminal(buf)
endfunc

func Test_text_prop_diff_mode()
CheckRunVimInTerminal

let lines =<< trim END
call setline(1, ['9000', '0009', '0009', '9000', '0009'])

let type = 'test'
call prop_type_add(type, {})
let text = '<text>'
call prop_add(1, 1, {'type': type, 'text': text})
call prop_add(2, 0, {'type': type, 'text': text, 'text_align': 'after'})
call prop_add(3, 0, {'type': type, 'text': text, 'text_align': 'right'})
call prop_add(4, 0, {'type': type, 'text': text, 'text_align': 'above'})
call prop_add(5, 0, {'type': type, 'text': text, 'text_align': 'below'})
set diff

vnew
call setline(1, ['000', '000', '000', '000', '000'])
set diff
END
call writefile(lines, 'XtextPropDiff', 'D')
let buf = RunVimInTerminal('-S XtextPropDiff', #{rows: 10, cols: 60})
call VerifyScreenDump(buf, 'Test_prop_diff_mode_1', {})

call term_sendkeys(buf, ":windo set number\<CR>")
call VerifyScreenDump(buf, 'Test_prop_diff_mode_2', {})

call StopVimInTerminal(buf)
endfunc


" vim: shiftwidth=2 sts=2 expandtab
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1067,
/**/
1066,
/**/
Expand Down

0 comments on commit d097af7

Please sign in to comment.