Skip to main content

EditorSnapshot

Struct EditorSnapshot 

Source
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)>,
}
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 version after deserialization; reject on mismatch rather than attempt migration.

§Wire-format stability

  • 0.0.x: Self::VERSION bumps with every structural change to the snapshot. Hosts must reject mismatched persisted state — no migration path is offered.
  • 0.1.0: Self::VERSION freezes. 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: u32

Format version. See Self::VERSION for the lock policy. Hosts use this to detect mismatched persisted state.

§mode: SnapshotMode

Mode 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: u32

Viewport top line at snapshot time.

§registers: Registers

Register 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 — both lowercase ('a'z, buffer-scope) and uppercase ('A'Z, file-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.

Implementations§

Source§

impl EditorSnapshot

Source

pub const VERSION: u32 = 4

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).

§Lock policy
  • 0.0.x (today): VERSION bumps freely with each structural change to EditorSnapshot. 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: VERSION freezes. 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 of hjkl-engine.

Trait Implementations§

Source§

impl Clone for EditorSnapshot

Source§

fn clone(&self) -> EditorSnapshot

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EditorSnapshot

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for EditorSnapshot

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for EditorSnapshot

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,