use std::io::{self, Write};
pub fn flush() {
io::stdout().flush().unwrap();
}
pub fn clear_line() {
print!("\r\x1b[2K");
flush();
}
pub fn clear_lines(i: usize) {
for _ in 0..i {
print!("\r\x1b[2K");
flush();
}
}
#[derive(Default)]
pub struct Visibility;
impl Visibility {
pub fn new() -> Self {
Self
}
pub fn hide_cursor(&self) {
print!("\x1B[?25l");
flush();
}
pub fn show_cursor(&self) {
print!("\x1B[?25h");
flush();
}
}
impl Drop for Visibility {
fn drop(&mut self) {
Visibility::show_cursor(self);
}
}
pub fn move_cursor_down(n: usize) {
if n > 0 {
print!("\x1b[{}B", n);
flush();
}
}
pub fn move_cursor_up(n: usize) {
if n > 0 {
print!("\x1b[{}A", n);
flush();
}
}
pub fn move_cursor_left(n: usize) {
if n > 0 {
print!("\x1b[{}D", n);
flush();
}
}
pub fn move_cursor_right(n: usize) {
if n > 0 {
print!("\x1b[{}C", n);
flush();
}
}
pub fn move_cursor_to(x: usize, y: usize) {
print!("\x1B[{};{}H", y + 1, x + 1);
flush();
}