Read keys instead of bytes
This commit is contained in:
parent
ad0b0c5db2
commit
a7fe16b007
33
src/main.rs
33
src/main.rs
@ -1,11 +1,8 @@
|
|||||||
use std::io::{self, stdout, Read};
|
use std::io::{self, stdout};
|
||||||
|
use termion::event::Key;
|
||||||
|
use termion::input::TermRead;
|
||||||
use termion::raw::IntoRawMode;
|
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) {
|
fn die(e: std::io::Error) {
|
||||||
panic!(e);
|
panic!(e);
|
||||||
}
|
}
|
||||||
@ -13,20 +10,18 @@ fn die(e: std::io::Error) {
|
|||||||
fn main() {
|
fn main() {
|
||||||
let _stdout = stdout().into_raw_mode().unwrap();
|
let _stdout = stdout().into_raw_mode().unwrap();
|
||||||
|
|
||||||
for b in io::stdin().bytes() {
|
for key in io::stdin().keys() {
|
||||||
match b {
|
match key {
|
||||||
Ok(b) => {
|
Ok(key) => match key {
|
||||||
let b = b.unwrap();
|
Key::Char(c) => {
|
||||||
let c = b as char;
|
if c.is_control() {
|
||||||
if c.is_control() {
|
println!("{:?}\r", c as u8);
|
||||||
println!("{:?} \r", b);
|
} else {
|
||||||
} else {
|
println!("{:?} ({})\r", c as u8, c);
|
||||||
println!("{:?} ({})\r", b, c);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if b == to_ctrl_byte('q') {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
Key::Ctrl('q') => break,
|
||||||
|
_ => println!("{:?}\r", key),
|
||||||
}
|
}
|
||||||
Err(err) => die(err),
|
Err(err) => die(err),
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user