mod app;
mod keybindings;
mod modes;
mod menu_app;
mod simple_keys;
pub mod widgets;
pub use app::{TuiApp, TuiAppState, TuiConfig};
pub use keybindings::{KeyAction, KeyHandler};
pub use modes::{EditorMode, Mode};
pub use menu_app::{MenuApp, MenuAppState};
pub use simple_keys::{handle_key, Action};
pub use widgets::{Breadcrumb, ContextBar, HelpPanel, StatusBar, TreeNode, TreeState, TreeWidget};
use anyhow::Result;
use crossterm::{
event::{self, Event},
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::{backend::CrosstermBackend, Terminal};
use std::io;
pub fn init_terminal() -> Result<Terminal<CrosstermBackend<io::Stdout>>> {
enable_raw_mode()?;
let mut stdout = io::stdout();
execute!(stdout, EnterAlternateScreen)?;
let backend = CrosstermBackend::new(stdout);
let terminal = Terminal::new(backend)?;
Ok(terminal)
}
pub fn restore_terminal(mut terminal: Terminal<CrosstermBackend<io::Stdout>>) -> Result<()> {
disable_raw_mode()?;
execute!(
terminal.backend_mut(),
LeaveAlternateScreen,
crossterm::cursor::Show
)?;
println!();
Ok(())
}
pub fn poll_event() -> Result<Option<Event>> {
if event::poll(std::time::Duration::from_millis(100))? {
Ok(Some(event::read()?))
} else {
Ok(None)
}
}