aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2023-12-27 11:03:14 -0800
committerRose Hogenson <rosehogenson@posteo.net>2023-12-27 11:03:14 -0800
commit2a2181daaf96d2646a8001b9f138099510d0b34e (patch)
tree554dc34eb562d45be197c9a355045fc589979dd5 /src/main.rs
parente884f57e376ee8c62786d197e13d4e5b0dad5520 (diff)
downloadeditor-2a2181daaf96d2646a8001b9f138099510d0b34e.tar.zst
Wait for ctrl-q to exit.
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs35
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(());
}