]> granicus.if.org Git - vim/commitdiff
patch 8.2.1556: cursorline highlighting always overrules sign highlighting v8.2.1556
authorBram Moolenaar <Bram@vim.org>
Mon, 31 Aug 2020 20:00:05 +0000 (22:00 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 31 Aug 2020 20:00:05 +0000 (22:00 +0200)
Problem:    Cursorline highlighting always overrules sign highlighting.
Solution:   Combine the highlighting, use the priority to decide how.
            (closes #6812)

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 [new file with mode: 0644]
src/testdir/dumps/Test_sign_cursor_6.dump [new file with mode: 0644]
src/testdir/test_signs.vim
src/version.c

index 1e88a62ffa0ddc2afa617cd70bd1f242a77f382c..46cb9b59c3de72c1ebd76c1b50bf7f35b1b9e6f1 100644 (file)
@@ -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 placed is deleted, the sign is moved to the
 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*
 
index 6680b48cce02dbfe6ed961de950884e8100ea30e..832dcf584b71080461d66838c637ea359280fbce 100644 (file)
@@ -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 != ''
index fa2596510a8324d2245e022312d78c4bdce2ca29..2b72de6489250e6c44768aa0262393324d62e0f0 100644 (file)
@@ -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
index 38ebcf5746142797b4ec7d859f0526dbc483e685..528c247b1478466374940deb415a415f9a2bd3fe 100644 (file)
@@ -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)
diff --git a/src/testdir/dumps/Test_sign_cursor_5.dump b/src/testdir/dumps/Test_sign_cursor_5.dump
new file mode 100644 (file)
index 0000000..2f256a5
--- /dev/null
@@ -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| 
diff --git a/src/testdir/dumps/Test_sign_cursor_6.dump b/src/testdir/dumps/Test_sign_cursor_6.dump
new file mode 100644 (file)
index 0000000..efd9042
--- /dev/null
@@ -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| 
index e8508b8d357c27675e254ca73d3f1770df188f85..3ee2b49fa1b5eecc3e6b66cda718c81c8c4d6c60 100644 (file)
@@ -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')
index f5c83beca28391b1e54e2a0bd9730667de372e64..022c90acbf2c3c622574d56f5826d0be909fab49 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1556,
 /**/
     1555,
 /**/