small software-rendered rust tty
-rw-r--r--src/main.rs9
-rw-r--r--src/render.rs16
-rw-r--r--src/term.rs13
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] => {