pub struct SnapshotFoldProvider { /* private fields */ }Expand description
Owned-snapshot FoldProvider adapter. Carries a copy of the
buffer’s fold list (one Vec<Fold> clone — fold lists are tiny in
practice) plus the buffer’s row_count, so the call site can hold
the snapshot for fold queries while passing &mut hjkl_buffer::View
to a motion function that needs cursor mutation.
Introduced in 0.0.40 (Patch C-δ.5) so the lifted motion fns can
take &dyn FoldProvider separately from &mut B: Cursor + Query
without the call site running into the immutable-vs-mutable
borrow conflict that arises with BufferFoldProvider /
BufferFoldProviderMut (both of which hold a buffer borrow).
The snapshot is read-only — apply and invalidate_range are
no-ops (any fold mutation must go through the canonical
BufferFoldProviderMut adapter against the live buffer).
Implementations§
Source§impl SnapshotFoldProvider
impl SnapshotFoldProvider
Sourcepub fn from_buffer(buffer: &RopeBuffer) -> Self
pub fn from_buffer(buffer: &RopeBuffer) -> Self
Snapshot the current fold list + row-count from buffer.
The snapshot is decoupled from the buffer’s lifetime, so the
caller can immediately re-borrow the buffer mutably.
Trait Implementations§
Source§impl FoldProvider for SnapshotFoldProvider
impl FoldProvider for SnapshotFoldProvider
Source§fn next_visible_row(&self, row: usize, _row_count: usize) -> Option<usize>
fn next_visible_row(&self, row: usize, _row_count: usize) -> Option<usize>
row, skipping hidden rows.
None past the end of the buffer.Source§fn prev_visible_row(&self, row: usize) -> Option<usize>
fn prev_visible_row(&self, row: usize) -> Option<usize>
row. None past the top.row currently hidden by a closed fold?Source§fn fold_at_row(&self, row: usize) -> Option<(usize, usize, bool)>
fn fold_at_row(&self, row: usize) -> Option<(usize, usize, bool)>
(start_row, end_row, closed) of the fold containing
row, if any. Lets za / zo / zc find their target
without iterating the full fold list.Source§fn apply(&mut self, op: FoldOp)
fn apply(&mut self, op: FoldOp)
FoldOp to the underlying fold storage. Read-only
providers (e.g. crate::buffer_impl::BufferFoldProvider which
holds a &View) and providers that don’t track folds (e.g.
NoopFoldProvider) implement this as a no-op. Read moreSource§fn invalidate_range(&mut self, start_row: usize, end_row: usize)
fn invalidate_range(&mut self, start_row: usize, end_row: usize)
[start_row, end_row].
Edit pipelines call this after a user edit so vim’s “edits
inside a fold open it” behaviour fires. Default impl forwards
to FoldProvider::apply with a FoldOp::Invalidate.