pub struct Editor {
pub on_submit: Option<Box<dyn FnMut(String) + Send>>,
pub on_change: Option<Box<dyn FnMut(&str)>>,
pub disable_submit: bool,
pub border_color: Style,
pub just_submitted: bool,
pub last_submitted_text: String,
pub autocomplete_active: bool,
/* private fields */
}Fields§
§on_submit: Option<Box<dyn FnMut(String) + Send>>§on_change: Option<Box<dyn FnMut(&str)>>§disable_submit: bool§border_color: Style§just_submitted: boolTrue after submit() is called, reset when checked.
last_submitted_text: StringText that was submitted in the last submit() call, captured before clearing.
autocomplete_active: boolImplementations§
Source§impl Editor
impl Editor
pub fn new(options: EditorOptions) -> Self
pub fn get_text(&self) -> String
pub fn get_lines(&self) -> &[String]
pub fn get_cursor(&self) -> (usize, usize)
Sourcepub fn set_terminal_rows(&mut self, rows: usize)
pub fn set_terminal_rows(&mut self, rows: usize)
Update the terminal height so render can compute max visible lines dynamically (pi: 30% of rows, min 5).
pub fn set_padding_x(&mut self, padding: usize)
pub fn set_autocomplete_max_visible(&mut self, max: usize)
pub fn set_text(&mut self, text: &str)
pub fn add_to_history(&mut self, text: &str)
pub fn insert_text_at_cursor(&mut self, text: &str)
Sourcepub fn set_autocomplete_provider(
&mut self,
provider: Box<dyn AutocompleteProvider>,
)
pub fn set_autocomplete_provider( &mut self, provider: Box<dyn AutocompleteProvider>, )
Set the autocomplete provider (handles slash commands, file paths, etc.).
pub fn set_autocomplete(&mut self, items: Vec<SelectItem>)
pub fn clear_autocomplete(&mut self)
pub fn autocomplete_selected_value(&self) -> Option<String>
pub fn autocomplete_is_empty(&self) -> bool
pub fn try_trigger_autocomplete(&mut self)
Sourcepub fn handle_paste(&mut self, text: &str)
pub fn handle_paste(&mut self, text: &str)
Handle a paste: normalizes line endings, filters non-printable chars, CSI-u decodes control bytes, and for large pastes (>10 lines or >1000 chars) stores the content with a marker like “[paste #1 +123 lines]”. Matches pi’s Editor.handlePaste().
Sourcepub fn expand_paste_markers(&self, text: &str) -> String
pub fn expand_paste_markers(&self, text: &str) -> String
Expand paste markers in text back to their full content.
Sourcepub fn get_expanded_text(&self) -> String
pub fn get_expanded_text(&self) -> String
Get text with paste markers expanded. Use this when you need the full content (e.g., for external editor).
Sourcepub fn is_paste_marker(segment: &str) -> bool
pub fn is_paste_marker(segment: &str) -> bool
Check if a string is a paste marker.
Trait Implementations§
Source§impl Component for Editor
impl Component for Editor
Source§fn render(&mut self, width: usize) -> Vec<String>
fn render(&mut self, width: usize) -> Vec<String>
Render to lines for the given viewport width.
Each returned string MUST NOT exceed
width in visible width.Source§fn handle_input(&mut self, key: &KeyEvent) -> bool
fn handle_input(&mut self, key: &KeyEvent) -> bool
Handle keyboard input. Return
true if consumed.Source§fn handle_paste(&mut self, text: &str)
fn handle_paste(&mut self, text: &str)
Handle a paste event (text from bracketed paste mode).
Default no-op; override to process pasted content.
Source§fn is_focusable(&self) -> bool
fn is_focusable(&self) -> bool
Whether this component wants focus (for IME cursor positioning).
Source§fn render_padded(&mut self, width: usize) -> Vec<String>
fn render_padded(&mut self, width: usize) -> Vec<String>
Render and pad each line to exactly
width visible columns.
Default implementation calls render(width) and pads each line
with trailing spaces if its visible width is less than width.Source§fn invalidate(&mut self)
fn invalidate(&mut self)
Mark this component as needing re-render.
Called when internal state changes (output received, expanded toggled, etc.).
Source§fn is_dirty(&self) -> bool
fn is_dirty(&self) -> bool
Check if this component needs re-render.
Default: false — the Container’s per-child cache tracking determines
whether to re-render. Override to return true for components whose
state can change without explicit invalidation (e.g. ToolExecComponent
receiving streaming output).
Source§fn clear_dirty(&mut self)
fn clear_dirty(&mut self)
Clear dirty flag after successful render.
Source§fn cache_key(&self, _width: usize) -> Option<RenderCacheKey>
fn cache_key(&self, _width: usize) -> Option<RenderCacheKey>
Get the cache key for this component’s current state.
Return None to disable caching (always re-render).
Source§fn get_cached_render(&self) -> Option<&RenderCache>
fn get_cached_render(&self) -> Option<&RenderCache>
Get cached render output, if available and valid.
Source§fn set_cached_render(&mut self, _cache: RenderCache)
fn set_cached_render(&mut self, _cache: RenderCache)
Store render output in cache.
Source§fn set_expanded(&mut self, _expanded: bool)
fn set_expanded(&mut self, _expanded: bool)
Toggle expanded/collapsed state. No-op by default.
Override for components that support expand/collapse (tool results, messages, etc.).
Source§fn set_hide_thinking(&mut self, _hide: bool)
fn set_hide_thinking(&mut self, _hide: bool)
Toggle thinking block visibility. No-op by default.
Override for components that display thinking content (AssistantMessageComponent).
Auto Trait Implementations§
impl !Freeze for Editor
impl !RefUnwindSafe for Editor
impl !Send for Editor
impl !Sync for Editor
impl !UnwindSafe for Editor
impl Unpin for Editor
impl UnsafeUnpin for Editor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more