use std::io::Write; use crate::cursor::*; pub struct LineBuf { pre: Vec, post: Vec, } #[allow(unused)] impl LineBuf { pub fn new() -> Self { Self { pre: Vec::new(), post: Vec::new(), } } pub fn del_left(&mut self) -> Option { self.pre.pop() } pub fn del_right(&mut self) -> Option { self.post.pop() } pub fn left(&mut self) -> bool { if let Some(byte) = self.del_left() { self.post.push(byte); true } else { false } } pub fn right(&mut self) -> bool { if let Some(byte) = self.del_right() { self.pre.push(byte); true } else { false } } pub fn add(&mut self, chr: u8) { self.pre.push(chr); } /// returns the whole contents of the buffer, and empties it in the process pub fn dump(&mut self) -> Vec { while self.right() {} let mut buf = Vec::new(); core::mem::swap(&mut self.pre, &mut buf); buf } /// TODO: kinda ugly that this is here pub fn display_post(&self) { for &x in self.post.iter().rev() { std::io::stdout().write_all(&[x]).unwrap(); } move_cursor(Direction::Left, self.post.len()); std::io::stdout().flush().unwrap(); } }