small software-rendered rust tty
"8 bit colors"
bendn 9 months ago
parent 05c3861 · commit a959610
-rw-r--r--src/colors.rs259
-rw-r--r--src/term.rs6
2 files changed, 265 insertions, 0 deletions
diff --git a/src/colors.rs b/src/colors.rs
index 683ffea..1a67947 100644
--- a/src/colors.rs
+++ b/src/colors.rs
@@ -20,3 +20,262 @@ pub const FOUR: [[u8; 3]; 16] = [
[149, 230, 203],
[255, 255, 255],
];
+
+pub const EIGHT: [[u8; 3]; 256] = [
+ [0, 0, 0],
+ [128, 0, 0],
+ [0, 128, 0],
+ [128, 128, 0],
+ [0, 0, 128],
+ [128, 0, 128],
+ [0, 128, 128],
+ [192, 192, 192],
+ [128, 128, 128],
+ [255, 0, 0],
+ [0, 255, 0],
+ [255, 255, 0],
+ [0, 0, 255],
+ [255, 0, 255],
+ [0, 255, 255],
+ [255, 255, 255],
+ [0, 0, 0],
+ [0, 0, 95],
+ [0, 0, 135],
+ [0, 0, 175],
+ [0, 0, 215],
+ [0, 0, 255],
+ [0, 95, 0],
+ [0, 95, 95],
+ [0, 95, 135],
+ [0, 95, 175],
+ [0, 95, 215],
+ [0, 95, 255],
+ [0, 135, 0],
+ [0, 135, 95],
+ [0, 135, 135],
+ [0, 135, 175],
+ [0, 135, 215],
+ [0, 135, 255],
+ [0, 175, 0],
+ [0, 175, 95],
+ [0, 175, 135],
+ [0, 175, 175],
+ [0, 175, 215],
+ [0, 175, 255],
+ [0, 215, 0],
+ [0, 215, 95],
+ [0, 215, 135],
+ [0, 215, 175],
+ [0, 215, 215],
+ [0, 215, 255],
+ [0, 255, 0],
+ [0, 255, 95],
+ [0, 255, 135],
+ [0, 255, 175],
+ [0, 255, 215],
+ [0, 255, 255],
+ [95, 0, 0],
+ [95, 0, 95],
+ [95, 0, 135],
+ [95, 0, 175],
+ [95, 0, 215],
+ [95, 0, 255],
+ [95, 95, 0],
+ [95, 95, 95],
+ [95, 95, 135],
+ [95, 95, 175],
+ [95, 95, 215],
+ [95, 95, 255],
+ [95, 135, 0],
+ [95, 135, 95],
+ [95, 135, 135],
+ [95, 135, 175],
+ [95, 135, 215],
+ [95, 135, 255],
+ [95, 175, 0],
+ [95, 175, 95],
+ [95, 175, 135],
+ [95, 175, 175],
+ [95, 175, 215],
+ [95, 175, 255],
+ [95, 215, 0],
+ [95, 215, 95],
+ [95, 215, 135],
+ [95, 215, 175],
+ [95, 215, 215],
+ [95, 215, 255],
+ [95, 255, 0],
+ [95, 255, 95],
+ [95, 255, 135],
+ [95, 255, 175],
+ [95, 255, 215],
+ [95, 255, 255],
+ [135, 0, 0],
+ [135, 0, 95],
+ [135, 0, 135],
+ [135, 0, 175],
+ [135, 0, 215],
+ [135, 0, 255],
+ [135, 95, 0],
+ [135, 95, 95],
+ [135, 95, 135],
+ [135, 95, 175],
+ [135, 95, 215],
+ [135, 95, 255],
+ [135, 135, 0],
+ [135, 135, 95],
+ [135, 135, 135],
+ [135, 135, 175],
+ [135, 135, 215],
+ [135, 135, 255],
+ [135, 175, 0],
+ [135, 175, 95],
+ [135, 175, 135],
+ [135, 175, 175],
+ [135, 175, 215],
+ [135, 175, 255],
+ [135, 215, 0],
+ [135, 215, 95],
+ [135, 215, 135],
+ [135, 215, 175],
+ [135, 215, 215],
+ [135, 215, 255],
+ [135, 255, 0],
+ [135, 255, 95],
+ [135, 255, 135],
+ [135, 255, 175],
+ [135, 255, 215],
+ [135, 255, 255],
+ [175, 0, 0],
+ [175, 0, 95],
+ [175, 0, 135],
+ [175, 0, 175],
+ [175, 0, 215],
+ [175, 0, 255],
+ [175, 95, 0],
+ [175, 95, 95],
+ [175, 95, 135],
+ [175, 95, 175],
+ [175, 95, 215],
+ [175, 95, 255],
+ [175, 135, 0],
+ [175, 135, 95],
+ [175, 135, 135],
+ [175, 135, 175],
+ [175, 135, 215],
+ [175, 135, 255],
+ [175, 175, 0],
+ [175, 175, 95],
+ [175, 175, 135],
+ [175, 175, 175],
+ [175, 175, 215],
+ [175, 175, 255],
+ [175, 215, 0],
+ [175, 215, 95],
+ [175, 215, 135],
+ [175, 215, 175],
+ [175, 215, 215],
+ [175, 215, 255],
+ [175, 255, 0],
+ [175, 255, 95],
+ [175, 255, 135],
+ [175, 255, 175],
+ [175, 255, 215],
+ [175, 255, 255],
+ [215, 0, 0],
+ [215, 0, 95],
+ [215, 0, 135],
+ [215, 0, 175],
+ [215, 0, 215],
+ [215, 0, 255],
+ [215, 95, 0],
+ [215, 95, 95],
+ [215, 95, 135],
+ [215, 95, 175],
+ [215, 95, 215],
+ [215, 95, 255],
+ [215, 135, 0],
+ [215, 135, 95],
+ [215, 135, 135],
+ [215, 135, 175],
+ [215, 135, 215],
+ [215, 135, 255],
+ [215, 175, 0],
+ [215, 175, 95],
+ [215, 175, 135],
+ [215, 175, 175],
+ [215, 175, 215],
+ [215, 175, 255],
+ [215, 215, 0],
+ [215, 215, 95],
+ [215, 215, 135],
+ [215, 215, 175],
+ [215, 215, 215],
+ [215, 215, 255],
+ [215, 255, 0],
+ [215, 255, 95],
+ [215, 255, 135],
+ [215, 255, 175],
+ [215, 255, 215],
+ [215, 255, 255],
+ [255, 0, 0],
+ [255, 0, 95],
+ [255, 0, 135],
+ [255, 0, 175],
+ [255, 0, 215],
+ [255, 0, 255],
+ [255, 95, 0],
+ [255, 95, 95],
+ [255, 95, 135],
+ [255, 95, 175],
+ [255, 95, 215],
+ [255, 95, 255],
+ [255, 135, 0],
+ [255, 135, 95],
+ [255, 135, 135],
+ [255, 135, 175],
+ [255, 135, 215],
+ [255, 135, 255],
+ [255, 175, 0],
+ [255, 175, 95],
+ [255, 175, 135],
+ [255, 175, 175],
+ [255, 175, 215],
+ [255, 175, 255],
+ [255, 215, 0],
+ [255, 215, 95],
+ [255, 215, 135],
+ [255, 215, 175],
+ [255, 215, 215],
+ [255, 215, 255],
+ [255, 255, 0],
+ [255, 255, 95],
+ [255, 255, 135],
+ [255, 255, 175],
+ [255, 255, 215],
+ [255, 255, 255],
+ [8, 8, 8],
+ [18, 18, 18],
+ [28, 28, 28],
+ [38, 38, 38],
+ [48, 48, 48],
+ [58, 58, 58],
+ [68, 68, 68],
+ [78, 78, 78],
+ [88, 88, 88],
+ [96, 96, 96],
+ [102, 102, 102],
+ [118, 118, 118],
+ [128, 128, 128],
+ [138, 138, 138],
+ [148, 148, 148],
+ [158, 158, 158],
+ [168, 168, 168],
+ [178, 178, 178],
+ [188, 188, 188],
+ [198, 198, 198],
+ [208, 208, 208],
+ [218, 218, 218],
+ [228, 228, 228],
+ [238, 238, 238],
+];
diff --git a/src/term.rs b/src/term.rs
index c59df6b..f99a8b8 100644
--- a/src/term.rs
+++ b/src/term.rs
@@ -108,6 +108,12 @@ impl Terminal {
&[Value(x @ (100..=107))] => {
self.style.bg = colors::FOUR[x as usize - 92]
}
+ &[Value(38), Value(5), Value(i)] => {
+ self.style.color = colors::EIGHT[i.min(0xff) as usize];
+ }
+ &[Value(48), Value(5), Value(i)] => {
+ self.style.bg = colors::EIGHT[i.min(0xff) as usize];
+ }
&[Value(38), Value(2), Value(r), Value(g), Value(b)] => {
self.style.color =
[r, g, b].map(|x| x.min(0xff) as u8);