From bb5480126fb4417339000f183b0d6787c7cb2b82 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sat, 6 Jan 2024 22:05:37 -0800 Subject: Use a b-tree for the rope. Now it's balanced :D --- src/term.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/term.rs') diff --git a/src/term.rs b/src/term.rs index 8f44b23..9c7e2cc 100644 --- a/src/term.rs +++ b/src/term.rs @@ -1,13 +1,16 @@ use libc::{termios, winsize}; use std::error::Error; -use std::io::{Read, Stdin}; +use std::io::{stdin, stdout, Read, Write}; pub fn size() -> Result> { unsafe { let mut window: winsize = std::mem::zeroed(); let status = libc::ioctl(1, libc::TIOCGWINSZ, &mut window); if status < 0 { - return Err(Box::from(format!("terminal size: ioctl failed with code {}", status))); + return Err(Box::from(format!( + "terminal size: ioctl failed with code {}", + status + ))); } return Ok(window); } @@ -48,11 +51,15 @@ pub struct RawHandle { impl Drop for RawHandle { fn drop(&mut self) { + let _ = write!(stdout(), "\x1b[?7h"); + let _ = stdout().flush(); let _ = set_attr(&self.old); } } pub fn raw() -> Result> { + write!(stdout(), "\x1b[?7l")?; + stdout().flush()?; let old = get_attr()?; set_attr(&make_raw())?; return Ok(RawHandle { old: old }); @@ -69,7 +76,7 @@ pub enum Key { Char(u8), } -pub fn read_key(stdin: &mut Stdin) -> Result> { +pub fn read_key() -> Result> { const CTRL_Q: u8 = 17; const CTRL_S: u8 = 19; const BACKSPACE: u8 = 127; @@ -77,7 +84,7 @@ pub fn read_key(stdin: &mut Stdin) -> Result> { loop { let mut buf = vec![0; 1]; - stdin.read_exact(&mut buf)?; + stdin().read_exact(&mut buf)?; if buf[0] == CTRL_Q { return Ok(Key::CtrlQ); } @@ -92,7 +99,7 @@ pub fn read_key(stdin: &mut Stdin) -> Result> { } // Try to handle an escape sequence. let mut buf = vec![0; 2]; - stdin.read_exact(&mut buf)?; + stdin().read_exact(&mut buf)?; if buf[0] != b'[' { // Unknown escape sequence, just read another key. continue; -- cgit v1.3.1