commit ad0b0c5db298e8f8243c61d655fc23d44ee92506 Author: Timothy J. Warren Date: Fri Jan 22 19:36:11 2021 -0500 First commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..844a12f --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "hecto" +version = "0.1.0" +authors = ["Timothy J. Warren "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +termion = "1" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..380325d --- /dev/null +++ b/src/main.rs @@ -0,0 +1,34 @@ +use std::io::{self, stdout, Read}; +use termion::raw::IntoRawMode; + +fn to_ctrl_byte(c: char) -> u8 { + let byte = c as u8; + byte & 0b0001_1111 +} + +fn die(e: std::io::Error) { + panic!(e); +} + +fn main() { + let _stdout = stdout().into_raw_mode().unwrap(); + + for b in io::stdin().bytes() { + match b { + Ok(b) => { + let b = b.unwrap(); + let c = b as char; + if c.is_control() { + println!("{:?} \r", b); + } else { + println!("{:?} ({})\r", b, c); + } + + if b == to_ctrl_byte('q') { + break; + } + } + Err(err) => die(err), + } + } +}