changeset 27067:89bc175b25a5

patch 8.2.4062: match highlighting of tab too short Commit: https://github.com/vim/vim/commit/0bbca540f7377889e2154aa5731f6eeffcb5c0cc Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jan 11 13:14:54 2022 +0000 patch 8.2.4062: match highlighting of tab too short Problem: Match highlighting of tab too short. Solution: Do not stop match highlighting if on a Tab. (Christian Brabandt, closes #9507, closes #9500)
author Bram Moolenaar <Bram@vim.org>
date Tue, 11 Jan 2022 14:15:04 +0100
parents 1c3e9829d324
children 6a4fc2e6e6eb
files src/drawline.c src/testdir/dumps/Test_match_tab_linebreak.dump src/testdir/test_match.vim src/version.c
diffstat 4 files changed, 33 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -2043,9 +2043,10 @@ win_line(
 			if (n_extra < 0)
 			    n_extra = 0;
 		    }
-		    if (on_last_col)
+		    if (on_last_col && c != TAB)
 			// Do not continue search/match highlighting over the
-			// line break.
+			// line break, but for TABs the highlighting should
+			// include the complete width of the character
 			search_attr = 0;
 
 		    if (c == TAB && n_extra + col > wp->w_width)
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_match_tab_linebreak.dump
@@ -0,0 +1,10 @@
+| +0#ffffff16#e000002@6> |i+0#0000000#ffffff0|x| @64
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|1|-|8| @8|A|l@1| 
--- a/src/testdir/test_match.vim
+++ b/src/testdir/test_match.vim
@@ -407,4 +407,22 @@ func Test_matchdelete_redraw()
   bw!
 endfunc
 
+func Test_match_tab_with_linebreak()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+    set linebreak
+    call setline(1, "\tix")
+    call matchadd('ErrorMsg', '\t')
+  END
+  call writefile(lines, 'XscriptMatchTabLinebreak')
+  let buf = RunVimInTerminal('-S XscriptMatchTabLinebreak', #{rows: 10})
+  call TermWait(buf)
+  call VerifyScreenDump(buf, 'Test_match_tab_linebreak', {})
+
+  call StopVimInTerminal(buf)
+  call delete('XscriptMatchTabLinebreak')
+endfunc
+
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4062,
+/**/
     4061,
 /**/
     4060,