diff options
Diffstat (limited to 'makima/src/daemon/tui/mod.rs')
| -rw-r--r-- | makima/src/daemon/tui/mod.rs | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/makima/src/daemon/tui/mod.rs b/makima/src/daemon/tui/mod.rs deleted file mode 100644 index e52b12a..0000000 --- a/makima/src/daemon/tui/mod.rs +++ /dev/null @@ -1,98 +0,0 @@ -//! TUI module for interactive browsing. -//! -//! This module provides an interactive Terminal User Interface (TUI) for -//! browsing and managing tasks, contracts, and files in the makima system. -//! -//! # Features -//! -//! - **Fuzzy Search**: Real-time filtering with the SkimMatcherV2 algorithm -//! - **Keyboard Navigation**: Vim-style keybindings (j/k) and arrow keys -//! - **Preview Pane**: Side-by-side view of item details -//! - **Multiple Views**: Browse tasks, contracts, or files - -pub mod app; -pub mod event; -pub mod fuzzy; -pub mod ui; -pub mod ws_client; - -pub use app::{App, ListItem, ViewType, ViewState, InputMode, Action, OutputBuffer, OutputLine, OutputMessageType, WsConnectionState, CreateContractState, CreateFormField, RepositorySuggestion}; -pub use ws_client::{TuiWsClient, WsCommand, WsEvent, TaskOutputEvent}; -pub use fuzzy::FuzzyMatcher; - -use std::io; -use crossterm::{ - event::{DisableMouseCapture, EnableMouseCapture}, - execute, - terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, -}; -use ratatui::prelude::*; -use ratatui::backend::CrosstermBackend; - -pub type Terminal = ratatui::Terminal<CrosstermBackend<io::Stdout>>; - -/// Run the TUI application -pub fn run(mut app: App) -> Result<Option<String>, Box<dyn std::error::Error>> { - // Setup terminal - enable_raw_mode()?; - let mut stdout = io::stdout(); - execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; - let backend = CrosstermBackend::new(stdout); - let mut terminal = ratatui::Terminal::new(backend)?; - - // Run the main loop - let result = run_app(&mut terminal, &mut app); - - // Cleanup terminal - disable_raw_mode()?; - execute!( - terminal.backend_mut(), - LeaveAlternateScreen, - DisableMouseCapture - )?; - terminal.show_cursor()?; - - result -} - -fn run_app( - terminal: &mut Terminal, - app: &mut App, -) -> Result<Option<String>, Box<dyn std::error::Error>> { - use crossterm::event::Event; - use std::time::Duration; - - loop { - terminal.draw(|f| ui::render(f, app))?; - - // Poll for events with 100ms timeout - if let Some(evt) = event::poll_event(Duration::from_millis(100))? { - if let Event::Key(key) = evt { - let action = event::handle_key_event(app, key); - match action { - Action::Quit => break, - Action::OutputPath(path) => return Ok(Some(path)), - Action::None => {} - _ => { - let result = app.handle_action(action); - // Check if handle_action returned a special action - if let Action::OutputPath(path) = result { - return Ok(Some(path)); - } - } - } - } - } - - if app.should_quit { - break; - } - } - - Ok(None) -} - -/// Print a path to stdout (for cd integration) -pub fn print_path(path: &str) { - println!("{}", path); -} |
