hjkl-vim 0.12.0

Vim modal state types and grammar primitives for the hjkl editor stack. Pre-1.0 churn.
Documentation
/// Cursor motion identity carried by the host keymap path.
///
/// Phase 3a introduces this enum so the `hjkl-vim` keymap can name motions
/// without depending on engine internals. The host converts a `MotionKind` to
/// the appropriate `Editor::apply_motion` call.
///
/// Designed for extensibility: Phases 3b–3g will add further variants
/// (word motions, line-boundary motions, jump motions, scroll motions, …)
/// without breaking any existing match arms — callers must use `..` or
/// add the new arms when they bump the hjkl-vim minor version.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum MotionKind {
    /// `h` / `<Backspace>` — move the cursor one character to the left.
    /// Clamps at column 0 (no line-wrap), matching vim's normal-mode `h`.
    CharLeft,
    /// `l` / `<Space>` — move the cursor one character to the right.
    /// Clamps at the last character of the line (no line-wrap), matching
    /// vim's normal-mode `l`.
    CharRight,
    /// `j` — move the cursor one line down, restoring the sticky column.
    LineDown,
    /// `k` — move the cursor one line up, restoring the sticky column.
    LineUp,
    /// `+` / `<CR>` (not yet bound) — move down one line and land on the
    /// first non-blank character. Sets the sticky column.
    FirstNonBlankDown,
    /// `-` — move up one line and land on the first non-blank character.
    /// Sets the sticky column.
    FirstNonBlankUp,
}