diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-21 20:19:54 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-21 20:22:57 +0300 |
| commit | 866aaf740e10fcfce169aaf81380ea0257fbe272 (patch) | |
| tree | f815392b7c6b24a7c0de14e655bd635656383813 /src/ui | |
| parent | ca579c402d5668560ca13059f82c03178be18b2a (diff) | |
refactor: separate server client boundaries
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/mobile.rs | 10 | ||||
| -rw-r--r-- | src/ui/panes.rs | 35 | ||||
| -rw-r--r-- | src/ui/sidebar.rs | 7 |
3 files changed, 30 insertions, 22 deletions
diff --git a/src/ui/mobile.rs b/src/ui/mobile.rs index 7b12177b..8bcdf184 100644 --- a/src/ui/mobile.rs +++ b/src/ui/mobile.rs @@ -286,10 +286,7 @@ fn render_header_status(app: &AppState, frame: &mut Frame, area: Rect) { Span::styled(dot, dot_style.bg(p.panel_bg)), Span::raw(" "), Span::styled( - truncate( - &ws.display_name_from(&app.terminals, &app.terminal_runtimes), - name_w.saturating_sub(4) as usize, - ), + truncate(&ws.display_name(), name_w.saturating_sub(4) as usize), Style::default() .fg(p.text) .bg(p.panel_bg) @@ -440,10 +437,7 @@ fn render_mobile_switcher_content(app: &AppState, frame: &mut Frame, viewport: R Span::styled(dot, dot_style.bg(bg)), Span::styled(" ", Style::default().bg(bg)), Span::styled( - truncate( - &ws.display_name_from(&app.terminals, &app.terminal_runtimes), - content.width.saturating_sub(5) as usize, - ), + truncate(&ws.display_name(), content.width.saturating_sub(5) as usize), Style::default() .fg(p.text) .bg(bg) diff --git a/src/ui/panes.rs b/src/ui/panes.rs index 550d34ce..a1729cd6 100644 --- a/src/ui/panes.rs +++ b/src/ui/panes.rs @@ -11,7 +11,7 @@ use super::widgets::panel_contrast_fg; use crate::app::state::Palette; use crate::app::{AppState, Mode}; use crate::layout::PaneInfo; -use crate::terminal::TerminalRuntime; +use crate::terminal::{TerminalRuntime, TerminalRuntimeRegistry}; pub(crate) fn pane_is_scrolled_back(rt: &TerminalRuntime) -> bool { rt.scroll_metrics() @@ -64,7 +64,7 @@ fn pane_inner_rect(area: Rect, framed: bool) -> Rect { } fn runtime_for_tab_pane<'a>( - app: &'a AppState, + terminal_runtimes: &'a TerminalRuntimeRegistry, tab: &'a crate::workspace::Tab, pane_id: crate::layout::PaneId, ) -> Option<(&'a crate::terminal::TerminalId, &'a TerminalRuntime)> { @@ -73,7 +73,7 @@ fn runtime_for_tab_pane<'a>( if let Some(runtime) = tab.runtimes.get(&pane_id) { return Some((terminal_id, runtime)); } - app.terminal_runtimes + terminal_runtimes .get(terminal_id) .map(|runtime| (terminal_id, runtime)) } @@ -100,6 +100,7 @@ fn stable_scrollbar_gutter(rt: &TerminalRuntime, pane_inner: Rect) -> (Rect, Opt /// Resize every visible runtime in a tab to the geometry it would receive if the tab were selected. pub(super) fn resize_tab_panes( app: &AppState, + terminal_runtimes: &TerminalRuntimeRegistry, tab: &crate::workspace::Tab, area: Rect, cell_size: crate::kitty_graphics::HostCellSize, @@ -108,7 +109,7 @@ pub(super) fn resize_tab_panes( if tab.zoomed { let focused_id = tab.layout.focused(); - if let Some((terminal_id, rt)) = runtime_for_tab_pane(app, tab, focused_id) { + if let Some((terminal_id, rt)) = runtime_for_tab_pane(terminal_runtimes, tab, focused_id) { let pane_inner = pane_inner_rect(area, multi_pane); let inner_rect = stable_terminal_inner_rect(pane_inner); if !app.direct_attach_resize_locks.contains(terminal_id) { @@ -130,7 +131,7 @@ pub(super) fn resize_tab_panes( area }; - if let Some((terminal_id, rt)) = runtime_for_tab_pane(app, tab, info.id) { + if let Some((terminal_id, rt)) = runtime_for_tab_pane(terminal_runtimes, tab, info.id) { let inner_rect = stable_terminal_inner_rect(pane_inner); if !app.direct_attach_resize_locks.contains(terminal_id) { rt.resize( @@ -147,6 +148,7 @@ pub(super) fn resize_tab_panes( /// Compute pane layout info and optionally resize pane runtimes to match. pub(super) fn compute_pane_infos( app: &AppState, + terminal_runtimes: &TerminalRuntimeRegistry, area: Rect, resize_panes: bool, cell_size: crate::kitty_graphics::HostCellSize, @@ -166,7 +168,7 @@ pub(super) fn compute_pane_infos( let pane_inner = pane_inner_rect(area, multi_pane); let mut inner_rect = pane_inner; let mut scrollbar_rect = None; - if let Some(rt) = app.runtime_for_pane_in_workspace(ws_idx, focused_id) { + if let Some(rt) = app.runtime_for_pane_in_workspace(terminal_runtimes, ws_idx, focused_id) { (inner_rect, scrollbar_rect) = stable_scrollbar_gutter(rt, pane_inner); if resize_panes && ws.terminal_id(focused_id).is_some_and(|terminal_id| { @@ -209,7 +211,7 @@ pub(super) fn compute_pane_infos( let mut inner_rect = pane_inner; let mut scrollbar_rect = None; - if let Some(rt) = app.runtime_for_pane_in_workspace(ws_idx, info.id) { + if let Some(rt) = app.runtime_for_pane_in_workspace(terminal_runtimes, ws_idx, info.id) { (inner_rect, scrollbar_rect) = stable_scrollbar_gutter(rt, pane_inner); if resize_panes && ws.terminal_id(info.id).is_some_and(|terminal_id| { @@ -232,7 +234,12 @@ pub(super) fn compute_pane_infos( pane_infos } -pub(super) fn render_panes(app: &AppState, frame: &mut Frame, area: Rect) { +pub(super) fn render_panes( + app: &AppState, + terminal_runtimes: &TerminalRuntimeRegistry, + frame: &mut Frame, + area: Rect, +) { let Some(ws_idx) = app.active else { render_empty(app, frame, area); return; @@ -246,7 +253,7 @@ pub(super) fn render_panes(app: &AppState, frame: &mut Frame, area: Rect) { let terminal_active = app.mode == Mode::Terminal; for info in &app.view.pane_infos { - if let Some(rt) = app.runtime_for_pane_in_workspace(ws_idx, info.id) { + if let Some(rt) = app.runtime_for_pane_in_workspace(terminal_runtimes, ws_idx, info.id) { if multi_pane { let (border_style, border_set) = if info.is_focused && terminal_active { ( @@ -404,8 +411,10 @@ mod tests { app.active = Some(0); let area = Rect::new(10, 3, 40, 8); + let terminal_runtimes = TerminalRuntimeRegistry::new(); let infos = compute_pane_infos( &app, + &terminal_runtimes, area, false, crate::kitty_graphics::HostCellSize::default(), @@ -431,8 +440,10 @@ mod tests { app.active = Some(0); let area = Rect::new(10, 3, 40, 8); + let terminal_runtimes = TerminalRuntimeRegistry::new(); let infos = compute_pane_infos( &app, + &terminal_runtimes, area, false, crate::kitty_graphics::HostCellSize::default(), @@ -458,8 +469,10 @@ mod tests { app.active = Some(0); let area = Rect::new(10, 3, 40, 8); + let terminal_runtimes = TerminalRuntimeRegistry::new(); let infos = compute_pane_infos( &app, + &terminal_runtimes, area, false, crate::kitty_graphics::HostCellSize::default(), @@ -485,8 +498,10 @@ mod tests { app.active = Some(0); let area = Rect::new(10, 3, 4, 8); + let terminal_runtimes = TerminalRuntimeRegistry::new(); let infos = compute_pane_infos( &app, + &terminal_runtimes, area, false, crate::kitty_graphics::HostCellSize::default(), @@ -516,8 +531,10 @@ mod tests { app.active = Some(0); let area = Rect::new(10, 3, 40, 8); + let terminal_runtimes = TerminalRuntimeRegistry::new(); let infos = compute_pane_infos( &app, + &terminal_runtimes, area, false, crate::kitty_graphics::HostCellSize::default(), diff --git a/src/ui/sidebar.rs b/src/ui/sidebar.rs index 1d722d2a..a2432716 100644 --- a/src/ui/sidebar.rs +++ b/src/ui/sidebar.rs @@ -138,7 +138,7 @@ pub(crate) fn agent_panel_entries(app: &AppState) -> Vec<AgentPanelEntry> { .enumerate() .flat_map(|(ws_idx, ws)| { let multi_tab = ws.tabs.len() > 1; - let workspace_label = ws.display_name_from(&app.terminals, &app.terminal_runtimes); + let workspace_label = ws.display_name(); ws.pane_details(&app.terminals) .into_iter() .map(move |detail| AgentPanelEntry { @@ -647,10 +647,7 @@ fn render_workspace_list(app: &AppState, frame: &mut Frame, area: Rect, is_navig Span::styled(" ", Style::default()), Span::styled(icon, icon_style), Span::styled(" ", Style::default()), - Span::styled( - ws.display_name_from(&app.terminals, &app.terminal_runtimes), - name_style, - ), + Span::styled(ws.display_name(), name_style), ]; frame.render_widget( |
