syntax: 'cursorline': low priority #6380

This commit is contained in:
Justin M. Keyes 2017-10-07 16:06:46 +02:00
parent 7a832c312f
commit d1874ab282
3 changed files with 26 additions and 26 deletions

View File

@ -281,8 +281,8 @@ other arguments if used).
|input()| and |inputdialog()| support user-defined cmdline highlighting. |input()| and |inputdialog()| support user-defined cmdline highlighting.
Highlight groups: Highlight groups:
|hl-ColorColumn|, |hl-CursorColumn| are lower priority than most other |hl-ColorColumn|, |hl-CursorColumn|, |hl-CursorLine| are lower priority than
groups (overridden by) most other highlight groups.
============================================================================== ==============================================================================
5. Missing legacy features *nvim-features-missing* 5. Missing legacy features *nvim-features-missing*

View File

@ -2202,6 +2202,7 @@ win_line (
colnr_T trailcol = MAXCOL; /* start of trailing spaces */ colnr_T trailcol = MAXCOL; /* start of trailing spaces */
int need_showbreak = false; // overlong line, skip first x chars int need_showbreak = false; // overlong line, skip first x chars
int line_attr = 0; // attribute for the whole line int line_attr = 0; // attribute for the whole line
int line_attr_low_priority = 0; // current line, lowest priority
matchitem_T *cur; // points to the match list matchitem_T *cur; // points to the match list
match_T *shl; // points to search_hl or a match match_T *shl; // points to search_hl or a match
int shl_flag; // flag to indicate whether search_hl int shl_flag; // flag to indicate whether search_hl
@ -2427,10 +2428,17 @@ win_line (
filler_lines = wp->w_topfill; filler_lines = wp->w_topfill;
filler_todo = filler_lines; filler_todo = filler_lines;
/* If this line has a sign with line highlighting set line_attr. */ // 'cursorline' highlighting for the current window. Not when Visual mode is
// active, because it's not clear what is selected then.
if (wp->w_p_cul && lnum == wp->w_cursor.lnum
&& !(wp == curwin && VIsual_active)) {
line_attr_low_priority = win_hl_attr(wp, HLF_CUL);
}
v = buf_getsigntype(wp->w_buffer, lnum, SIGN_LINEHL); v = buf_getsigntype(wp->w_buffer, lnum, SIGN_LINEHL);
if (v != 0) if (v != 0) {
line_attr = sign_get_attr((int)v, TRUE); line_attr = sign_get_attr((int)v, true);
}
// Highlight the current line in the quickfix window. // Highlight the current line in the quickfix window.
if (bt_quickfix(wp->w_buffer) && qf_current_entry(wp) == lnum) { if (bt_quickfix(wp->w_buffer) && qf_current_entry(wp) == lnum) {
@ -2441,7 +2449,7 @@ win_line (
line_attr = hl_combine_attr(wp->w_hl_attr_normal, line_attr); line_attr = hl_combine_attr(wp->w_hl_attr_normal, line_attr);
} }
if (line_attr != 0) { if (line_attr_low_priority || line_attr) {
area_highlighting = true; area_highlighting = true;
} }
@ -2663,20 +2671,6 @@ win_line (
cur = cur->next; cur = cur->next;
} }
/* Cursor line highlighting for 'cursorline' in the current window. Not
* when Visual mode is active, because it's not clear what is selected
* then. */
if (wp->w_p_cul && lnum == wp->w_cursor.lnum
&& !(wp == curwin && VIsual_active)) {
if (line_attr != 0 && !(State & INSERT) && bt_quickfix(wp->w_buffer)
&& qf_current_entry(wp) == lnum) {
line_attr = hl_combine_attr(win_hl_attr(wp, HLF_CUL), line_attr);
} else {
line_attr = win_hl_attr(wp, HLF_CUL);
}
area_highlighting = true;
}
off = (unsigned)(current_ScreenLine - ScreenLines); off = (unsigned)(current_ScreenLine - ScreenLines);
col = 0; col = 0;
if (wp->w_p_rl) { if (wp->w_p_rl) {
@ -3595,7 +3589,9 @@ win_line (
// Display a '$' after the line or highlight an extra // Display a '$' after the line or highlight an extra
// character if the line break is included. // character if the line break is included.
// For a diff line the highlighting continues after the "$". // For a diff line the highlighting continues after the "$".
if (diff_hlf == (hlf_T)0 && line_attr == 0) { if (diff_hlf == (hlf_T)0
&& line_attr == 0
&& line_attr_low_priority == 0) {
// In virtualedit, visual selections may extend beyond end of line. // In virtualedit, visual selections may extend beyond end of line.
if (area_highlighting && virtual_active() if (area_highlighting && virtual_active()
&& tocol != MAXCOL && vcol < tocol) { && tocol != MAXCOL && vcol < tocol) {
@ -3659,7 +3655,7 @@ win_line (
(col < wp->w_width))) { (col < wp->w_width))) {
c = ' '; c = ' ';
ptr--; // put it back at the NUL ptr--; // put it back at the NUL
} else if ((diff_hlf != (hlf_T)0 || line_attr != 0) } else if ((diff_hlf != (hlf_T)0 || line_attr_low_priority || line_attr)
&& (wp->w_p_rl && (wp->w_p_rl
? (col >= 0) ? (col >= 0)
: (col - boguscols < wp->w_width))) { : (col - boguscols < wp->w_width))) {
@ -3671,7 +3667,8 @@ win_line (
did_line_attr++; did_line_attr++;
// don't do search HL for the rest of the line // don't do search HL for the rest of the line
if (line_attr != 0 && char_attr == search_attr && col > 0) { if ((line_attr_low_priority || line_attr)
&& char_attr == search_attr && col > 0) {
char_attr = line_attr; char_attr = line_attr;
} }
if (diff_hlf == HLF_TXD) { if (diff_hlf == HLF_TXD) {
@ -4040,6 +4037,9 @@ win_line (
} }
} }
// Apply `line_attr_low_priority` now, so that everthing can override it.
char_attr = hl_combine_attr(line_attr_low_priority, char_attr);
/* /*
* Store character to be displayed. * Store character to be displayed.
* Skip characters that are left of the screen for 'nowrap'. * Skip characters that are left of the screen for 'nowrap'.

View File

@ -518,7 +518,7 @@ describe("'listchars' highlight", function()
]]) ]])
feed_command('set cursorline') feed_command('set cursorline')
screen:expect([[ screen:expect([[
{2:^>-------.}{1:abcd}{2:.}{1:Lorem}{4:>}| {2:^>-------.}{1:abcd}{2:.}{1:Lorem}{3:>}|
{5:>-------.}abcd{5:*}{4:¬} | {5:>-------.}abcd{5:*}{4:¬} |
{4:¬} | {4:¬} |
{4:~ }| {4:~ }|
@ -526,7 +526,7 @@ describe("'listchars' highlight", function()
]]) ]])
feed('$') feed('$')
screen:expect([[ screen:expect([[
{4:<}{1:r}{2:.}{1:sit}{2:.}{1:ame^t}{3:¬}{1: }| {3:<}{1:r}{2:.}{1:sit}{2:.}{1:ame^t}{3:¬}{1: }|
{4:<} | {4:<} |
{4:<} | {4:<} |
{4:~ }| {4:~ }|
@ -607,7 +607,7 @@ describe("'listchars' highlight", function()
feed('<esc>$') feed('<esc>$')
screen:expect([[ screen:expect([[
{4:<} | {4:<} |
{4:<}{1:r}{2:.}{1:sit}{2:.}{1:ame^t}{3:¬}{1: }| {3:<}{1:r}{2:.}{1:sit}{2:.}{1:ame^t}{3:¬}{1: }|
{4:<} | {4:<} |
{4:~ }| {4:~ }|
| |