use crossterm::{
cursor::DisableBlinking,
event::{self, Event, KeyCode, KeyEventKind},
execute,
terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode},
};
use ratatui::{
Terminal,
backend::CrosstermBackend,
layout::{Constraint, Layout},
style::{Color, Style},
text::{Line, Span},
widgets::{Block, Borders, Paragraph},
};
use std::io;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut io = io::stdout();
enable_raw_mode()?;
execute!(io, EnterAlternateScreen, DisableBlinking)?;
let mut terminal = Terminal::new(CrosstermBackend::new(io))?;
let message = Line::from(vec![
Span::styled("Hello, ", Style::default().fg(Color::White)),
Span::styled("glyph!", Style::default().fg(Color::Cyan)),
]);
let paragraph =
Paragraph::new(message).block(Block::default().borders(Borders::ALL).title(" glyph-tui "));
terminal.draw(|frame| {
let area = frame.area();
let layout =
Layout::vertical([Constraint::Fill(1), Constraint::Min(1), Constraint::Fill(1)])
.split(area);
let horizontal = Layout::horizontal([
Constraint::Fill(1),
Constraint::Min(40),
Constraint::Fill(1),
])
.split(layout[1]);
frame.render_widget(paragraph, horizontal[1]);
})?;
loop {
if event::poll(std::time::Duration::from_millis(16))? {
if let Event::Key(key) = event::read()? {
if key.kind == KeyEventKind::Press
&& matches!(key.code, KeyCode::Esc | KeyCode::Char('q'))
{
break;
}
}
}
}
drop(terminal);
disable_raw_mode()?;
execute!(io::stdout(), LeaveAlternateScreen)?;
Ok(())
}