aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/drawline.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/drawline.c')
-rw-r--r--src/nvim/drawline.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c
index 01ff207c2b..83aa68194c 100644
--- a/src/nvim/drawline.c
+++ b/src/nvim/drawline.c
@@ -84,12 +84,12 @@ typedef struct {
/// Advance **color_cols
///
/// @return true when there are columns to draw.
-static bool advance_color_col(int vcol, int **color_cols)
+static bool advance_color_col(int vcol, colorcol_T **color_cols)
{
- while (**color_cols >= 0 && vcol > **color_cols) {
+ while ((*color_cols)->col >= 0 && vcol > (*color_cols)->col) {
(*color_cols)++;
}
- return **color_cols >= 0;
+ return (*color_cols)->col >= 0;
}
/// Used when 'cursorlineopt' contains "screenline": compute the margins between
@@ -671,7 +671,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
int save_did_emsg;
int eol_hl_off = 0; // 1 if highlighted char after EOL
bool draw_color_col = false; // highlight colorcolumn
- int *color_cols = NULL; // pointer to according columns array
+ colorcol_T *color_cols = NULL; // pointer to according columns array
bool has_spell = false; // this buffer has spell checking
#define SPWORDLEN 150
char nextline[SPWORDLEN * 2]; // text with start of the next line
@@ -2494,15 +2494,14 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
if (draw_color_col) {
// determine rightmost colorcolumn to possibly draw
- for (i = 0; color_cols[i] >= 0; i++) {
- if (rightmost_vcol < color_cols[i]) {
- rightmost_vcol = color_cols[i];
+ for (i = 0; color_cols[i].col >= 0; i++) {
+ if (rightmost_vcol < color_cols[i].col) {
+ rightmost_vcol = color_cols[i].col;
}
}
}
int cuc_attr = win_hl_attr(wp, HLF_CUC);
- int mc_attr = win_hl_attr(wp, HLF_MC);
int diff_attr = 0;
if (diff_hlf == HLF_TXD) {
@@ -2530,8 +2529,10 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
if (wp->w_p_cuc && VCOL_HLC == (long)wp->w_virtcol) {
col_attr = cuc_attr;
- } else if (draw_color_col && VCOL_HLC == *color_cols) {
- col_attr = mc_attr;
+ } else if (draw_color_col && VCOL_HLC == color_cols->col) {
+ col_attr = color_cols->syn_attr;
+ c = color_cols->ch;
+ schar_from_char(linebuf_char[off], c);
}
col_attr = hl_combine_attr(col_attr, line_attr);
@@ -2618,9 +2619,14 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
&& lnum != wp->w_cursor.lnum) {
vcol_save_attr = char_attr;
char_attr = hl_combine_attr(win_hl_attr(wp, HLF_CUC), char_attr);
- } else if (draw_color_col && VCOL_HLC == *color_cols) {
+ } else if (draw_color_col && VCOL_HLC == color_cols->col) {
vcol_save_attr = char_attr;
- char_attr = hl_combine_attr(win_hl_attr(wp, HLF_MC), char_attr);
+
+ if (color_cols->flags & kColorcolForeground) {
+ char_attr = hl_combine_attr(char_attr, color_cols->syn_attr);
+ } else if (!(color_cols->flags & kColorcolBehind)) {
+ char_attr = hl_combine_attr(color_cols->syn_attr, char_attr);
+ }
}
}