Vim FSM, motion grammar, and editor traits — the no-I/O core of the hjkl stack.
Vim-mode editor engine built on top of hjkl-buffer. Exposes an Editor you
can drop into a ratatui layout — 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, ...). Imported from
sqeel-vim with full git history.
Editor<B, H> is generic over buffer backend + host; the Buffer trait splits
into Cursor / Query / BufferEdit / Search subtraits. See
docs.rs for the canonical API reference.
| Feature | Default | Notes |
|---|---|---|
serde |
yes | Serde derives for Editor snapshot types. |
ratatui and crossterm are unconditional deps until the engine-native Style
type and the Buffer/Host trait extraction land. After that they move behind
feature flags so wasm/no_std consumers can opt out.
hjkl-engine = "0.3"use hjkl_engine::{Editor, Input, Key};
use hjkl_engine::types::{DefaultHost, Options};
use hjkl_buffer::Buffer;
let mut editor = Editor::new(
Buffer::new(),
DefaultHost::new(),
Options::default(),
);
editor.set_content("hello world");
// Drive the FSM with a keystroke
let input = Input { key: Key::Char('j'), ..Default::default() };
hjkl_engine::step(&mut editor, input);MIT. See LICENSE.