vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit f10e25b5cbcc91974284c4cf8c98e03722b4b5ee
parent ecb6a61690ba58ef2ee5048e70fd9b311442855b
Author: Gennadiy Volkov <git@gennadiy.33mail.com>
Date:   Sun,  8 Mar 2020 19:55:17 +1100

color-column: Don't change fg/bg if not set explicitly

eg. if your long line is a comment with green fg, and you set your
column color bg red while not specifying the fg, then the result is
green fg on red bg.

Prior to this change the result would be default fg on red bg, thus
one char in the long line of green text would look odd/wrong.

Of course if you do explicitly set the column color fg to default in your
theme then the result will not be what you expect - ideally we need
an UNSPECIFIED color type instead of relying on DEFAULT.

Diffstat:
Mui-terminal-curses.c | 4++++
Mui-terminal-vt100.c | 4++++
Mui.h | 2++
Mvis.c | 7++++++-
4 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/ui-terminal-curses.c b/ui-terminal-curses.c @@ -289,3 +289,7 @@ static void ui_curses_free(UiTerm *term) { ui_curses_suspend(term); endwin(); } + +bool is_default_color(CellColor c) { + return c == CELL_COLOR_DEFAULT; +} diff --git a/ui-terminal-vt100.c b/ui-terminal-vt100.c @@ -215,3 +215,7 @@ static void ui_vt100_free(UiTerm *tui) { ui_vt100_suspend(tui); buffer_release(&vtui->buf); } + +bool is_default_color(CellColor c) { + return c.index == ((CellColor) CELL_COLOR_DEFAULT).index; +} diff --git a/ui.h b/ui.h @@ -115,4 +115,6 @@ struct UiWin { int (*window_height)(UiWin*); }; +bool is_default_color(CellColor c); + #endif diff --git a/vis.c b/vis.c @@ -27,6 +27,8 @@ #include "util.h" #include "vis-core.h" #include "sam.h" +#include "ui.h" + static void macro_replay(Vis *vis, const Macro *macro); static void macro_replay_internal(Vis *vis, const Macro *macro); @@ -294,7 +296,10 @@ static void window_draw_colorcolumn(Win *win) { /* This screen line contains the cell we want to highlight */ if (cc <= line_cols + width) { - l->cells[(cc - 1) - line_cols].style = style; + CellStyle *orig = &l->cells[cc - 1 - line_cols].style; + orig->attr = style.attr; + orig->fg = is_default_color(style.fg) ? orig->fg : style.fg; + orig->bg = is_default_color(style.bg) ? orig->bg : style.bg; line_cc_set = true; } else { line_cols += width;