small software-rendered rust tty
bg colors
| -rw-r--r-- | src/main.rs | 9 | ||||
| -rw-r--r-- | src/render.rs | 16 | ||||
| -rw-r--r-- | src/term.rs | 13 |
3 files changed, 33 insertions, 5 deletions
diff --git a/src/main.rs b/src/main.rs index 33f8a0e..47055e0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,7 @@ use std::os::fd::{AsFd, AsRawFd, BorrowedFd, OwnedFd}; use std::process::{Command, exit}; use std::sync::mpsc; use std::thread::sleep; -use std::time::Duration; +use std::time::{Duration, Instant}; pub mod colors; @@ -132,6 +132,13 @@ fn main() -> Result<()> { Comma => b",", Key0 | Key1 | Key2 | Key3 | Key4 | Key5 | Key6 | Key7 + | Key8 | Key9 + if shifting => + { + &[b")!@#$%^&*("[k as usize]] + } + + Key0 | Key1 | Key2 | Key3 | Key4 | Key5 | Key6 | Key7 | Key8 | Key9 => &[k as u8 + b'0'], _ => &[k as u8 - 10 + b'a'], diff --git a/src/render.rs b/src/render.rs index 64a2f2a..1d7f3b9 100644 --- a/src/render.rs +++ b/src/render.rs @@ -47,10 +47,18 @@ pub fn render( .flat_map(|&x| cell.style.color.join(x)) .collect::<Vec<u8>>(), ); - // let mut o = - // Image::build(x.placement.width, x.placement.height) - // .fill(cell.style.bg); - // o.overlay_blended(&item); + if cell.style.bg != colors::BACKGROUND { + let cell = Image::<_, 4>::build( + sz.ceil() as u32, + (ppem * 1.25).ceil() as u32, + ) + .fill(cell.style.bg.join(255)); + i.as_mut().overlay_at( + &cell, + 4 + (j as f32 * sz) as u32, + (k as f32 * (ppem * 1.25)) as u32 - 20, + ); + } i.as_mut().overlay_blended_at( &item.as_ref(), diff --git a/src/term.rs b/src/term.rs index 482b0c5..6c0c453 100644 --- a/src/term.rs +++ b/src/term.rs @@ -79,14 +79,27 @@ impl Terminal { self.style.color = colors::FOUR[x as usize - 30] } Value(39) => self.style.color = colors::FOREGROUND, + Value(x @ (40..=47)) => { + self.style.bg = colors::FOUR[x as usize - 40] + } + Value(49) => self.style.bg = colors::BACKGROUND, Value(x @ (90..=97)) => { self.style.color = colors::FOUR[x as usize - 72] } + Value(x @ (100..=107)) => { + self.style.bg = colors::FOUR[x as usize - 92] + } _ => {} }, Control(ControlFunction { start: b'[', params, + end: b'C', + .. + }) if params == &[Default] => self.cursor.0 += 1, + Control(ControlFunction { + start: b'[', + params, end: b'K', .. }) if params == &[Default] => { |