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:
| M | ui-terminal-curses.c | | | 4 | ++++ |
| M | ui-terminal-vt100.c | | | 4 | ++++ |
| M | ui.h | | | 2 | ++ |
| M | vis.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;