more struct building + testing
This commit is contained in:
parent
9a9c14bc0f
commit
09d26ec97e
@ -5,14 +5,14 @@ mod editor;
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let lambda = editor::Editor::new();
|
let lambda = editor::Editor::new();
|
||||||
let _term = terminal::Terminal::new();
|
let mut term = terminal::Terminal::new().unwrap();
|
||||||
loop {
|
loop {
|
||||||
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
|
|
||||||
for line in lambda.buffer.data {
|
for line in lambda.buffer.data {
|
||||||
terminal::Terminal::write(format!("{line}"));
|
terminal::Terminal::write(format!("{line}"));
|
||||||
|
mut term.cursor.move_to(0, 1);
|
||||||
};
|
};
|
||||||
std::thread::sleep(Duration::from_millis(3000));
|
std::thread::sleep(Duration::from_secs(3));
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
terminal::Terminal::exit()
|
terminal::Terminal::exit();
|
||||||
}
|
}
|
||||||
|
@ -1,28 +1,65 @@
|
|||||||
use crossterm::terminal;
|
use crossterm::terminal;
|
||||||
use crossterm::{execute, ErrorKind};
|
use crossterm::{execute, ErrorKind};
|
||||||
use crossterm::style::Print;
|
use crossterm::style::Print;
|
||||||
|
use crossterm::cursor::{CursorShape, MoveTo};
|
||||||
use std::io::{stdout, Write};
|
use std::io::{stdout, Write};
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct Size {
|
pub struct Size {
|
||||||
pub width: usize,
|
pub width: usize,
|
||||||
pub height: usize,
|
pub height: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
pub struct Coords {
|
||||||
|
pub x: usize,
|
||||||
|
pub y: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Coords {
|
||||||
|
pub fn from(x: usize, y: usize) -> Self {
|
||||||
|
Self {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Cursor {
|
||||||
|
pub position: Coords,
|
||||||
|
pub shape: CursorShape,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Cursor {
|
||||||
|
pub fn new() -> Result<Self, ErrorKind> {
|
||||||
|
let cursor = Self {
|
||||||
|
position: Coords::from(0, 0),
|
||||||
|
shape: CursorShape::Block,
|
||||||
|
};
|
||||||
|
Cursor::move_to(&mut cursor, 0, 0);
|
||||||
|
Ok(cursor)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn move_to(&mut self, x: u16, y: u16) {
|
||||||
|
self.position = Coords::from(x as usize, y as usize);
|
||||||
|
execute!(stdout(), MoveTo(x, y)).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Terminal {
|
pub struct Terminal {
|
||||||
pub size: Size,
|
pub size: Size,
|
||||||
|
pub cursor: Cursor,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Terminal {
|
impl Terminal {
|
||||||
pub fn new() -> Result<Self, ErrorKind> {
|
pub fn new() -> Result<Self, ErrorKind> {
|
||||||
let size = terminal::size()?;
|
let size = terminal::size()?;
|
||||||
|
Terminal::clear();
|
||||||
Terminal::enter();
|
Terminal::enter();
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
size: Size {
|
size: Size {
|
||||||
width: size.0 as usize,
|
width: size.0 as usize,
|
||||||
height: size.1 as usize,
|
height: size.1 as usize,
|
||||||
},
|
},
|
||||||
|
cursor: Cursor::new().unwrap(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,6 +76,12 @@ impl Terminal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn write(text: String) {
|
pub fn write(text: String) {
|
||||||
|
// Writes a line to a current cursor position
|
||||||
execute!(stdout(), Print(text)).unwrap();
|
execute!(stdout(), Print(text)).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn clear() {
|
||||||
|
// Clears the terminal screen
|
||||||
|
execute!(stdout(), terminal::Clear(terminal::ClearType::All)).unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user