changeset 22013:125051dff419 v8.2.1556

patch 8.2.1556: cursorline highlighting always overrules sign highlighting Commit: https://github.com/vim/vim/commit/39f7aa3c3124065b50f182b1d2f7ac92a0918656 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Aug 31 22:00:05 2020 +0200 patch 8.2.1556: cursorline highlighting always overrules sign highlighting Problem: Cursorline highlighting always overrules sign highlighting. Solution: Combine the highlighting, use the priority to decide how. (closes #6812)
author Bram Moolenaar <Bram@vim.org>
date Mon, 31 Aug 2020 22:15:09 +0200
parents c0158af27bee
children 023d9e265ff0
files runtime/doc/sign.txt runtime/pack/dist/opt/termdebug/plugin/termdebug.vim src/drawline.c src/structs.h src/testdir/dumps/Test_sign_cursor_5.dump src/testdir/dumps/Test_sign_cursor_6.dump src/testdir/test_signs.vim src/version.c
diffstat 8 files changed, 49 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/sign.txt
+++ b/runtime/doc/sign.txt
@@ -1,4 +1,4 @@
-*sign.txt*      For Vim version 8.2.  Last change: 2019 Nov 30
+*sign.txt*      For Vim version 8.2.  Last change: 2020 Aug 31
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur
@@ -85,6 +85,10 @@ When the line on which the sign is place
 next line (or the last line of the buffer, if there is no next line).  When
 the delete is undone the sign does not move back.
 
+When a sign with line highlighting and 'cursorline' highlighting are both
+present, if the priority is 100 or more then the sign highlighting takes
+precedence, otherwise the 'cursorline' highlighting.
+
 ==============================================================================
 2. Commands					*sign-commands* *:sig* *:sign*
 
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -2,7 +2,7 @@
 "
 " Author: Bram Moolenaar
 " Copyright: Vim license applies, see ":help license"
-" Last Change: 2020 Jul 12
+" Last Change: 2020 Aug 31
 "
 " WORK IN PROGRESS - Only the basics work
 " Note: On MS-Windows you need a recent version of gdb.  The one included with
@@ -937,7 +937,7 @@ func s:HandleCursor(msg)
       endif
       exe lnum
       exe 'sign unplace ' . s:pc_id
-      exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname
+      exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC priority=110 file=' . fname
       setlocal signcolumn=yes
     endif
   elseif !s:stopped || fname != ''
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -909,7 +909,19 @@ win_line(
 	    if (!cul_screenline)
 	    {
 		cul_attr = HL_ATTR(HLF_CUL);
-		line_attr = cul_attr;
+# ifdef FEAT_SIGNS
+		// Combine the 'cursorline' and sign highlighting, depending on
+		// the sign priority.
+		if (sign_present && sattr.sat_linehl > 0)
+		{
+		    if (sattr.sat_priority >= 100)
+			line_attr = hl_combine_attr(cul_attr, line_attr);
+		    else
+			line_attr = hl_combine_attr(line_attr, cul_attr);
+		}
+		else
+# endif
+		    line_attr = cul_attr;
 		wp->w_last_cursorline = wp->w_cursor.lnum;
 	    }
 	    else
--- a/src/structs.h
+++ b/src/structs.h
@@ -817,6 +817,7 @@ typedef struct sign_attrs_S {
     char_u	*sat_text;
     int		sat_texthl;
     int		sat_linehl;
+    int		sat_priority;
 } sign_attrs_T;
 
 #if defined(FEAT_SIGNS) || defined(PROTO)
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_sign_cursor_5.dump
@@ -0,0 +1,6 @@
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@1| @70
+| +0#0000e05#a8a8a8255@1>m+8#0000001#40ff4011@3| @68
+| +0#0000e05#a8a8a8255@1|y+0#0000000#ffffff0@3| @68
+|~+0#4040ff13&| @73
+|:+0#0000000&| @55|2|,|1| @10|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_sign_cursor_6.dump
@@ -0,0 +1,6 @@
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@1| @70
+| +0#0000e05#a8a8a8255@1>m+8#0000001#ffd7ff255@3| @68
+| +0#0000e05#a8a8a8255@1|y+0#0000000#ffffff0@3| @68
+|~+0#4040ff13&| @73
+|:+0#0000000&| @55|2|,|1| @10|A|l@1| 
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -1762,6 +1762,20 @@ func Test_sign_cursor_position()
   call term_sendkeys(buf, ":sign unplace 10\<CR>")
   call VerifyScreenDump(buf, 'Test_sign_cursor_4', {})
 
+  " 'cursorline' highlighting overrules sign
+  call term_sendkeys(buf, ":sign place 12 line=2 name=s2\<CR>")
+  call term_sendkeys(buf, ":set cursorline\<CR>")
+  call term_sendkeys(buf, ":hi CursorLine ctermbg=Green\<CR>")
+  call term_sendkeys(buf, "2G")
+  call term_sendkeys(buf, ":\<CR>")
+  call VerifyScreenDump(buf, 'Test_sign_cursor_5', {})
+
+  " sign highlighting overrules 'cursorline'
+  call term_sendkeys(buf, ":sign unplace 12\<CR>")
+  call term_sendkeys(buf, ":sign place 13 line=2 priority=100 name=s2\<CR>")
+  call term_sendkeys(buf, ":\<CR>")
+  call VerifyScreenDump(buf, 'Test_sign_cursor_6', {})
+
   " clean up
   call StopVimInTerminal(buf)
   call delete('XtestSigncolumn')
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1556,
+/**/
     1555,
 /**/
     1554,