diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2023-12-27 11:03:14 -0800 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2023-12-27 11:03:14 -0800 |
| commit | 2a2181daaf96d2646a8001b9f138099510d0b34e (patch) | |
| tree | 554dc34eb562d45be197c9a355045fc589979dd5 /src | |
| parent | e884f57e376ee8c62786d197e13d4e5b0dad5520 (diff) | |
| download | editor-2a2181daaf96d2646a8001b9f138099510d0b34e.tar.zst | |
Wait for ctrl-q to exit.
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 35 |
1 files changed, 26 insertions, 9 deletions
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<u8, String> { + 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(()); } |
