pub struct Editor<'a> {
pub keybinding_mode: KeybindingMode,
pub last_yank: Option<String>,
pub styled_spans: Vec<Vec<(usize, usize, Style)>>,
/* private fields */
}Fields§
§keybinding_mode: KeybindingMode§last_yank: Option<String>Set when the user yanks/cuts; caller drains this to write to OS clipboard.
styled_spans: Vec<Vec<(usize, usize, Style)>>Per-row syntax styling, kept here so the host can do
incremental window updates (see apply_window_spans in
the host). Same (start_byte, end_byte, Style) tuple shape
the textarea used to host. The Buffer-side opaque-id spans are
derived from this on every install.
Implementations§
Source§impl<'a> Editor<'a>
impl<'a> Editor<'a>
pub fn new(keybinding_mode: KeybindingMode) -> Self
Sourcepub fn set_syntax_fold_ranges(&mut self, ranges: Vec<(usize, usize)>)
pub fn set_syntax_fold_ranges(&mut self, ranges: Vec<(usize, usize)>)
Host hook: replace the cached syntax-derived block ranges that
:foldsyntax consumes. the host calls this on every re-parse;
the cost is just a Vec swap.
Sourcepub fn settings(&self) -> &Settings
pub fn settings(&self) -> &Settings
Live settings (read-only). :set mutates these via
Editor::settings_mut.
Sourcepub fn install_syntax_spans(&mut self, spans: Vec<Vec<(usize, usize, Style)>>)
pub fn install_syntax_spans(&mut self, spans: Vec<Vec<(usize, usize, Style)>>)
Install styled syntax spans into both the host-visible cache
(styled_spans) and the buffer’s opaque-id span table. Drops
zero-width runs and clamps end to the line’s char length so
the buffer cache doesn’t see runaway ranges. Replaces the
previous set_syntax_spans + sync_buffer_spans_from_textarea
round-trip.
Sourcepub fn sync_clipboard_register(&mut self, text: String, linewise: bool)
pub fn sync_clipboard_register(&mut self, text: String, linewise: bool)
Host hook: load the OS clipboard’s contents into the "+ / "*
register slot. the host calls this before letting vim consume a
paste so "*p / "+p reflect the live clipboard rather than a
stale snapshot from the last yank.
Sourcepub fn pending_register_is_clipboard(&self) -> bool
pub fn pending_register_is_clipboard(&self) -> bool
True when the user’s pending register selector is + or *.
the host peeks this so it can refresh sync_clipboard_register
only when a clipboard read is actually about to happen.
Sourcepub fn set_yank(&mut self, text: impl Into<String>)
pub fn set_yank(&mut self, text: impl Into<String>)
Replace the unnamed register without touching any other slot.
For host-driven imports (e.g. system clipboard); operator
code uses [record_yank] / [record_delete].
Sourcepub fn intern_style(&mut self, style: Style) -> u32
pub fn intern_style(&mut self, style: Style) -> u32
Intern a ratatui::style::Style and return the opaque id used
in hjkl_buffer::Span::style. The render-side StyleResolver
closure (built by [Editor::style_resolver]) uses the id to
look up the style back. Linear-scan dedup — the table grows
only as new tree-sitter token kinds appear, so it stays tiny.
Sourcepub fn style_table(&self) -> &[Style]
pub fn style_table(&self) -> &[Style]
Read-only view of the style table — id i → style_table[i].
The render path passes a closure backed by this slice as the
StyleResolver for BufferView.
Sourcepub fn buffer(&self) -> &Buffer
pub fn buffer(&self) -> &Buffer
Borrow the migration buffer. Host renders through this via
hjkl_buffer::BufferView.
pub fn buffer_mut(&mut self) -> &mut Buffer
Sourcepub fn set_viewport_top(&mut self, row: usize)
pub fn set_viewport_top(&mut self, row: usize)
Force the buffer viewport’s top row without touching the
cursor. Used by tests that simulate a scroll without the
SCROLLOFF cursor adjustment that scroll_down / scroll_up
apply. Note: does not touch the textarea — the migration
buffer’s viewport is what BufferView renders from, and the
textarea’s own scroll path would clamp the cursor into its
(often-zero) visible window.
Sourcepub fn cursor(&self) -> (usize, usize)
pub fn cursor(&self) -> (usize, usize)
(row, col) cursor read sourced from the migration buffer.
Equivalent to self.textarea.cursor() when the two are in
sync — which is the steady state during Phase 7f because
every step opens with sync_buffer_content_from_textarea and
every ported motion pushes the result back. Prefer this over
self.textarea.cursor() so call sites keep working unchanged
once the textarea field is ripped.
Sourcepub fn take_lsp_intent(&mut self) -> Option<LspIntent>
pub fn take_lsp_intent(&mut self) -> Option<LspIntent>
Drain any pending LSP intent raised by the last key. Returns
None when no intent is armed.
Sourcepub fn record_jump(&mut self, pos: (usize, usize))
pub fn record_jump(&mut self, pos: (usize, usize))
Push a (row, col) onto the back-jumplist so Ctrl-o returns
to it later. Used by host-driven jumps (e.g. gd) that move
the cursor without going through the vim engine’s motion
machinery, where push_jump fires automatically.
Sourcepub fn set_viewport_height(&self, height: u16)
pub fn set_viewport_height(&self, height: u16)
Host apps call this each draw with the current text area height so scroll helpers can clamp the cursor without recomputing layout.
Sourcepub fn viewport_height_value(&self) -> u16
pub fn viewport_height_value(&self) -> u16
Last height published by set_viewport_height (in rows).
Sourcepub fn mark_content_dirty(&mut self)
pub fn mark_content_dirty(&mut self)
Single choke-point for “the buffer just changed”. Sets the
dirty flag and drops the cached content_arc snapshot so
subsequent reads rebuild from the live textarea. Callers
mutating textarea directly (e.g. the TUI’s bracketed-paste
path) must invoke this to keep the cache honest.
Sourcepub fn take_dirty(&mut self) -> bool
pub fn take_dirty(&mut self) -> bool
Returns true if content changed since the last call, then clears the flag.
Sourcepub fn cursor_screen_row(&mut self, height: u16) -> u16
pub fn cursor_screen_row(&mut self, height: u16) -> u16
Returns the cursor’s row within the visible textarea (0-based), updating the stored viewport top so subsequent calls remain accurate.
Sourcepub fn cursor_screen_pos(&self, area: Rect) -> Option<(u16, u16)>
pub fn cursor_screen_pos(&self, area: Rect) -> Option<(u16, u16)>
Returns the cursor’s screen position (x, y) for area (the textarea
rect). Accounts for line-number gutter and viewport scroll. Returns
None if the cursor is outside the visible viewport.
pub fn vim_mode(&self) -> VimMode
Sourcepub fn search_prompt(&self) -> Option<&SearchPrompt>
pub fn search_prompt(&self) -> Option<&SearchPrompt>
Bounds of the active visual-block rectangle as
(top_row, bot_row, left_col, right_col) — all inclusive.
None when we’re not in VisualBlock mode.
Read-only view of the live / or ? prompt. None outside
search-prompt mode.
Sourcepub fn last_search(&self) -> Option<&str>
pub fn last_search(&self) -> Option<&str>
Most recent committed search pattern (persists across n / N
and across prompt exits). None before the first search.
Sourcepub fn char_highlight(&self) -> Option<((usize, usize), (usize, usize))>
pub fn char_highlight(&self) -> Option<((usize, usize), (usize, usize))>
Start/end (row, col) of the active char-wise Visual selection
(inclusive on both ends, positionally ordered). None when not
in Visual mode.
Sourcepub fn line_highlight(&self) -> Option<(usize, usize)>
pub fn line_highlight(&self) -> Option<(usize, usize)>
Top/bottom rows of the active VisualLine selection (inclusive).
None when we’re not in VisualLine mode.
pub fn block_highlight(&self) -> Option<(usize, usize, usize, usize)>
Sourcepub fn buffer_selection(&self) -> Option<Selection>
pub fn buffer_selection(&self) -> Option<Selection>
Active selection in hjkl_buffer::Selection shape. None when
not in a Visual mode. Phase 7d-i wiring — the host hands this
straight to BufferView once render flips off textarea
(Phase 7d-ii drops the paint_*_overlay calls on the same
switch).
Sourcepub fn force_normal(&mut self)
pub fn force_normal(&mut self)
Force back to normal mode (used when dismissing completions etc.)
pub fn content(&self) -> String
Sourcepub fn content_arc(&mut self) -> Arc<String>
pub fn content_arc(&mut self) -> Arc<String>
Same logical output as [content], but returns a cached
Arc<String> so back-to-back reads within an un-mutated window
are ref-count bumps instead of multi-MB joins. The cache is
invalidated by every [mark_content_dirty] call.
pub fn set_content(&mut self, text: &str)
Sourcepub fn seed_yank(&mut self, text: String)
pub fn seed_yank(&mut self, text: String)
Install text as the pending yank buffer so the next p/P pastes
it. Linewise is inferred from a trailing newline, matching how yy/dd
shape their payload.
Sourcepub fn scroll_down(&mut self, rows: i16)
pub fn scroll_down(&mut self, rows: i16)
Scroll the viewport down by rows. The cursor stays on its
absolute line (vim convention) unless the scroll would take it
off-screen — in that case it’s clamped to the first row still
visible.
Sourcepub fn scroll_up(&mut self, rows: i16)
pub fn scroll_up(&mut self, rows: i16)
Scroll the viewport up by rows. Cursor stays unless it would
fall off the bottom of the new viewport, then clamp to the
bottom-most visible row.
pub fn goto_line(&mut self, line: usize)
Sourcepub fn jump_to(&mut self, line: usize, col: usize)
pub fn jump_to(&mut self, line: usize, col: usize)
Jump the cursor to the given 1-based line/column, clamped to the document.
Sourcepub fn mouse_click(&mut self, area: Rect, col: u16, row: u16)
pub fn mouse_click(&mut self, area: Rect, col: u16, row: u16)
Jump cursor to the terminal-space mouse position; exits Visual modes if active.
Sourcepub fn mouse_begin_drag(&mut self)
pub fn mouse_begin_drag(&mut self)
Begin a mouse-drag selection: anchor at current cursor and enter Visual mode.
Sourcepub fn mouse_extend_drag(&mut self, area: Rect, col: u16, row: u16)
pub fn mouse_extend_drag(&mut self, area: Rect, col: u16, row: u16)
Extend an in-progress mouse drag to the given terminal-space position.
pub fn insert_str(&mut self, text: &str)
pub fn accept_completion(&mut self, completion: &str)
Sourcepub fn handle_key(&mut self, key: KeyEvent) -> bool
pub fn handle_key(&mut self, key: KeyEvent) -> bool
Returns true if the key was consumed by the editor.
Auto Trait Implementations§
impl<'a> !Freeze for Editor<'a>
impl<'a> RefUnwindSafe for Editor<'a>
impl<'a> Send for Editor<'a>
impl<'a> Sync for Editor<'a>
impl<'a> Unpin for Editor<'a>
impl<'a> UnsafeUnpin for Editor<'a>
impl<'a> UnwindSafe for Editor<'a>
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
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more