From 828a63c30c14050e958d9fa59a85e46f03b705df Mon Sep 17 00:00:00 2001 From: Priec Date: Thu, 31 Jul 2025 22:04:15 +0200 Subject: [PATCH] canvas is fixed, lets fix autocomplete also --- canvas/src/canvas/actions/types.rs | 90 ++++++++++++++++++++++++++++++ canvas/src/lib.rs | 30 +++++++--- 2 files changed, 112 insertions(+), 8 deletions(-) diff --git a/canvas/src/canvas/actions/types.rs b/canvas/src/canvas/actions/types.rs index 1a606cb..4f4d163 100644 --- a/canvas/src/canvas/actions/types.rs +++ b/canvas/src/canvas/actions/types.rs @@ -92,3 +92,93 @@ pub async fn execute( super::handlers::dispatch_action(action, state, &mut ideal_cursor_column).await } + +impl CanvasAction { + /// Get a human-readable description of this action + pub fn description(&self) -> &'static str { + match self { + Self::MoveLeft => "move left", + Self::MoveRight => "move right", + Self::MoveUp => "move up", + Self::MoveDown => "move down", + Self::MoveWordNext => "next word", + Self::MoveWordPrev => "previous word", + Self::MoveWordEnd => "word end", + Self::MoveWordEndPrev => "previous word end", + Self::MoveLineStart => "line start", + Self::MoveLineEnd => "line end", + Self::NextField => "next field", + Self::PrevField => "previous field", + Self::MoveFirstLine => "first field", + Self::MoveLastLine => "last field", + Self::InsertChar(c) => "insert character", + Self::DeleteBackward => "delete backward", + Self::DeleteForward => "delete forward", + Self::TriggerAutocomplete => "trigger autocomplete", + Self::SuggestionUp => "suggestion up", + Self::SuggestionDown => "suggestion down", + Self::SelectSuggestion => "select suggestion", + Self::ExitSuggestions => "exit suggestions", + Self::Custom(name) => "custom action", + } + } + + /// Get all movement-related actions + pub fn movement_actions() -> Vec { + vec![ + Self::MoveLeft, + Self::MoveRight, + Self::MoveUp, + Self::MoveDown, + Self::MoveWordNext, + Self::MoveWordPrev, + Self::MoveWordEnd, + Self::MoveWordEndPrev, + Self::MoveLineStart, + Self::MoveLineEnd, + Self::NextField, + Self::PrevField, + Self::MoveFirstLine, + Self::MoveLastLine, + ] + } + + /// Get all editing-related actions + pub fn editing_actions() -> Vec { + vec![ + Self::InsertChar(' '), // Example char + Self::DeleteBackward, + Self::DeleteForward, + ] + } + + /// Get all autocomplete-related actions + pub fn autocomplete_actions() -> Vec { + vec![ + Self::TriggerAutocomplete, + Self::SuggestionUp, + Self::SuggestionDown, + Self::SelectSuggestion, + Self::ExitSuggestions, + ] + } + + /// Check if this action modifies text content + pub fn is_editing_action(&self) -> bool { + matches!(self, + Self::InsertChar(_) | + Self::DeleteBackward | + Self::DeleteForward + ) + } + + /// Check if this action moves the cursor + pub fn is_movement_action(&self) -> bool { + matches!(self, + Self::MoveLeft | Self::MoveRight | Self::MoveUp | Self::MoveDown | + Self::MoveWordNext | Self::MoveWordPrev | Self::MoveWordEnd | Self::MoveWordEndPrev | + Self::MoveLineStart | Self::MoveLineEnd | Self::NextField | Self::PrevField | + Self::MoveFirstLine | Self::MoveLastLine + ) + } +} diff --git a/canvas/src/lib.rs b/canvas/src/lib.rs index 5cd0143..6b2fd59 100644 --- a/canvas/src/lib.rs +++ b/canvas/src/lib.rs @@ -1,16 +1,30 @@ -// src/lib.rs +// src/lib.rs - Updated to conditionally include autocomplete pub mod canvas; -// pub mod autocomplete; -pub mod dispatcher; // Keep for compatibility + +// Only include autocomplete module if feature is enabled +#[cfg(feature = "autocomplete")] +pub mod autocomplete; // Re-export the main API for easy access pub use canvas::actions::{CanvasAction, ActionResult, execute}; pub use canvas::state::{CanvasState, ActionContext}; -pub use canvas::modes::{AppMode, HighlightState, ModeManager}; +pub use canvas::modes::{AppMode, ModeManager, HighlightState}; -// Keep legacy exports for compatibility -pub use dispatcher::{execute_canvas_action, ActionDispatcher}; +#[cfg(feature = "gui")] +pub use canvas::theme::CanvasTheme; -// Re-export result type for convenience -pub type Result = anyhow::Result; +#[cfg(feature = "gui")] +pub use canvas::gui::render_canvas; + +// Re-export autocomplete API if feature is enabled +#[cfg(feature = "autocomplete")] +pub use autocomplete::{ + AutocompleteCanvasState, + AutocompleteState, + SuggestionItem, + actions::execute_with_autocomplete, +}; + +#[cfg(all(feature = "gui", feature = "autocomplete"))] +pub use autocomplete::gui::render_autocomplete_dropdown;