#![allow(dead_code)]
#![allow(unused_variables)]
#![allow(unused_imports)]
#![allow(non_upper_case_globals)]
#![allow(unused_must_use)]
#![allow(unused_mut)]
#![allow(unused_assignments)]
#[macro_use]
pub mod show;
pub mod ask;
pub mod colors;
pub mod divider;
pub mod progress;
pub mod prompt;
pub use colors::*;
#[macro_use]
#[allow(unused_macros)]
#[macro_export]
pub use termo_gen::display;
pub mod tree {
use crate::colors::*;
use std::fmt::Debug;
pub fn vec<T>(v: &Vec<T>)
where
T: Debug,
{
let mut i = 0;
for item in v {
println!(
"{}╭── {}{}{}{}{} ──╮{}",
GREEN, BOLD, YELLOW, i, RESET, GREEN, RESET
);
println!("{:?}", item);
i += 1;
}
}
}
pub use cursor::*;
pub mod cursor {
use crate::colors::*;
use std::fmt::Debug;
pub fn up(n: usize) {
print!("{}[{}A", 27 as char, n);
}
pub fn down(n: usize) {
print!("{}[{}B", 27 as char, n);
}
pub fn right(n: usize) {
print!("{}[{}C", 27 as char, n);
}
pub fn left(n: usize) {
print!("{}[{}D", 27 as char, n);
}
pub fn start() {
print!("{}[H", 27 as char); }
pub fn end() {
print!("{}[F", 27 as char); print!("{}[K", 27 as char); }
pub fn move_to(x: i32, y: i32) {
let (cx, cy) = get_pos();
if x < 0 {
left(x.abs() as usize);
} else if x > 0 {
right(x as usize);
}
if y < 0 {
up(y.abs() as usize);
} else if y > 0 {
down(y as usize);
}
}
pub fn move_to_abs(x: u16, y: u16) {
print!("{}[{};{}H", 27 as char, y + 1, x + 1);
}
pub fn place(x: i32, y: i32, text: impl Into<String>) {
let (cx, cy) = get_pos();
move_to(x, y);
print!("{}", text.into());
move_to_abs(cx, cy);
}
pub fn get_pos() -> (u16, u16) {
let pos = crossterm::cursor::position().unwrap();
(pos.0, pos.1)
}
}