From 426979e1976673b4adb2678dba770eccc124b117 Mon Sep 17 00:00:00 2001 From: iamazy Date: Fri, 17 Jul 2026 18:58:29 +0800 Subject: [PATCH 1/4] feat: show path after recording --- crates/gpui_term/src/view/mod.rs | 33 +++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/crates/gpui_term/src/view/mod.rs b/crates/gpui_term/src/view/mod.rs index 98df738..dfb5282 100644 --- a/crates/gpui_term/src/view/mod.rs +++ b/crates/gpui_term/src/view/mod.rs @@ -1,4 +1,4 @@ -use std::{ops::Range, sync::Arc, time::Duration}; +use std::{ops::Range, path::PathBuf, sync::Arc, time::Duration}; use gpui::{ Action, AnyElement, App, Context, Entity, EventEmitter, FocusHandle, Focusable, KeyContext, @@ -213,6 +213,7 @@ pub struct TerminalView { snippet: Option, context_menu_enabled: bool, context_menu_provider: Option>, + cast_recording_path: Option, _subscriptions: Vec, _terminal_subscriptions: Vec, } @@ -318,6 +319,7 @@ impl TerminalView { snippet: None, context_menu_enabled, context_menu_provider, + cast_recording_path: None, _subscriptions: vec![focus_in, focus_out], _terminal_subscriptions: terminal_subscriptions, } @@ -495,13 +497,16 @@ impl TerminalView { }); match result { - Ok(()) => self.show_toast( - PromptLevel::Info, - "Recording started", - Some(path.display().to_string()), - window, - cx, - ), + Ok(()) => { + self.cast_recording_path = Some(path.clone()); + self.show_toast( + PromptLevel::Info, + "Recording started", + Some(format!("Path: {}", path.display())), + window, + cx, + ) + } Err(err) => self.show_toast( PromptLevel::Warning, "Recording failed", @@ -527,7 +532,17 @@ impl TerminalView { self.terminal.update(cx, |term, _| { term.stop_cast_recording(); }); - self.show_toast(PromptLevel::Info, "Recording stopped", None, window, cx); + let path_detail = self + .cast_recording_path + .take() + .map(|p| format!("Path: {}", p.display())); + self.show_toast( + PromptLevel::Info, + "Recording stopped", + path_detail, + window, + cx, + ); } fn toggle_cast_recording( From 5c302fac01438ad607c28608f66156829d701581 Mon Sep 17 00:00:00 2001 From: iamazy Date: Fri, 17 Jul 2026 19:21:11 +0800 Subject: [PATCH 2/4] feat: limit max size of dock panel --- crates/gpui_dock/src/dock.rs | 39 +++++++++++++++++--------- termua/src/window/main_window/state.rs | 6 ++-- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/crates/gpui_dock/src/dock.rs b/crates/gpui_dock/src/dock.rs index 8c6d790..ccb41ce 100644 --- a/crates/gpui_dock/src/dock.rs +++ b/crates/gpui_dock/src/dock.rs @@ -68,6 +68,8 @@ pub struct Dock { pub(super) size: Pixels, /// The minimum size of the dock (width/height depending on placement). pub(super) min_size: Pixels, + /// The maximum size of the dock (width/height depending on placement). + pub(super) max_size: Option, pub(super) open: bool, /// Whether the Dock is collapsible, default: true pub(super) collapsible: bool, @@ -106,6 +108,7 @@ impl Dock { collapsible: true, size: px(200.0), min_size: PANEL_MIN_SIZE, + max_size: None, resizing: false, } } @@ -179,6 +182,7 @@ impl Dock { open, size, min_size: PANEL_MIN_SIZE, + max_size: None, collapsible: true, resizing: false, } @@ -262,9 +266,21 @@ impl Dock { cx.notify(); } + pub fn set_max_size(&mut self, max_size: Pixels, _: &mut Window, cx: &mut Context) { + self.max_size = Some(max_size.max(self.min_size)); + if self.size > max_size { + self.size = max_size; + } + cx.notify(); + } + /// Set the size of the Dock. pub fn set_size(&mut self, size: Pixels, _: &mut Window, cx: &mut Context) { - self.size = size.max(self.min_size); + let mut size = size.max(self.min_size); + if let Some(max) = self.max_size { + size = size.min(max); + } + self.size = size; cx.notify(); } @@ -365,23 +381,20 @@ impl Dock { DockPlacement::Center => unreachable!(), }; let min_size = self.min_size; - match self.placement { + let max_size = match self.placement { DockPlacement::Left => { - let max_size = - (area_bounds.size.width - PANEL_MIN_SIZE - right_dock_size).max(min_size); - self.size = size.clamp(min_size, max_size); + (area_bounds.size.width - PANEL_MIN_SIZE - right_dock_size).max(min_size) } DockPlacement::Right => { - let max_size = - (area_bounds.size.width - PANEL_MIN_SIZE - left_dock_size).max(min_size); - self.size = size.clamp(min_size, max_size); - } - DockPlacement::Bottom => { - let max_size = (area_bounds.size.height - PANEL_MIN_SIZE).max(min_size); - self.size = size.clamp(min_size, max_size); + (area_bounds.size.width - PANEL_MIN_SIZE - left_dock_size).max(min_size) } + DockPlacement::Bottom => (area_bounds.size.height - PANEL_MIN_SIZE).max(min_size), DockPlacement::Center => unreachable!(), - } + }; + let max_size = self + .max_size + .map_or(max_size, |self_max| max_size.min(self_max)); + self.size = size.clamp(min_size, max_size); cx.notify(); } diff --git a/termua/src/window/main_window/state.rs b/termua/src/window/main_window/state.rs index 7f49298..f0cafcd 100644 --- a/termua/src/window/main_window/state.rs +++ b/termua/src/window/main_window/state.rs @@ -200,7 +200,8 @@ impl TermuaWindow { ); if let Some(left) = dock.left_dock().cloned() { left.update(cx, |dock, cx| { - dock.set_min_size(gpui::px(220.0), window, cx) + dock.set_min_size(gpui::px(220.0), window, cx); + dock.set_max_size(gpui::px(400.0), window, cx); }); } dock.set_right_dock( @@ -212,7 +213,8 @@ impl TermuaWindow { ); if let Some(right) = dock.right_dock().cloned() { right.update(cx, |dock, cx| { - dock.set_min_size(gpui::px(320.0), window, cx) + dock.set_min_size(gpui::px(320.0), window, cx); + dock.set_max_size(gpui::px(400.0), window, cx); }); } }); From fef1747093affffe7096ff05baa4ea7b832436a0 Mon Sep 17 00:00:00 2001 From: iamazy Date: Fri, 17 Jul 2026 19:53:14 +0800 Subject: [PATCH 3/4] Update state.rs --- termua/src/window/main_window/state.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/termua/src/window/main_window/state.rs b/termua/src/window/main_window/state.rs index f0cafcd..7f6522f 100644 --- a/termua/src/window/main_window/state.rs +++ b/termua/src/window/main_window/state.rs @@ -213,7 +213,7 @@ impl TermuaWindow { ); if let Some(right) = dock.right_dock().cloned() { right.update(cx, |dock, cx| { - dock.set_min_size(gpui::px(320.0), window, cx); + dock.set_min_size(gpui::px(220.0), window, cx); dock.set_max_size(gpui::px(400.0), window, cx); }); } From bc6350e60dee02047f1cba62d22ef6212f9ceaf6 Mon Sep 17 00:00:00 2001 From: iamazy Date: Fri, 17 Jul 2026 20:47:07 +0800 Subject: [PATCH 4/4] Update tests.rs --- termua/src/window/main_window/tests.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/termua/src/window/main_window/tests.rs b/termua/src/window/main_window/tests.rs index b1259df..7618a1e 100644 --- a/termua/src/window/main_window/tests.rs +++ b/termua/src/window/main_window/tests.rs @@ -2095,8 +2095,8 @@ fn right_sidebar_width_is_clamped_to_min_width(cx: &mut gpui::TestAppContext) { .expect("expected right sidebar to still render"); assert!( - after.size.width >= gpui::px(320.0), - "expected right sidebar width to be clamped to >= 320px, got {:?}", + after.size.width >= gpui::px(220.0), + "expected right sidebar width to be clamped to >= 220px, got {:?}", after.size.width ); }