Rope-backed text buffer with cursor, edits, motions, folds, viewport, and search.
Core text storage layer for the hjkl workspace. Provides vim-shaped buffer
semantics — charwise/linewise/blockwise selection, motions matching vim edge
cases (h no-wrap, $ clamp, sticky col on j/k), folds, viewport, and
search. Extracted from
sqeel-buffer with
full git history.
Stable public surface. See docs.rs/hjkl-buffer
for the Buffer API invariants and implementer contract.
ratatui(optional, default off): re-exportsStyleand styled-span helpers wired through ratatui. Pull this in only when consuming from a ratatui frontend; otherwise the buffer is UI-agnostic.
hjkl-buffer = "0.3"use hjkl_buffer::{Buffer, Position};
let mut buf = Buffer::from_str("hello\nworld");
assert_eq!(buf.row_count(), 2);
assert_eq!(buf.line(0), Some("hello"));
assert_eq!(buf.cursor(), Position { row: 0, col: 0 });
// Move cursor to second row
buf.set_cursor(Position { row: 1, col: 0 });
assert_eq!(buf.cursor().row, 1);
// Replace all content
buf.replace_all("new content");
assert_eq!(buf.as_string(), "new content");MIT. See LICENSE.