TerminalState

Struct TerminalState 

Source
pub struct TerminalState { /* private fields */ }
Expand description

Thread-safe terminal state wrapper.

This struct wraps alacritty’s Term in an Arc<parking_lot::Mutex<>> to allow safe concurrent access from multiple threads. It also manages the VTE parser for processing incoming bytes from the PTY.

§Thread Safety

The terminal state can be safely shared across threads:

The mutex is held only for the duration of the closure, minimizing contention.

§Grid Access

The terminal grid is accessed through the Term structure:

terminal_state.with_term(|term| {
    let grid = term.grid();
    let cursor = grid.cursor.point;
    let cell = &grid[cursor];
    // Read cell content, colors, flags, etc.
});

§Performance Notes

  • parking_lot::Mutex is used for faster locking than std::sync::Mutex
  • Lock contention is minimized by keeping critical sections short
  • The VTE parser state is kept outside the mutex (only accessed from one thread)

Implementations§

Source§

impl TerminalState

Source

pub fn new(cols: usize, rows: usize, event_proxy: GpuiEventProxy) -> Self

Create a new terminal state with the given dimensions.

§Arguments
  • cols - The number of columns (character width) of the terminal
  • rows - The number of rows (lines) of the terminal
  • event_proxy - The event proxy for forwarding terminal events to GPUI
§Returns

A new TerminalState instance.

§Examples
use std::sync::mpsc::channel;
use gpui_terminal::event::GpuiEventProxy;
use gpui_terminal::terminal::TerminalState;

let (tx, rx) = channel();
let event_proxy = GpuiEventProxy::new(tx);
let terminal = TerminalState::new(80, 24, event_proxy);
Source

pub fn process_bytes(&mut self, bytes: &[u8])

Process incoming bytes from the PTY.

This method feeds the bytes through the VTE parser, which will call the appropriate handler methods on the terminal to update its state.

§Arguments
  • bytes - The bytes received from the PTY
§Examples
// Process some output from the PTY
terminal.process_bytes(b"Hello, world!\r\n");
Source

pub fn resize(&mut self, cols: usize, rows: usize)

Resize the terminal to new dimensions.

This method updates the terminal’s internal grid to match the new size. It should be called when the terminal view is resized.

§Arguments
  • cols - The new number of columns
  • rows - The new number of rows
§Examples
// Resize to 120x30
terminal.resize(120, 30);
Source

pub fn mode(&self) -> TermMode

Get the current terminal mode.

The terminal mode affects how certain key sequences are interpreted, particularly arrow keys in application cursor mode.

§Returns

The current TermMode flags.

§Examples
use alacritty_terminal::term::TermMode;

let mode = terminal.mode();
if mode.contains(TermMode::APP_CURSOR) {
    println!("Application cursor mode is enabled");
}
Source

pub fn with_term<F, R>(&self, f: F) -> R
where F: FnOnce(&Term<GpuiEventProxy>) -> R,

Execute a function with read access to the terminal.

This method provides safe read access to the underlying Term structure. The terminal is locked for the duration of the function call.

§Arguments
  • f - A function that takes a reference to the Term and returns a value
§Returns

The value returned by the function f.

§Examples
let cursor_pos = terminal.with_term(|term| {
    term.grid().cursor.point
});
Source

pub fn with_term_mut<F, R>(&self, f: F) -> R
where F: FnOnce(&mut Term<GpuiEventProxy>) -> R,

Execute a function with mutable access to the terminal.

This method provides safe write access to the underlying Term structure. The terminal is locked for the duration of the function call.

§Arguments
  • f - A function that takes a mutable reference to the Term and returns a value
§Returns

The value returned by the function f.

§Examples
terminal.with_term_mut(|term| {
    // Perform some mutation on the term
    term.scroll_display(alacritty_terminal::grid::Scroll::Delta(5));
});
Source

pub fn cols(&self) -> usize

Get the number of columns in the terminal.

§Returns

The current number of columns.

Source

pub fn rows(&self) -> usize

Get the number of rows in the terminal.

§Returns

The current number of rows.

Source

pub fn term_arc(&self) -> Arc<Mutex<Term<GpuiEventProxy>>>

Get a cloned reference to the underlying terminal Arc.

This allows sharing the terminal state across multiple threads or components.

§Returns

A cloned Arc<Mutex<Term<GpuiEventProxy>>>.

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> Downcast for T
where T: Any,

Source§

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.
Source§

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.
Source§

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.
Source§

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.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

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

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.

Source§

impl<T> Instrument for T

Source§

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

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

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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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