pub struct BufferTracker { /* private fields */ }Expand description
A tracker to keep up to date on changes to Buffers
This struct is capable of tracking all the Changes that happen
to any Buffer. That happens through the
BufferTracker::parts method, which gives a
BufferParts struct, including the Buffer’s Bytes,
Tags, Selections, as well as an ExactSizeIterator over
the Changes that took place since the last call to this
function, and a RangesToUpdate associated with the Buffer
The RangesToUpdate is a struct that keeps track of the ranges
where changes have taken place, and informs you on which ones need
to be updated based on what is currently visible on screen. At the
start, this will include the full range of the Buffer, since
Duat assumes that you will want to update the whole buffer.
This struct, alongside PerBuffer, allows for a nice and
standardised workflow for “parsers”, which essentially update the
Buffers based on changes that took place and on what is
presently visible. One example of such a parser can be seen in the
duat-treesitter crate.
Implementations§
Source§impl BufferTracker
impl BufferTracker
Sourcepub fn parts<'b>(&self, buf: &'b mut Buffer) -> Option<BufferParts<'b>>
pub fn parts<'b>(&self, buf: &'b mut Buffer) -> Option<BufferParts<'b>>
Gets the BufferParts of a Buffer
This struct consists of the normal TextParts, (Bytes,
Tags, Selections), but it also includes an
Iterator over all the Changes that took place since
the last time this function was called by this tracker on this
Buffer.
It is intended for borrowing the Tags mutably, whilst
reading from the Bytes, Selections and the Changes that
took place.
Returns None when calling this function on a Buffer
without first having called BufferTracker::register_buffer
on it.
Sourcepub fn register_buffer(&self, buf: &mut Buffer)
pub fn register_buffer(&self, buf: &mut Buffer)
Registers a Buffer on the list of those that should be
tracked
Does nothing if the Buffer was already registered.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for BufferTracker
impl RefUnwindSafe for BufferTracker
impl Send for BufferTracker
impl Sync for BufferTracker
impl Unpin for BufferTracker
impl UnwindSafe for BufferTracker
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.