canvas is fixed, lets fix autocomplete also

This commit is contained in:
Priec
2025-07-31 22:04:15 +02:00
parent 36690e674a
commit 828a63c30c
2 changed files with 112 additions and 8 deletions

View File

@@ -92,3 +92,93 @@ pub async fn execute<S: CanvasState>(
super::handlers::dispatch_action(action, state, &mut ideal_cursor_column).await 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<CanvasAction> {
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<CanvasAction> {
vec![
Self::InsertChar(' '), // Example char
Self::DeleteBackward,
Self::DeleteForward,
]
}
/// Get all autocomplete-related actions
pub fn autocomplete_actions() -> Vec<CanvasAction> {
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
)
}
}

View File

@@ -1,16 +1,30 @@
// src/lib.rs // src/lib.rs - Updated to conditionally include autocomplete
pub mod canvas; 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 // Re-export the main API for easy access
pub use canvas::actions::{CanvasAction, ActionResult, execute}; pub use canvas::actions::{CanvasAction, ActionResult, execute};
pub use canvas::state::{CanvasState, ActionContext}; 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 #[cfg(feature = "gui")]
pub use dispatcher::{execute_canvas_action, ActionDispatcher}; pub use canvas::theme::CanvasTheme;
// Re-export result type for convenience #[cfg(feature = "gui")]
pub type Result<T> = anyhow::Result<T>; 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;