[PATCH 4/4] Use Set_a_foreground and Set_a_background for colors
[Thread Prev] | [Thread Next]
- Subject: [PATCH 4/4] Use Set_a_foreground and Set_a_background for colors
- From: "S. Gilles" <sgilles@xxxxxxxxxxxx>
- Reply-to: myrddin-dev@xxxxxxxxxxxxxx
- Date: Thu, 26 Oct 2017 21:06:45 -0400
- To: "myrddin-dev" <myrddin-dev@xxxxxxxxxxxxxx>
- Cc: "S. Gilles" <sgilles@xxxxxxxxxxxx>
Based on a more straightforward commit by Ori, but st disliked
default colors with that one.
---
term.myr | 46 ++++++++++++++++++++++++++++++++++++----------
1 file changed, 36 insertions(+), 10 deletions(-)
diff --git a/term.myr b/term.myr
index d524f6a..599178b 100644
--- a/term.myr
+++ b/term.myr
@@ -306,11 +306,19 @@ const degradecolor = {t, c
;;
}
-const applycolor = {sb, c, t
+const applyfg = {t, sb, c
match c
- | `Palette8 v: std.sbfmt(sb, "\x1b[{}{}m", t, v)
- | `Palette256 v: std.sbfmt(sb, "\x1b[{}8;5;{}m", t, v)
- | `RGB (r, g, b): std.sbfmt(sb, "\x1b[{}8;2;{};{};{}m", t, r, g, b)
+ | `Palette8 v: tfmt(t, sb, Set_a_foreground, "\x1b[3%p1%dm", [`Int (v : int)][:])
+ | `Palette256 v: tfmt(t, sb, Set_a_foreground, "\x1b[38;5;%p1%dm", [`Int (v : int)][:])
+ | `RGB (r, g, b): std.sbfmt(sb, "\x1b[38;2;{};{};{}m", r, g, b)
+ ;;
+}
+
+const applybg = {t, sb, c
+ match c
+ | `Palette8 v: tfmt(t, sb, Set_a_background, "\x1b[4%p1%dm", [`Int (v : int)][:])
+ | `Palette256 v: tfmt(t, sb, Set_a_background, "\x1b[48;5;%p1%dm", [`Int (v : int)][:])
+ | `RGB (r, g, b): std.sbfmt(sb, "\x1b[48;2;{};{};{}m", r, g, b)
;;
}
@@ -374,14 +382,32 @@ const flush = {t
attr = t.buf[i].attr;
applyattrs(t, sb, attr)
;;
- if !samecolor(fg, t.buf[i].fg)
- fg = t.buf[i].fg;
- applycolor(sb, fg, 3)
+
+ var samefg = samecolor(fg, t.buf[i].fg)
+ var samebg = samecolor(bg, t.buf[i].bg)
+ if samefg && samebg
+ goto colorsokay
;;
- if !samecolor(bg, t.buf[i].bg)
- bg = t.buf[i].bg;
- applycolor(sb, bg, 4)
+
+ var defaultfg = samecolor(t.buf[i].fg, Default)
+ var defaultbg = samecolor(t.buf[i].bg, Default)
+ var must_reset = false
+ if defaultfg || defaultbg
+ tfmt(t, sb, Orig_pair, "\x1b[39;49m", [][:])
+ must_reset = true
;;
+
+ fg = t.buf[i].fg;
+ if !defaultfg && (must_reset || !samefg)
+ applyfg(t, sb, fg)
+ ;;
+
+ bg = t.buf[i].bg;
+ if !defaultbg && (must_reset || !samebg)
+ applybg(t, sb, bg)
+ ;;
+
+:colorsokay
std.sbputc(sb, t.buf[i].chr)
;;
;;
--
2.14.3
| [PATCH 0/4] Fixes to allow using terminfo for colors on st | "S. Gilles" <sgilles@xxxxxxxxxxxx> |
- Prev by Date: [PATCH 3/4] Allow multi-arm conditionals
- Next by Date: [PATCH] Implement graphemewidth
- Previous by thread: [PATCH 3/4] Allow multi-arm conditionals
- Next by thread: Re: [PATCH 0/4] Fixes to allow using terminfo for colors on st
- Index(es):