Skip to main content

TerminalBuffer

Struct TerminalBuffer 

Source
pub struct TerminalBuffer {
Show 15 fields pub id: BufferId, pub pty: Arc<PtyHandle>, pub cwd: Option<PathBuf>, pub label: String, pub program_name: String, pub snapshot: Arc<ArcSwap<TerminalSnapshot>>, pub term: SharedTerm, pub current_match: Option<GridSearchHit>, pub visual: Option<TerminalVisualState>, pub last_visual: Option<TerminalVisualState>, pub insert_exit_pending: bool, pub nav_cursor: Option<(i32, u16)>, pub all_matches: Vec<GridSearchHit>, pub synthetic: Option<Arc<SyntheticDoc>>, pub created_at: SystemTime, /* private fields */
}
Expand description

PTY-backed terminal buffer entry held in the host’s buffer registry. Owns the writer handle, the published snapshot cell, and the reader task’s AbortHandle so dropping the buffer kills the reader (and, transitively, the child via PTY close on SIGHUP).

Construct via TerminalBuffer::from_spawn — the host never names the internal field shape directly so adding fields stays non-breaking.

Fields§

§id: BufferId§pty: Arc<PtyHandle>§cwd: Option<PathBuf>§label: String§program_name: String

2026-05-25: short display name for the spawned program (e.g. zsh, bash, cargo). Captured at spawn from the program path’s basename so the modeline can surface “what’s running here” instead of just “terminal #N”.

§snapshot: Arc<ArcSwap<TerminalSnapshot>>§term: SharedTerm

T3 (2026-05-25): shared handle to the alacritty Term. Dispatch-side scroll / resize ops lock the inner Mutex and republish the snapshot. Same handle the reader task holds — cheap to clone (Arc + ArcSwap + Notify).

§current_match: Option<GridSearchHit>

T3.b.3 (2026-05-25): the most recent search hit on this terminal, set by submit_search / repeat_search for Terminal buffers and cleared by cancel_search. Renderers read this in their per-frame paint and overlay the matched cells with the search-highlight style. None when no active search is in flight.

§visual: Option<TerminalVisualState>

T3.b.2 (2026-05-25): linewise Visual-mode selection state on this terminal buffer. None outside Visual. Both rows are alacritty grid lines (negative = history). Renderers paint the inclusive min(anchor,head)..=max(anchor,head) row range with the selection bg; run_terminal_invocation extends head_line on j / k while Visual is active.

§last_visual: Option<TerminalVisualState>

T3.b.3 (2026-05-25): captured prior-Visual state on terminal — restored by gv. Same shape as visual. None when no Visual session has been completed yet.

§insert_exit_pending: bool

T2.c (2026-05-25): true after the user has pressed <C-\> in Terminal-Insert and we’re waiting for the second key of the exit chord. Cleared by either the confirm key (<C-n> → exit) or any other key (which emits \x1c plus that key’s PTY bytes).

§nav_cursor: Option<(i32, u16)>

2026-05-25: Normal-in-terminal navigation cursor in alacritty grid coords (line: negative = history; positive = live screen; col: cell column). None means “snap to live PTY cursor” — the initial state and what EnterTerminalInsert resets to. Set on the first j / k / h / l / gg / G and tracked thereafter. Renderers paint a block cursor at this position when set; Visual entry uses it as the initial anchor / head.

§all_matches: Vec<GridSearchHit>

T3.b.3 (2026-05-25): every regex match across the grid for the current search pattern. Populated alongside current_match in submit_search / repeat_search and cleared by cancel_search / enter-Insert. Renderers paint these with the softer hlsearch overlay; the distinguished current_match keeps the stronger current-hit style.

§synthetic: Option<Arc<SyntheticDoc>>

T-mode-1 (2026-05-27): frozen scrollback snapshot when TerminalNormalMode is active on this buffer; None otherwise. Populated by the mode’s on_activate hook (rope build from term.build_normal_snapshot()) and dropped by the mode’s Guard. The central vim grammar operates on this rope during Normal / Visual sub-states; see docs/dev/architecture/terminal-as-document.md. Arc so the host’s render-state publish path can clone out a cheap reference without holding the buffer lock.

§created_at: SystemTime

Implementations§

Source§

impl TerminalBuffer

Source

pub fn from_spawn( id: BufferId, label: String, cwd: Option<PathBuf>, program_name: String, handles: SpawnHandles, ) -> Self

Build a buffer entry from freshly-spawned PTY handles + the host-assigned identity. Centralises the TerminalBuffer field list so the host stays insulated from substrate-internal field changes.

Source

pub fn scrollback_view(&self) -> ScrollbackView

Trait Implementations§

Source§

impl Debug for TerminalBuffer

Source§

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

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

impl Drop for TerminalBuffer

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. 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
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

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

Convert &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)

Convert &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
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, 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.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more