Skip to main content

Crate hjkl_engine

Crate hjkl_engine 

Source
Expand description

Vim-mode editor engine built on top of hjkl_buffer.

Exposes an Editor you can drop into a ratatui layout, a command grammar that covers the bulk of vim’s normal / insert / visual / visual-line / visual-block modes, text-object operators, dot-repeat, and ex-command handling (:s/foo/bar/g, :w, :q, :noh, …). Rendering goes through hjkl_buffer::BufferView; selection / gutter highlights are painted in the same single-pass as text.

Imported wholesale from sqeel-vim with full git history. The trait extraction (Selection / SelectionSet / Buffer + Host sub-traits) lands progressively under crate::types. Pre-1.0 churn — the public surface may change in patch bumps. See docs.rs for the canonical API reference.

The legacy public surface is intentionally narrow:

  • Editor — the editor widget.
  • KeybindingMode / VimMode — mode enums used by host apps.
  • [ex::run] / [ex::ExEffect] — drive ex-mode commands.

Re-exports§

pub use keymap_motion::MotionKind;
pub use substitute::SubstError;
pub use substitute::SubstFlags;
pub use substitute::SubstituteCmd;
pub use substitute::SubstituteOutcome;
pub use substitute::apply_substitute;
pub use substitute::parse_substitute;
pub use types::Attrs;
pub use types::Buffer;
pub use types::BufferEdit;
pub use types::BufferId;
pub use types::Color;
pub use types::ContentEdit;
pub use types::Cursor;
pub use types::CursorShape;
pub use types::DefaultHost;
pub use types::Edit;
pub use types::EditorSnapshot;
pub use types::EngineError;
pub use types::FoldOp;
pub use types::FoldProvider;
pub use types::Highlight;
pub use types::HighlightKind;
pub use types::Host;
pub use types::Input as PlannedInput;
pub use types::Mode;
pub use types::Modifiers;
pub use types::MouseEvent;
pub use types::MouseKind;
pub use types::NoopFoldProvider;
pub use types::OptionValue;
pub use types::Options;
pub use types::Pos;
pub use types::Query;
pub use types::RenderFrame;
pub use types::Search;
pub use types::Selection;
pub use types::SelectionKind;
pub use types::SelectionSet;
pub use types::SnapshotMode;
pub use types::SpecialKey;
pub use types::Style;
pub use types::WrapMode;

Modules§

keymap_motion
motions
Vim-shaped cursor motions, computed over the SPEC trait surface.
search
Engine-owned search state + execution helpers.
substitute
Public substitute command parser and applicator.
types
Core types for the engine trait surface.

Structs§

BufferFoldProvider
FoldProvider adapter wrapping a &hjkl_buffer::Buffer. Lets engine call sites ask the buffer’s fold storage about visible rows without reaching into Buffer::next_visible_row &c. directly.
BufferFoldProviderMut
Mutable FoldProvider adapter wrapping a &mut hjkl_buffer::Buffer. Engine call sites that need to dispatch a FoldOp (vim’s z… keystrokes, the :fold* Ex commands, edit-pipeline invalidation) construct this on the fly from &mut self.buffer and call FoldProvider::apply / FoldProvider::invalidate_range on it.
Editor
Input
A key press with modifier flags. The vim engine reads modifiers directly off this struct (e.g. input.ctrl && input.key == Key::Char('d')).
InsertSession
KeyEvent
Represents a key event.
LastVisual
Saved visual-mode anchor + cursor for gv (re-enters the last visual selection). mode carries which visual flavour to restore; anchor / cursor mean different things per flavour:
Registers
SearchPrompt
Active / or ? search prompt. Text mutations drive the textarea’s live search pattern so matches highlight as the user types.
Slot
StepBookkeeping
State carried between Editor::begin_step and Editor::end_step.
Viewport
Visible region of a buffer — the runtime viewport state the host owns and mutates per render frame.

Enums§

FsmMode
The FSM-internal mode discriminator used by Editor::fsm_mode() and Editor::set_fsm_mode(). Re-exported as FsmMode to avoid clashing with the types::Mode buffer-side enum that is already exported as Mode.
InsertDir
Direction for insert-mode arrow movement.
InsertEntry
InsertReason
Key
A key code, mirroring the subset of crossterm::event::KeyCode the vim engine actually consumes. Null is the conventional sentinel for “no input” (matching the previous tui_textarea::Key shape) so call sites can early-return on unsupported keys.
KeybindingMode
Which keyboard discipline the editor uses. Currently vim-only, but kept as an enum so future emacs / plain bindings can slot in without touching the public signature.
LastChange
Information needed to replay a mutating change via ..
LspIntent
Host-observable LSP requests triggered by editor bindings. The hjkl-engine crate doesn’t talk to an LSP itself — it just raises an intent that the TUI layer picks up and routes to sqls.
Motion
Operator
Pending
RangeKind
Classification determines how operators treat the range end.
ScrollDir
Scroll direction for scroll_full_page, scroll_half_page, and scroll_line controller methods.
VimMode
Coarse vim-mode a host app can display in its status line.

Functions§

crossterm_to_input
Crossterm KeyEvent → engine Input. Thin wrapper that delegates to the From impl above; kept as a free fn for the in-tree callers in the legacy ratatui-coupled paths.
decode_macro
Reverse of [encode_macro] — parse the textual form back into Input events for replay. Unknown <…> tags are dropped silently so the caller can roundtrip text the user pasted into a register without erroring out on partial matches.
decode_planned_input
Decode a crate::types::Input (alias: crate::PlannedInput) to the engine-internal Input type.
op_is_change
true when op records a last_change entry for dot-repeat purposes. Promoted to pub in Phase 6.6e so hjkl-vim::normal can use it without duplicating the logic.
parse_motion
Parse the first key of a normal/visual-mode motion. Returns None for keys that don’t start a motion (operator keys, command keys, etc.). Promoted to pub in Phase 6.6e so hjkl-vim::normal can call it.