diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 3b2e30a176..7e633a40e6 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -358,6 +358,7 @@ pub fn init(cx: &mut App) { cx.observe_new( |workspace: &mut Workspace, _: Option<&mut Window>, _cx: &mut Context| { workspace.register_action(Editor::new_file); + workspace.register_action(Editor::new_file_split); workspace.register_action(Editor::new_file_vertical); workspace.register_action(Editor::new_file_horizontal); workspace.register_action(Editor::cancel_language_server_work); @@ -2683,6 +2684,15 @@ impl Editor { Self::new_file_in_direction(workspace, SplitDirection::horizontal(cx), window, cx) } + fn new_file_split( + workspace: &mut Workspace, + action: &workspace::NewFileSplit, + window: &mut Window, + cx: &mut Context, + ) { + Self::new_file_in_direction(workspace, action.0, window, cx) + } + fn new_file_in_direction( workspace: &mut Workspace, direction: SplitDirection, diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 053b578ff9..85a17c244b 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -302,6 +302,12 @@ pub struct MoveItemToPaneInDirection { pub clone: bool, } +/// Creates a new file in a split of the desired direction. +#[derive(Clone, Deserialize, PartialEq, JsonSchema, Action)] +#[action(namespace = workspace)] +#[serde(deny_unknown_fields)] +pub struct NewFileSplit(pub SplitDirection); + fn default_right() -> SplitDirection { SplitDirection::Right } diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 4a57939c40..e2116415d4 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -4563,6 +4563,7 @@ mod tests { | "workspace::ActivatePane" | "workspace::MoveItemToPane" | "workspace::MoveItemToPaneInDirection" + | "workspace::NewFileSplit" | "workspace::OpenTerminal" | "workspace::SendKeystrokes" | "agent::NewNativeAgentThreadFromSummary"