-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Workspace move editor actions #21760
base: main
Are you sure you want to change the base?
Changes from all commits
fd16746
12ab1f7
f6e85f3
63a60f9
159b11b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -36,8 +36,9 @@ use workspace::{ | |||||
move_item, pane, | ||||||
ui::IconName, | ||||||
ActivateNextPane, ActivatePane, ActivatePaneInDirection, ActivatePreviousPane, DraggedTab, | ||||||
ItemId, NewTerminal, Pane, PaneGroup, SplitDirection, SplitDown, SplitLeft, SplitRight, | ||||||
SplitUp, SwapPaneInDirection, ToggleZoom, Workspace, | ||||||
ItemId, MoveItemToPane, MoveItemToPaneInDirection, NewTerminal, Pane, PaneGroup, | ||||||
SplitDirection, SplitDown, SplitLeft, SplitRight, SplitUp, SwapPaneInDirection, ToggleZoom, | ||||||
Workspace, | ||||||
}; | ||||||
|
||||||
use anyhow::Result; | ||||||
|
@@ -1124,8 +1125,8 @@ impl Render for TerminalPanel { | |||||
.detach(); | ||||||
} | ||||||
})) | ||||||
.on_action(cx.listener( | ||||||
|terminal_panel, action: &SwapPaneInDirection, cx| { | ||||||
.on_action( | ||||||
cx.listener(|terminal_panel, action: &SwapPaneInDirection, cx| { | ||||||
SomeoneToIgnore marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
if let Some(to) = terminal_panel | ||||||
.center | ||||||
.find_pane_in_direction(&terminal_panel.active_pane, action.0, cx) | ||||||
|
@@ -1136,6 +1137,39 @@ impl Render for TerminalPanel { | |||||
.swap(&terminal_panel.active_pane.clone(), &to); | ||||||
cx.notify(); | ||||||
} | ||||||
}), | ||||||
) | ||||||
.on_action(cx.listener(|terminal_panel, action: &MoveItemToPane, cx| { | ||||||
let panes = terminal_panel.center.panes(); | ||||||
let Some(target_pane) = panes.get(action.0).map(|p| (*p).clone()) else { | ||||||
return; | ||||||
}; | ||||||
let source_pane = terminal_panel.active_pane.clone(); | ||||||
terminal_panel.center.move_active_item( | ||||||
&source_pane, | ||||||
&target_pane, | ||||||
true, | ||||||
true, | ||||||
cx, | ||||||
); | ||||||
})) | ||||||
.on_action(cx.listener( | ||||||
|terminal_panel, action: &MoveItemToPaneInDirection, cx| { | ||||||
let source_pane = terminal_panel.active_pane.clone(); | ||||||
let Some(target_pane) = terminal_panel | ||||||
.center | ||||||
.find_pane_in_direction(&source_pane, action.0, cx) | ||||||
.cloned() | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
NIT: The other part does not need this, so we can also do it in a similar way? |
||||||
else { | ||||||
return; | ||||||
}; | ||||||
terminal_panel.center.move_active_item( | ||||||
&source_pane, | ||||||
&target_pane, | ||||||
true, | ||||||
true, | ||||||
cx, | ||||||
); | ||||||
}, | ||||||
)) | ||||||
}) | ||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -121,6 +121,35 @@ impl PaneGroup { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pub fn move_active_item( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Looking at the code better, it looks like we have zed/crates/workspace/src/workspace.rs Lines 6150 to 6180 in 7b7d5dc
which does almost the same thing but also focuses the right pane? Let's unity them (by removing this method and moving the existing one here; optionally we can also replace I think, that focusing the last pane is important, and might solve the observed lag issues. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
&self, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from: &View<Pane>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
to: &View<Pane>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
focus_target: bool, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
close_if_empty: bool, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cx: &mut WindowContext, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if from == to { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let Some(active_item) = from.read(cx).active_item() else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from.update(cx, |source_pane, cx| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
let item_id = active_item.item_id(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
source_pane.remove_item(item_id, false, close_if_empty, cx); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
to.update(cx, |target_pane, cx| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
target_pane.add_item( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
active_item, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
focus_target, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
focus_target, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Some(target_pane.items_len()), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cx, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#[allow(clippy::too_many_arguments)] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pub fn render( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
&self, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These two lines look unrelated?
I see two more below, and same question to
AddSelectionAbove
andAddSelectionBelow
.