aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/panes.rs38
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]