pub struct TabManager { /* private fields */ }Expand description
Manages multiple terminal tabs within a single window
Implementations§
Source§impl TabManager
impl TabManager
Sourcepub fn new_tab(
&mut self,
config: &Config,
runtime: Arc<Runtime>,
inherit_cwd_from_active: bool,
grid_size: Option<(usize, usize)>,
) -> Result<TabId>
pub fn new_tab( &mut self, config: &Config, runtime: Arc<Runtime>, inherit_cwd_from_active: bool, grid_size: Option<(usize, usize)>, ) -> Result<TabId>
Create a new tab and return its ID
§Arguments
config- Terminal configurationruntime- Tokio runtime for async operationsinherit_cwd_from_active- Whether to inherit working directory from active tabgrid_size- Optional (cols, rows) override for initial terminal size. When provided, these dimensions are used instead of config.cols/rows. This is important when the renderer has already calculated the correct grid size accounting for tab bar height.
Sourcepub fn new_tab_with_cwd(
&mut self,
config: &Config,
runtime: Arc<Runtime>,
working_dir: Option<String>,
grid_size: Option<(usize, usize)>,
) -> Result<TabId>
pub fn new_tab_with_cwd( &mut self, config: &Config, runtime: Arc<Runtime>, working_dir: Option<String>, grid_size: Option<(usize, usize)>, ) -> Result<TabId>
Create a new tab with a specific working directory
Used by arrangement restore to create tabs with saved CWDs.
Sourcepub fn new_tab_from_profile(
&mut self,
config: &Config,
runtime: Arc<Runtime>,
profile: &Profile,
grid_size: Option<(usize, usize)>,
) -> Result<TabId>
pub fn new_tab_from_profile( &mut self, config: &Config, runtime: Arc<Runtime>, profile: &Profile, grid_size: Option<(usize, usize)>, ) -> Result<TabId>
Create a new tab from a profile configuration
The profile specifies the working directory, command, and tab name.
§Arguments
config- Terminal configurationruntime- Tokio runtime for async operationsprofile- Profile configuration to usegrid_size- Optional (cols, rows) override for initial terminal size
Sourcepub fn close_tab(&mut self, id: TabId) -> bool
pub fn close_tab(&mut self, id: TabId) -> bool
Close a tab by ID Returns true if this was the last tab (window should close)
Sourcepub fn remove_tab(&mut self, id: TabId) -> Option<(Tab, bool)>
pub fn remove_tab(&mut self, id: TabId) -> Option<(Tab, bool)>
Remove a tab by ID without dropping it, returning the live Tab.
Handles active tab switching and renumbering just like close_tab,
but returns the Tab so the caller can keep it alive.
Returns Some((tab, is_empty)) if the tab was found, None otherwise.
Sourcepub fn insert_tab_at(&mut self, tab: Tab, index: usize)
pub fn insert_tab_at(&mut self, tab: Tab, index: usize)
Insert a live Tab at a specific index and make it active.
The index is clamped to 0..=self.tabs.len().
Sourcepub fn active_tab(&self) -> Option<&Tab>
pub fn active_tab(&self) -> Option<&Tab>
Get a reference to the active tab
Sourcepub fn active_tab_mut(&mut self) -> Option<&mut Tab>
pub fn active_tab_mut(&mut self) -> Option<&mut Tab>
Get a mutable reference to the active tab
Sourcepub fn switch_to_index(&mut self, index: usize)
pub fn switch_to_index(&mut self, index: usize)
Switch to tab by index (1-based for Cmd+1-9)
Sourcepub fn move_tab(&mut self, id: TabId, direction: i32)
pub fn move_tab(&mut self, id: TabId, direction: i32)
Move a tab left or right direction: -1 for left, 1 for right
Sourcepub fn move_tab_to_index(&mut self, id: TabId, target_index: usize) -> bool
pub fn move_tab_to_index(&mut self, id: TabId, target_index: usize) -> bool
Move a tab to a specific index (used by drag-and-drop reordering) Returns true if the tab was actually moved, false if not found or already at target
Sourcepub fn move_active_tab_left(&mut self)
pub fn move_active_tab_left(&mut self)
Move active tab left
Sourcepub fn move_active_tab_right(&mut self)
pub fn move_active_tab_right(&mut self)
Move active tab right
Sourcepub fn has_multiple_tabs(&self) -> bool
pub fn has_multiple_tabs(&self) -> bool
Check if there are multiple tabs
Sourcepub fn active_tab_id(&self) -> Option<TabId>
pub fn active_tab_id(&self) -> Option<TabId>
Get the active tab ID
Sourcepub fn drain_tabs(&mut self) -> Vec<Tab>
pub fn drain_tabs(&mut self) -> Vec<Tab>
Drain all tabs from the manager, returning them without dropping
This is used during fast shutdown to extract tabs so their terminals can be dropped on background threads in parallel.
Sourcepub fn get_tab_mut(&mut self, id: TabId) -> Option<&mut Tab>
pub fn get_tab_mut(&mut self, id: TabId) -> Option<&mut Tab>
Get a mutable reference to a tab by ID
Sourcepub fn mark_activity(&mut self, tab_id: TabId)
pub fn mark_activity(&mut self, tab_id: TabId)
Mark non-active tabs as having activity when they receive output
Sourcepub fn update_all_titles(&mut self)
pub fn update_all_titles(&mut self)
Update titles for all tabs
Sourcepub fn duplicate_active_tab(
&mut self,
config: &Config,
runtime: Arc<Runtime>,
grid_size: Option<(usize, usize)>,
) -> Result<Option<TabId>>
pub fn duplicate_active_tab( &mut self, config: &Config, runtime: Arc<Runtime>, grid_size: Option<(usize, usize)>, ) -> Result<Option<TabId>>
Duplicate the active tab (creates new tab with same working directory and color)
§Arguments
config- Terminal configurationruntime- Tokio runtime for async operationsgrid_size- Optional (cols, rows) override for initial terminal size
Sourcepub fn duplicate_tab_by_id(
&mut self,
source_tab_id: TabId,
config: &Config,
runtime: Arc<Runtime>,
grid_size: Option<(usize, usize)>,
) -> Result<Option<TabId>>
pub fn duplicate_tab_by_id( &mut self, source_tab_id: TabId, config: &Config, runtime: Arc<Runtime>, grid_size: Option<(usize, usize)>, ) -> Result<Option<TabId>>
Duplicate a specific tab by ID (creates new tab with same working directory and color)
§Arguments
source_tab_id- The ID of the tab to duplicateconfig- Terminal configurationruntime- Tokio runtime for async operationsgrid_size- Optional (cols, rows) override for initial terminal size
Sourcepub fn active_tab_index(&self) -> Option<usize>
pub fn active_tab_index(&self) -> Option<usize>
Get index of active tab (0-based)
Sourcepub fn cleanup_dead_tabs(&mut self)
pub fn cleanup_dead_tabs(&mut self)
Clean up closed/dead tabs
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TabManager
impl !RefUnwindSafe for TabManager
impl Send for TabManager
impl Sync for TabManager
impl Unpin for TabManager
impl UnsafeUnpin for TabManager
impl !UnwindSafe for TabManager
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
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
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 moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().