small software-rendered rust tty
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs63
1 files changed, 35 insertions, 28 deletions
diff --git a/src/main.rs b/src/main.rs
index 5a110f0..7d383e7 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -92,35 +92,42 @@ fn main() -> Result<()> {
use Key::*;
let mut shifting = false;
while let Ok((k, s)) = krx.recv() {
- if s == true {
- if k == LeftShift || k == RightShift {
- shifting = true;
- continue;
- }
- let x = match k {
- Enter => b"\n",
- Space => b" ",
- Period => b".",
- Slash => b"/",
- Backslash => b"\\",
- Backspace => b"",
- LeftBracket => b"[",
- RightBracket => b"]",
- Semicolon if shifting => b":",
- Semicolon => b";",
- Comma => b",",
-
- Key0 | Key1 | Key2 | Key3 | Key4 | Key5 | Key6
- | Key7 | Key8 | Key9 => &[k as u8 + b'0'],
-
- _ => &[k as u8 - 10 + b'a'],
- };
- write(pty1.as_fd(), x).unwrap();
- } else {
+ if !s {
if k == LeftShift || k == RightShift {
shifting = false;
}
+ continue;
}
+
+ let x = match k {
+ LeftSuper | RightSuper => continue,
+ LeftShift | RightShift => {
+ shifting = true;
+ continue;
+ }
+ Enter => b"\n",
+ Space => b" ",
+ Period => b".",
+ Slash => b"/",
+ Backslash => b"\\",
+ Backspace => b"",
+ Equal if shifting => b"+",
+ Equal => b"=",
+ Minus if shifting => b"_",
+ Minus => b"-",
+ LeftBracket if shifting => b"{",
+ LeftBracket => b"[",
+ RightBracket => b"]",
+ Semicolon if shifting => b":",
+ Semicolon => b";",
+ Comma => b",",
+
+ Key0 | Key1 | Key2 | Key3 | Key4 | Key5 | Key6 | Key7
+ | Key8 | Key9 => &[k as u8 + b'0'],
+
+ _ => &[k as u8 - 10 + b'a'],
+ };
+ write(pty1.as_fd(), x).unwrap();
}
});
@@ -142,9 +149,9 @@ fn main() -> Result<()> {
sleep(Duration::from_millis(100));
w.update();
- let ppem = 18.0;
+ let ppem = 20.0;
let (fw, fh) = render::dims(&FONT, ppem);
- let cols = (w.get_size().0 as f32 / fw).floor() as u16;
+ let cols = (w.get_size().0 as f32 / fw).floor() as u16 + 1;
let rows = (w.get_size().1 as f32 / fh).floor() as u16;
dbg!(rows, cols);
let mut t = Terminal {
@@ -183,7 +190,7 @@ fn main() -> Result<()> {
fn tparse() {
println!("-------------------");
let mut x = TerminalInputParser::new();
- for c in "\x1b[32m greninator \x1b[0m".as_bytes() {
+ for c in "\x1b[32;1m greninator \x1b[0m".as_bytes() {
use ctlfun::TerminalInput::*;
match x.parse_byte(*c) {
Char(x) => {