From 2a2181daaf96d2646a8001b9f138099510d0b34e Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Wed, 27 Dec 2023 11:03:14 -0800 Subject: Wait for ctrl-q to exit. --- src/main.rs | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 25458ed..75a6ebf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,9 +3,25 @@ mod term; use rope::Rope; use std::ffi::{OsStr, OsString}; -use std::io::{Read, Write}; +use std::io::{Read, Stdin, Write}; use std::path::Path; +const CTRL_Q: u8 = 17; + +fn read_key(stdin: &mut Stdin) -> Result { + let mut buf = vec![0; 1]; + match stdin.read(&mut buf) { + Err(err) => { + return Err(format!("read input: {}", err)); + } + Ok(0) => { + return Err(String::from("no input")); + } + _ => (), + } + return Ok(buf[0]); +} + fn edit(file: &OsStr) -> Result<(), String> { let _raw_handle = match term::raw() { Some(h) => h, @@ -36,15 +52,16 @@ fn edit(file: &OsStr) -> Result<(), String> { let _ = stdout.flush(); let mut stdin = std::io::stdin(); - let mut buf = vec![0; 1]; - match stdin.read(&mut buf) { - Err(err) => { - return Err(format!("read input: {}", err)); + loop { + let c = match read_key(&mut stdin) { + Ok(c) => c, + Err(err) => { + return Err(err); + } + }; + if c == CTRL_Q { + break; } - Ok(0) => { - return Err(String::from("no input")); - } - _ => (), } return Ok(()); } -- cgit v1.3.1