Skip to main content

Pane

Struct Pane 

Source
pub struct Pane {
Show 21 fields pub id: PaneId, pub terminal: Arc<RwLock<TerminalManager>>, pub scroll_state: ScrollState, pub mouse: MouseState, pub bell: BellState, pub cache: RenderCache, pub refresh_task: Option<JoinHandle<()>>, pub working_directory: Option<String>, pub last_activity_time: Instant, pub last_seen_generation: u64, pub anti_idle_last_activity: Instant, pub anti_idle_last_generation: u64, pub silence_notified: bool, pub exit_notified: bool, pub session_logger: SharedSessionLogger, pub bounds: PaneBounds, pub background: PaneBackground, pub title: String, pub has_default_title: bool, pub restart_state: Option<RestartState>, pub is_active: Arc<AtomicBool>, /* private fields */
}
Expand description

A single terminal pane with its own state

§RwLock Strategy

terminal uses tokio::sync::RwLock for the same reason as Tab::terminal: TerminalManager is shared between the async PTY reader task and the sync winit event loop.

Access rules:

  • From async tasks: terminal.read().await or terminal.write().await
  • From the sync event loop: terminal.try_read() or terminal.try_write() for polling; terminal.blocking_write() for infrequent user-initiated operations only.

Fields§

§id: PaneId

Unique identifier for this pane

§terminal: Arc<RwLock<TerminalManager>>

The terminal session for this pane.

Uses tokio::sync::RwLock. From sync contexts use .try_read() or .try_write() for non-blocking access or .blocking_write() for user-initiated operations.

§scroll_state: ScrollState

Scroll state for this pane

§mouse: MouseState

Mouse state for this pane

§bell: BellState

Bell state for this pane

§cache: RenderCache

Render cache for this pane

§refresh_task: Option<JoinHandle<()>>

Async task for refresh polling

§working_directory: Option<String>

Working directory when pane was created

§last_activity_time: Instant

Last time terminal output (activity) was detected

§last_seen_generation: u64

Last terminal update generation seen

§anti_idle_last_activity: Instant

Last activity time for anti-idle keep-alive

§anti_idle_last_generation: u64

Last terminal generation recorded for anti-idle tracking

§silence_notified: bool

Whether silence notification has been sent for current idle period

§exit_notified: bool

Whether exit notification has been sent for this pane

§session_logger: SharedSessionLogger

Session logger for automatic session recording

§bounds: PaneBounds

Current bounds of this pane (updated on layout calculation)

§background: PaneBackground

Per-pane background settings (overrides global config if image_path is set)

§title: String

Last-known title from OSC sequences or CWD fallback (empty if never set)

§has_default_title: bool

True when pane still has its default/fallback title

§restart_state: Option<RestartState>

State for shell restart behavior (None = shell running or closed normally)

§is_active: Arc<AtomicBool>

Whether the parent tab is active (shared with tab for refresh throttling)

Implementations§

Source§

impl Pane

Source

pub fn new( id: PaneId, config: &Config, _runtime: Arc<Runtime>, working_directory: Option<String>, ) -> Result<Self>

Create a new pane with a terminal session

Source

pub fn new_with_command( id: PaneId, config: &Config, _runtime: Arc<Runtime>, working_directory: Option<String>, command: String, args: Vec<String>, ) -> Result<Self>

Create a pane that launches command args instead of the configured login shell.

Identical to Pane::new() except the PTY is started with the given command. All other fields (scroll state, cache, refresh task, etc.) are the same as new().

Source

pub fn new_wrapping_terminal( id: PaneId, terminal: Arc<RwLock<TerminalManager>>, working_directory: Option<String>, is_active: Arc<AtomicBool>, ) -> Self

Create a primary pane that wraps an already-running terminal session.

Unlike Pane::new, this constructor does not spawn a new shell. It shares the caller’s Arc<RwLock<TerminalManager>> directly, so the pane’s terminal is the same session that Tab::terminal points to.

Used by Tab::new_internal to always initialise a PaneManager with a single primary pane at tab creation, removing the need for tab-level scroll_state, mouse, bell, and cache fallback fields (R-32).

§Arguments
  • id — Pane identifier (typically 1)
  • terminal — Shared Arc cloned from the owning Tab::terminal
  • working_directory — Optional CWD exposed via Pane::get_cwd
  • is_active — Shared atomic flag cloned from the owning Tab::is_active
Source

pub fn new_for_tmux( id: PaneId, config: &Config, _runtime: Arc<Runtime>, ) -> Result<Self>

Create a new pane for tmux integration (no shell spawned)

This creates a terminal that receives output from tmux control mode rather than a local PTY.

Source

pub fn is_bell_active(&self) -> bool

Check if the visual bell is currently active

Source

pub fn is_running(&self) -> bool

Check if the terminal in this pane is still running

Source

pub fn get_cwd(&self) -> Option<String>

Get the current working directory of this pane’s shell

Source

pub fn set_background(&mut self, background: PaneBackground)

Set per-pane background settings (overrides global config)

Source

pub fn background(&self) -> &PaneBackground

Get per-pane background settings

Source

pub fn set_background_image(&mut self, path: Option<String>)

Set a per-pane background image (overrides global config)

Source

pub fn get_background_image(&self) -> Option<&str>

Get the per-pane background image path (if set)

Source§

impl Pane

Source

pub fn respawn_shell(&mut self, config: &Config) -> Result<()>

Respawn the shell in this pane

This resets the terminal state and spawns a new shell process. Used when shell_exit_action is one of the restart variants.

Source

pub fn write_restart_prompt(&self)

Write a restart prompt message to the terminal

Source

pub fn get_title(&self) -> String

Get the title for this pane (from OSC or CWD)

Source

pub fn start_refresh_task( &mut self, runtime: Arc<Runtime>, window: Arc<Window>, active_fps: u32, inactive_fps: u32, )

Start the refresh polling task for this pane

Source

pub fn stop_refresh_task(&mut self)

Stop the refresh polling task

Source

pub fn resize_terminal(&self, cols: usize, rows: usize)

Resize the terminal to match the pane bounds

Source

pub fn resize_terminal_with_cell_dims( &self, cols: usize, rows: usize, cell_width: u32, cell_height: u32, )

Resize the terminal and update cell pixel dimensions.

Unlike resize_terminal, this also calls set_cell_dimensions so that the core library tracks scroll_offset_rows in display-cell units rather than its internal default (2 px per row). Must be called whenever the display cell size is known (e.g., on every layout pass).

Trait Implementations§

Source§

impl Drop for Pane

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§

§

impl !RefUnwindSafe for Pane

§

impl !UnwindSafe for Pane

§

impl Freeze for Pane

§

impl Send for Pane

§

impl Sync for Pane

§

impl Unpin for Pane

§

impl UnsafeUnpin for Pane

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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

Source§

fn downcast(&self) -> &T

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<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

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<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

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

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

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