pub enum BufferData {
Document(DocumentEntry),
FileTree(DocumentEntry),
Help(DocumentEntry),
Oil(DocumentEntry),
Terminal(TerminalBuffer),
Messages(DocumentEntry),
Multibuffer(DocumentEntry),
Dashboard(DocumentEntry),
}Variants§
Document(DocumentEntry)
FileTree(DocumentEntry)
Hierarchical filesystem tree.
DL.4: storage is now identical to BufferData::Document — an
actor-backed synthetic Document — exactly as Help converged at
PU.1a. The discriminator stays so :ls, mode lookup and
BufferKind::is_read_only can still tell a tree from a file.
It was its own struct with its own rope, which is why
document_handle() returned None for it and the generic pane
path could not render it at all — the reason four bespoke paint
functions existed (CV.5, CV.6).
Help(DocumentEntry)
Help / log / picker-listing buffers placed into a pane
(DESIGN.md §5.9, §5.11). The transient overlay path
(App.popup_buffer) remains for popup-style displays
(hover, doc lookups, error toasts); persistent help views
(:lsp-log, :lsp-server-log, :lsp-trace-log,
:describe-*, :diagnostics) route here so they live in
a real pane, can be split, switched, listed via :ls,
and updated live when their backing source emits events.
PU.1a (2026-06-27): storage is now identical to
BufferData::Document (a DocumentEntry carrying
Arc<dyn Document>) — help content is an actor-backed
synthetic Document, exactly like BufferData::Messages.
The discriminator stays so help-mode behaviours (links,
anchors, dismiss-on-Esc, the markdown major) and :ls /
introspection can tell a help view apart from a file. The
help title lives in BufferEntry::name; per-buffer
metadata (links / anchors / highlights) lives in
buffer_locals.
Oil(DocumentEntry)
Flat editable directory listing (oil.nvim-style).
DL.5: storage is a DocumentEntry like every other kind — the
last one to converge. Its rope is an actor-backed Document, and
the directory snapshot :w diffs against lives in the
OilSnapshotLocal buffer-local. Oil is writable, so it
needs no owner-write bypass: edits go through the ordinary
document path.
Terminal(TerminalBuffer)
Messages(DocumentEntry)
The editor’s *messages* audit transcript. Storage is
identical to BufferData::Document (same
DocumentEntry); the discriminator exists so :ls,
modeline, and introspection paths can tell the transcript
apart from a user-edited file. The subsystem owns content;
messages-mode contributes ReadOnly + NoFile.
Multibuffer(DocumentEntry)
H.1 (2026-05-31): composed multibuffer view buffer
(lattice-multibuffer). Storage is identical to
BufferData::Document (the DocumentEntry’s
handle: Arc<dyn Document> is a
MultibufferDocumentHandle impl). The discriminator
exists so :ls / picker display / mode lookup can
distinguish a composed view from a regular Document.
MultibufferMode (M.2.b.2) is the major mode; H.3’s
Event::BufferOpened dispatch activates it.
Dashboard(DocumentEntry)
The *dashboard* launch page (DB.2). Storage is identical to
BufferData::Document (same DocumentEntry); the discriminator
exists so :ls / introspection tell the dashboard apart from a file,
and so the follow / dismiss gates group it with help-style buffers.
dashboard-mode is the major mode; it contributes ReadOnly +
NoFile. See docs/dev/architecture/dashboard.md §9.2.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for BufferData
impl !UnwindSafe for BufferData
impl Freeze for BufferData
impl Send for BufferData
impl Sync for BufferData
impl Unpin for BufferData
impl UnsafeUnpin for BufferData
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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