Patch 9.0.1067
Problem: In diff mode virtual text is highlighted incorrectly. (Rick Howe)
Solution: Do not use diff attributes for virtual text. (closes #11714)
Files: src/drawline.c, src/testdir/test_textprop.vim,
src/testdir/dumps/Test_prop_diff_mode_1.dump,
src/testdir/dumps/Test_prop_diff_mode_2.dump
*** ../vim-9.0.1066/src/drawline.c 2022-12-12 13:20:37.622734681 +0000
--- src/drawline.c 2022-12-17 11:23:44.430939892 +0000
***************
*** 2206,2216 ****
#ifdef FEAT_DIFF
if (wlv.diff_hlf != (hlf_T)0)
{
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)
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
--- 2206,2218 ----
#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))
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
*** ../vim-9.0.1066/src/testdir/test_textprop.vim 2022-12-06
14:17:32.178527467 +0000
--- src/testdir/test_textprop.vim 2022-12-17 11:30:22.774879581 +0000
***************
*** 3696,3700 ****
--- 3696,3730 ----
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
*** ../vim-9.0.1066/src/testdir/dumps/Test_prop_diff_mode_1.dump
2022-12-17 11:32:19.114860065 +0000
--- src/testdir/dumps/Test_prop_diff_mode_1.dump 2022-12-17
11:28:19.242883077 +0000
***************
*** 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
*** ../vim-9.0.1066/src/testdir/dumps/Test_prop_diff_mode_2.dump
2022-12-17 11:32:19.118860067 +0000
--- src/testdir/dumps/Test_prop_diff_mode_2.dump 2022-12-17
11:30:33.626878364 +0000
***************
*** 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
*** ../vim-9.0.1066/src/version.c 2022-12-17 10:40:07.171464572 +0000
--- src/version.c 2022-12-17 11:25:58.618859226 +0000
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 1067,
/**/
--
FATHER: Did you kill all those guards?
LAUNCELOT: Yes ... I'm very sorry ...
FATHER: They cost fifty pounds each!
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20221217113337.0EEAB1C0869%40moolenaar.net.