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().awaitorterminal.write().await - From the sync event loop:
terminal.try_read()orterminal.try_write()for polling;terminal.blocking_write()for infrequent user-initiated operations only.
Fields§
§id: PaneIdUnique 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: ScrollStateScroll state for this pane
mouse: MouseStateMouse state for this pane
bell: BellStateBell state for this pane
cache: RenderCacheRender 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: InstantLast time terminal output (activity) was detected
last_seen_generation: u64Last terminal update generation seen
anti_idle_last_activity: InstantLast activity time for anti-idle keep-alive
anti_idle_last_generation: u64Last terminal generation recorded for anti-idle tracking
silence_notified: boolWhether silence notification has been sent for current idle period
exit_notified: boolWhether exit notification has been sent for this pane
session_logger: SharedSessionLoggerSession logger for automatic session recording
bounds: PaneBoundsCurrent bounds of this pane (updated on layout calculation)
background: PaneBackgroundPer-pane background settings (overrides global config if image_path is set)
title: StringLast-known title from OSC sequences or CWD fallback (empty if never set)
has_default_title: boolTrue 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
impl Pane
Sourcepub fn new(
id: PaneId,
config: &Config,
_runtime: Arc<Runtime>,
working_directory: Option<String>,
) -> Result<Self>
pub fn new( id: PaneId, config: &Config, _runtime: Arc<Runtime>, working_directory: Option<String>, ) -> Result<Self>
Create a new pane with a terminal session
Sourcepub fn new_with_command(
id: PaneId,
config: &Config,
_runtime: Arc<Runtime>,
working_directory: Option<String>,
command: String,
args: Vec<String>,
) -> Result<Self>
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().
Sourcepub fn new_wrapping_terminal(
id: PaneId,
terminal: Arc<RwLock<TerminalManager>>,
working_directory: Option<String>,
is_active: Arc<AtomicBool>,
) -> Self
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 (typically1)terminal— SharedArccloned from the owningTab::terminalworking_directory— Optional CWD exposed viaPane::get_cwdis_active— Shared atomic flag cloned from the owningTab::is_active
Sourcepub fn new_for_tmux(
id: PaneId,
config: &Config,
_runtime: Arc<Runtime>,
) -> Result<Self>
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.
Sourcepub fn is_bell_active(&self) -> bool
pub fn is_bell_active(&self) -> bool
Check if the visual bell is currently active
Sourcepub fn is_running(&self) -> bool
pub fn is_running(&self) -> bool
Check if the terminal in this pane is still running
Sourcepub fn set_background(&mut self, background: PaneBackground)
pub fn set_background(&mut self, background: PaneBackground)
Set per-pane background settings (overrides global config)
Sourcepub fn background(&self) -> &PaneBackground
pub fn background(&self) -> &PaneBackground
Get per-pane background settings
Sourcepub fn set_background_image(&mut self, path: Option<String>)
pub fn set_background_image(&mut self, path: Option<String>)
Set a per-pane background image (overrides global config)
Sourcepub fn get_background_image(&self) -> Option<&str>
pub fn get_background_image(&self) -> Option<&str>
Get the per-pane background image path (if set)
Source§impl Pane
impl Pane
Sourcepub fn respawn_shell(&mut self, config: &Config) -> Result<()>
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.
Sourcepub fn write_restart_prompt(&self)
pub fn write_restart_prompt(&self)
Write a restart prompt message to the terminal
Sourcepub fn start_refresh_task(
&mut self,
runtime: Arc<Runtime>,
window: Arc<Window>,
active_fps: u32,
inactive_fps: u32,
)
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
Sourcepub fn stop_refresh_task(&mut self)
pub fn stop_refresh_task(&mut self)
Stop the refresh polling task
Sourcepub fn resize_terminal(&self, cols: usize, rows: usize)
pub fn resize_terminal(&self, cols: usize, rows: usize)
Resize the terminal to match the pane bounds
Sourcepub fn resize_terminal_with_cell_dims(
&self,
cols: usize,
rows: usize,
cell_width: u32,
cell_height: u32,
)
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§
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> 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
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.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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