use std::backtrace::Backtrace;
use crossterm::{
execute,
terminal::{LeaveAlternateScreen, disable_raw_mode},
};
use ratatui::{
style::Style,
text::{Line, Span},
};
pub fn style_text(text: &str, default_style: Style, highlight_style: Style) -> Line<'_> {
let mut spans = Vec::new();
let mut is_highlighted = false;
for part in text.split('*') {
if !part.is_empty() {
spans.push(Span::styled(
part,
if is_highlighted {
highlight_style
} else {
default_style
},
));
}
is_highlighted = !is_highlighted;
}
Line::from(spans)
}
pub fn restore_terminal() {
let _ = disable_raw_mode();
let _ = execute!(std::io::stdout(), LeaveAlternateScreen);
}
pub fn install_tui_panic_hook() {
std::panic::set_hook(Box::new(|info| {
restore_terminal();
eprintln!("Application crashed: {info}");
let backtrace = Backtrace::capture();
eprintln!("Stack trace:\n{backtrace}");
}));
}