From a409123342d673bb8d9d32cc534014381920ee90 Mon Sep 17 00:00:00 2001 From: Peter Schilling Date: Wed, 6 Nov 2024 12:34:49 -0800 Subject: [PATCH] Show workspace name before filename in window title (#20310) when searching for the appropriate zed window, i scan a list of window titles. putting the workspace before the filename makes this list a lot easier to scan. ![CleanShot 2024-11-06 at 11 07 01@2x](https://github.com/user-attachments/assets/2dcbe96d-6f91-443e-bfd2-10bd1c81e679) screenshot of [alt tab](https://alt-tab-macos.netlify.app/) in mac os demonstrating how putting the workspace first makes it easier to locate a project. Release Notes: - Improved window title by showing workspace name before filename --- crates/workspace/src/workspace.rs | 34 +++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index a289e76134c7fbead9f10b26f104ae8098f36a75..c289eaf12bc75c8eabd1c0c75084e400f15e18ce 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -3436,6 +3436,17 @@ impl Workspace { let project = self.project().read(cx); let mut title = String::new(); + for (i, name) in project.worktree_root_names(cx).enumerate() { + if i > 0 { + title.push_str(", "); + } + title.push_str(name); + } + + if title.is_empty() { + title = "empty project".to_string(); + } + if let Some(path) = self.active_item(cx).and_then(|item| item.project_path(cx)) { let filename = path .path @@ -3451,22 +3462,11 @@ impl Workspace { }); if let Some(filename) = filename { - title.push_str(filename.as_ref()); title.push_str(" — "); + title.push_str(filename.as_ref()); } } - for (i, name) in project.worktree_root_names(cx).enumerate() { - if i > 0 { - title.push_str(", "); - } - title.push_str(name); - } - - if title.is_empty() { - title = "empty project".to_string(); - } - if project.is_via_collab() { title.push_str(" ↙"); } else if project.is_shared() { @@ -6211,13 +6211,13 @@ mod tests { .map(|e| e.id) ); }); - assert_eq!(cx.window_title().as_deref(), Some("one.txt — root1")); + assert_eq!(cx.window_title().as_deref(), Some("root1 — one.txt")); // Add a second item to a non-empty pane workspace.update(cx, |workspace, cx| { workspace.add_item_to_active_pane(Box::new(item2), None, true, cx) }); - assert_eq!(cx.window_title().as_deref(), Some("two.txt — root1")); + assert_eq!(cx.window_title().as_deref(), Some("root1 — two.txt")); project.update(cx, |project, cx| { assert_eq!( project.active_entry(), @@ -6233,7 +6233,7 @@ mod tests { }) .await .unwrap(); - assert_eq!(cx.window_title().as_deref(), Some("one.txt — root1")); + assert_eq!(cx.window_title().as_deref(), Some("root1 — one.txt")); project.update(cx, |project, cx| { assert_eq!( project.active_entry(), @@ -6250,11 +6250,11 @@ mod tests { }) .await .unwrap(); - assert_eq!(cx.window_title().as_deref(), Some("one.txt — root1, root2")); + assert_eq!(cx.window_title().as_deref(), Some("root1, root2 — one.txt")); // Remove a project folder project.update(cx, |project, cx| project.remove_worktree(worktree_id, cx)); - assert_eq!(cx.window_title().as_deref(), Some("one.txt — root2")); + assert_eq!(cx.window_title().as_deref(), Some("root2 — one.txt")); } #[gpui::test]