diff options
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/panes.rs | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/src/ui/panes.rs b/src/ui/panes.rs index 5233060d..b904ce00 100644 --- a/src/ui/panes.rs +++ b/src/ui/panes.rs @@ -31,8 +31,8 @@ fn pane_border_title(label: &str, pane_width: u16, _focused: bool) -> Option<Str Some(format!(" {} ", truncate_end(label, max_label_width))) } -fn stable_terminal_inner_rect(pane_inner: Rect) -> Rect { - if pane_inner.width <= 4 { +fn stable_terminal_inner_rect(pane_inner: Rect, pane_scrollbars: bool) -> Rect { + if !pane_scrollbars || pane_inner.width <= 4 { return pane_inner; } @@ -143,8 +143,12 @@ fn runtime_for_tab_pane<'a>( .map(|runtime| (terminal_id, runtime)) } -fn stable_scrollbar_gutter(rt: &TerminalRuntime, pane_inner: Rect) -> (Rect, Option<Rect>) { - let inner_rect = stable_terminal_inner_rect(pane_inner); +fn stable_scrollbar_gutter( + rt: &TerminalRuntime, + pane_inner: Rect, + pane_scrollbars: bool, +) -> (Rect, Option<Rect>) { + let inner_rect = stable_terminal_inner_rect(pane_inner, pane_scrollbars); if inner_rect == pane_inner { return (inner_rect, None); } @@ -181,7 +185,7 @@ pub(super) fn resize_tab_panes( Borders::NONE }; let pane_inner = pane_inner_rect(area, borders); - let inner_rect = stable_terminal_inner_rect(pane_inner); + let inner_rect = stable_terminal_inner_rect(pane_inner, app.pane_scrollbars); if !app.direct_attach_resize_locks.contains(terminal_id) { rt.resize( inner_rect.height, @@ -198,7 +202,7 @@ pub(super) fn resize_tab_panes( let pane_inner = pane_inner_rect(info.rect, info.borders); if let Some((terminal_id, rt)) = runtime_for_tab_pane(terminal_runtimes, tab, info.id) { - let inner_rect = stable_terminal_inner_rect(pane_inner); + let inner_rect = stable_terminal_inner_rect(pane_inner, app.pane_scrollbars); if !app.direct_attach_resize_locks.contains(terminal_id) { rt.resize( inner_rect.height, @@ -239,7 +243,8 @@ 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(terminal_runtimes, ws_idx, focused_id) { - (inner_rect, scrollbar_rect) = stable_scrollbar_gutter(rt, pane_inner); + (inner_rect, scrollbar_rect) = + stable_scrollbar_gutter(rt, pane_inner, app.pane_scrollbars); if resize_panes && ws.terminal_id(focused_id).is_some_and(|terminal_id| { !app.direct_attach_resize_locks.contains(terminal_id) @@ -271,7 +276,8 @@ 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(terminal_runtimes, ws_idx, info.id) { - (inner_rect, scrollbar_rect) = stable_scrollbar_gutter(rt, pane_inner); + (inner_rect, scrollbar_rect) = + stable_scrollbar_gutter(rt, pane_inner, app.pane_scrollbars); if resize_panes && ws.terminal_id(info.id).is_some_and(|terminal_id| { !app.direct_attach_resize_locks.contains(terminal_id) @@ -1358,7 +1364,7 @@ mod tests { } #[tokio::test] - async fn pane_scrollbar_reserves_last_column_from_terminal_area() { + async fn pane_scrollbar_setting_controls_reserved_column() { let mut app = AppState::test_new(); let mut workspace = Workspace::test_new("test"); let root_pane = workspace.tabs[0].root_pane; @@ -1388,6 +1394,20 @@ mod tests { assert_eq!(info.rect, area); assert_eq!(info.scrollbar_rect, Some(Rect::new(49, 3, 1, 8))); assert_eq!(info.inner_rect, Rect::new(10, 3, 39, 8)); + + app.pane_scrollbars = false; + let infos = compute_pane_infos( + &app, + &terminal_runtimes, + area, + false, + crate::kitty_graphics::HostCellSize::default(), + ); + let info = &infos[0]; + + assert_eq!(info.rect, area); + assert_eq!(info.scrollbar_rect, None); + assert_eq!(info.inner_rect, area); } #[test] |
