clide/src/tui.rs

82 lines
2.3 KiB
Rust
Raw Normal View History

2026-01-19 09:23:12 -05:00
mod app;
2026-01-17 17:09:42 -05:00
mod component;
2026-01-17 19:21:14 -05:00
mod editor;
mod explorer;
mod logger;
2026-01-24 16:31:36 -05:00
mod menu_bar;
2026-01-17 14:04:02 -05:00
2026-01-17 11:40:40 -05:00
use anyhow::{Context, Result};
2026-01-21 20:28:24 -05:00
use log::{LevelFilter, debug, info};
use ratatui::Terminal;
use ratatui::backend::CrosstermBackend;
use ratatui::crossterm::event::{
DisableBracketedPaste, DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture,
};
use ratatui::crossterm::terminal::{
EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode,
};
use std::env;
use std::io::{Stdout, stdout};
use tui_logger::{
TuiLoggerFile, TuiLoggerLevelOutput, init_logger, set_default_level, set_log_file,
};
pub struct Tui {
terminal: Terminal<CrosstermBackend<Stdout>>,
root_path: std::path::PathBuf,
}
impl Tui {
pub fn new(root_path: std::path::PathBuf) -> Result<Self> {
init_logger(LevelFilter::Trace)?;
set_default_level(LevelFilter::Trace);
debug!(target:"Tui", "Logging initialized");
let mut dir = env::temp_dir();
dir.push("clide.log");
let file_options = TuiLoggerFile::new(
dir.to_str()
.context("Failed to set temp directory for file logging")?,
)
.output_level(Some(TuiLoggerLevelOutput::Abbreviated))
.output_file(false)
.output_separator(':');
set_log_file(file_options);
2026-01-21 20:28:24 -05:00
debug!(target:"Tui", "Logging to file: {dir:?}");
Ok(Self {
terminal: Terminal::new(CrosstermBackend::new(stdout()))?,
root_path,
})
}
pub fn start(self) -> Result<()> {
2026-01-21 20:28:24 -05:00
info!(target:"Tui", "Starting the TUI editor at {:?}", self.root_path);
ratatui::crossterm::execute!(
stdout(),
EnterAlternateScreen,
EnableMouseCapture,
EnableBracketedPaste
)?;
enable_raw_mode()?;
let app_result = app::App::new(self.root_path)?
.run(self.terminal)
.context("Failed to start the TUI editor.");
Self::stop()?;
app_result
}
2025-04-13 12:17:11 -04:00
fn stop() -> Result<()> {
2026-01-21 20:28:24 -05:00
info!(target:"Tui", "Stopping the TUI editor");
disable_raw_mode()?;
ratatui::crossterm::execute!(
stdout(),
LeaveAlternateScreen,
DisableMouseCapture,
DisableBracketedPaste
)?;
Ok(())
}
2026-01-17 11:40:40 -05:00
}