From ad0b0c5db298e8f8243c61d655fc23d44ee92506 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 22 Jan 2021 19:36:11 -0500 Subject: [PATCH] First commit --- .gitignore | 1 + Cargo.toml | 10 ++++++++++ src/main.rs | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 src/main.rs 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), + } + } +}