use owo_colors::{OwoColorize, Stream::Stdout};
pub fn dim(s: &str) -> String {
s.if_supports_color(Stdout, |t| t.dimmed()).to_string()
}
pub fn bold(s: &str) -> String {
s.if_supports_color(Stdout, |t| t.bold()).to_string()
}
pub fn green(s: &str) -> String {
s.if_supports_color(Stdout, |t| t.green()).to_string()
}
pub fn yellow(s: &str) -> String {
s.if_supports_color(Stdout, |t| t.yellow()).to_string()
}
pub fn red(s: &str) -> String {
s.if_supports_color(Stdout, |t| t.red()).to_string()
}
pub fn red_emph(s: &str) -> String {
s.if_supports_color(Stdout, |t| t.on_red()).to_string()
}
pub fn green_emph(s: &str) -> String {
s.if_supports_color(Stdout, |t| t.on_green()).to_string()
}
pub fn is_tty() -> bool {
use std::io::IsTerminal;
std::io::stdout().is_terminal()
}
pub fn term_width() -> Option<usize> {
use terminal_size::{Width, terminal_size};
terminal_size().map(|(Width(w), _)| w as usize)
}
pub fn truncate_left(s: &str, max: usize) -> String {
let n = s.chars().count();
if n <= max {
s.to_string()
} else {
let cut: String = s.chars().skip(n - max + 1).collect();
format!("…{cut}")
}
}