pub struct EditorSnapshot {
pub version: u32,
pub mode: SnapshotMode,
pub cursor: (u32, u32),
pub lines: Vec<String>,
pub viewport_top: u32,
pub registers: Registers,
pub marks: BTreeMap<char, (u32, u32)>,
pub global_marks: BTreeMap<char, (u64, u32, u32)>,
}Expand description
Coarse editor snapshot suitable for serde round-tripping.
Today’s shape is intentionally minimal — it carries only the bits
the runtime crate::Editor knows how to round-trip without the
trait extraction (mode, cursor, lines, viewport top, settings).
Once Editor<B: Buffer, H: Host> ships under phase 5, this struct
grows to cover full SPEC state: registers, marks, jump list, change
list, undo tree, full options.
Hosts that persist editor state between sessions should:
- Treat the snapshot as opaque. Don’t manually mutate fields.
- Always check
versionafter deserialization; reject on mismatch rather than attempt migration.
§Wire-format stability
- 0.0.x:
Self::VERSIONbumps with every structural change to the snapshot. Hosts must reject mismatched persisted state — no migration path is offered. - 0.1.0:
Self::VERSIONfreezes. Hosts persisting editor state between sessions can rely on the wire format being stable for the entire 0.1.x line. - 0.2.0+: any further structural change to this struct requires a
VERSION++bump and is gated behind a major version bump of the crate.
Fields§
§version: u32Format version. See Self::VERSION for the lock policy.
Hosts use this to detect mismatched persisted state.
mode: SnapshotModeMode at snapshot time (status-line granularity).
cursor: (u32, u32)Cursor (row, col) in byte indexing.
lines: Vec<String>Buffer lines. Trailing \n not included.
viewport_top: u32Viewport top line at snapshot time.
registers: RegistersRegister bank. Vim’s "", "0–"9, "a–"z, "+/"*.
Skipped for Eq/PartialEq because crate::Registers
doesn’t derive them today.
marks: BTreeMap<char, (u32, u32)>Named marks — lowercase ('a–'z, buffer-scope). Round-trips
across tab swaps in the host.
0.0.36: consolidated from the prior file_marks field;
lowercase marks now persist as well since they live in the
same unified crate::Editor::marks map.
global_marks: BTreeMap<char, (u64, u32, u32)>Global (file) marks — uppercase ('A–'Z). Each entry records
(buffer_id, row, col) so cross-buffer jumps can switch to the
correct slot. Added in VERSION 5.
Implementations§
Source§impl EditorSnapshot
impl EditorSnapshot
Sourcepub const VERSION: u32 = 5
pub const VERSION: u32 = 5
Current snapshot format version.
Bumped to 2 in v0.0.8: registers added.
Bumped to 3 in v0.0.9: file_marks added.
Bumped to 4 in v0.0.36: file_marks → unified marks map
(lowercase + uppercase consolidated).
Bumped to 5: global_marks field added for cross-buffer uppercase
marks (closes #175).
§Lock policy
- 0.0.x (today):
VERSIONbumps freely with each structural change toEditorSnapshot. Persisted state from an older patch release will not round-trip; hosts must reject the snapshot rather than attempt a field-by-field migration. - 0.1.0:
VERSIONfreezes. Hosts persisting editor state between sessions can rely on the wire format being stable for the entire 0.1.x line. - 0.2.0+: any further structural change requires
VERSION++together with a major-version bump ofhjkl-engine.
Trait Implementations§
Source§impl Clone for EditorSnapshot
impl Clone for EditorSnapshot
Source§fn clone(&self) -> EditorSnapshot
fn clone(&self) -> EditorSnapshot
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more