From e72f5cea227168bbbcc89f683a6182b739d012d1 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 20 May 2022 11:01:20 -0700 Subject: [PATCH] Add "New Window" command --- assets/keymaps/default.json | 3 ++- crates/editor/src/editor.rs | 6 +++--- crates/workspace/src/workspace.rs | 15 ++++++++++++--- crates/zed/src/main.rs | 6 +++--- crates/zed/src/menus.rs | 6 +++++- crates/zed/src/zed.rs | 10 +++++----- 6 files changed, 30 insertions(+), 16 deletions(-) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index 0f2589e31d94b44325573ffc735e3cac8037f6fb..bdf7ab179660b782556c4613a98b7218729a6f78 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -20,7 +20,8 @@ "cmd--": "zed::DecreaseBufferFontSize", "cmd-,": "zed::OpenSettings", "cmd-q": "zed::Quit", - "cmd-n": "workspace::OpenNew", + "cmd-n": "workspace::NewFile", + "cmd-shift-N": "workspace::NewWindow", "cmd-o": "workspace::Open" } }, diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 31dc6df357ead5f76c84fb2397f3eccbf8d72d8e..e5a80e44f4014127cb5cb76090bfd04a1092e65b 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -216,7 +216,7 @@ pub enum Direction { } pub fn init(cx: &mut MutableAppContext) { - cx.add_action(Editor::open_new); + cx.add_action(Editor::new_file); cx.add_action(|this: &mut Editor, action: &Scroll, cx| this.set_scroll_position(action.0, cx)); cx.add_action(Editor::select); cx.add_action(Editor::cancel); @@ -1002,9 +1002,9 @@ impl Editor { this } - pub fn open_new( + pub fn new_file( workspace: &mut Workspace, - _: &workspace::OpenNew, + _: &workspace::NewFile, cx: &mut ViewContext, ) { let project = workspace.project().clone(); diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index d12c8a2eea7d32bb6a8c683600e7ad387b5a5569..b18acee233bec15d63713eb2b30cadd389daaf7a 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -75,7 +75,8 @@ actions!( workspace, [ Open, - OpenNew, + NewFile, + NewWindow, Unfollow, Save, ActivatePreviousPane, @@ -114,7 +115,15 @@ pub fn init(app_state: Arc, cx: &mut MutableAppContext) { }); cx.add_global_action({ let app_state = Arc::downgrade(&app_state); - move |_: &OpenNew, cx: &mut MutableAppContext| { + move |_: &NewFile, cx: &mut MutableAppContext| { + if let Some(app_state) = app_state.upgrade() { + open_new(&app_state, cx) + } + } + }); + cx.add_global_action({ + let app_state = Arc::downgrade(&app_state); + move |_: &NewWindow, cx: &mut MutableAppContext| { if let Some(app_state) = app_state.upgrade() { open_new(&app_state, cx) } @@ -2287,5 +2296,5 @@ fn open_new(app_state: &Arc, cx: &mut MutableAppContext) { (app_state.initialize_workspace)(&mut workspace, app_state, cx); workspace }); - cx.dispatch_action(window_id, vec![workspace.id()], &OpenNew); + cx.dispatch_action(window_id, vec![workspace.id()], &NewFile); } diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 8231d2ac3ff947ac19704c3cb9008645aab18daa..3e21e454f2f9f08f93fec6886938e98eb03d8647 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -38,7 +38,7 @@ use std::{ }; use theme::{ThemeRegistry, DEFAULT_THEME_NAME}; use util::{ResultExt, TryFutureExt}; -use workspace::{self, AppState, OpenNew, OpenPaths}; +use workspace::{self, AppState, NewFile, OpenPaths}; use zed::{ self, build_window_options, fs::RealFs, @@ -206,7 +206,7 @@ fn main() { cx.platform().activate(true); let paths = collect_path_args(); if paths.is_empty() { - cx.dispatch_global_action(OpenNew); + cx.dispatch_global_action(NewFile); } else { cx.dispatch_global_action(OpenPaths { paths }); } @@ -215,7 +215,7 @@ fn main() { cx.spawn(|cx| handle_cli_connection(connection, app_state.clone(), cx)) .detach(); } else { - cx.dispatch_global_action(OpenNew); + cx.dispatch_global_action(NewFile); } cx.spawn(|cx| async move { while let Some(connection) = cli_connections_rx.next().await { diff --git a/crates/zed/src/menus.rs b/crates/zed/src/menus.rs index c5ea7b73912b2dac02239cbc41c869c190c3b4ae..45104399c530c956abfdeb5fbd08fcff33ded23c 100644 --- a/crates/zed/src/menus.rs +++ b/crates/zed/src/menus.rs @@ -31,7 +31,11 @@ pub fn menus() -> Vec> { items: vec![ MenuItem::Action { name: "New", - action: Box::new(workspace::OpenNew), + action: Box::new(workspace::NewFile), + }, + MenuItem::Action { + name: "New Window", + action: Box::new(workspace::NewWindow), }, MenuItem::Separator, MenuItem::Action { diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 4f0f8e21ccfe7ac536f0a7859c99516987e3f0c6..b3d831c9ccac19409f3b0bb37a1e2a763647129d 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -314,7 +314,7 @@ mod tests { }; use theme::{Theme, ThemeRegistry, DEFAULT_THEME_NAME}; use workspace::{ - open_paths, pane, Item, ItemHandle, OpenNew, Pane, SplitDirection, WorkspaceHandle, + open_paths, pane, Item, ItemHandle, NewFile, Pane, SplitDirection, WorkspaceHandle, }; #[gpui::test] @@ -376,7 +376,7 @@ mod tests { #[gpui::test] async fn test_new_empty_workspace(cx: &mut TestAppContext) { let app_state = init(cx); - cx.dispatch_global_action(workspace::OpenNew); + cx.dispatch_global_action(workspace::NewFile); let window_id = *cx.window_ids().first().unwrap(); let workspace = cx.root_view::(window_id).unwrap(); let editor = workspace.update(cx, |workspace, cx| { @@ -686,7 +686,7 @@ mod tests { let worktree = cx.read(|cx| workspace.read(cx).worktrees(cx).next().unwrap()); // Create a new untitled buffer - cx.dispatch_action(window_id, OpenNew); + cx.dispatch_action(window_id, NewFile); let editor = workspace.read_with(cx, |workspace, cx| { workspace .active_item(cx) @@ -741,7 +741,7 @@ mod tests { // Open the same newly-created file in another pane item. The new editor should reuse // the same buffer. - cx.dispatch_action(window_id, OpenNew); + cx.dispatch_action(window_id, NewFile); workspace .update(cx, |workspace, cx| { workspace.split_pane(workspace.active_pane().clone(), SplitDirection::Right, cx); @@ -774,7 +774,7 @@ mod tests { let (window_id, workspace) = cx.add_window(|cx| Workspace::new(project, cx)); // Create a new untitled buffer - cx.dispatch_action(window_id, OpenNew); + cx.dispatch_action(window_id, NewFile); let editor = workspace.read_with(cx, |workspace, cx| { workspace .active_item(cx)