Merge c476d4c8fe
into 0e575b2809
This commit is contained in:
commit
a5f901919e
2 changed files with 55 additions and 6 deletions
|
@ -820,6 +820,8 @@
|
||||||
"t": "project_panel::OpenPermanent",
|
"t": "project_panel::OpenPermanent",
|
||||||
"v": "project_panel::OpenPermanent",
|
"v": "project_panel::OpenPermanent",
|
||||||
"p": "project_panel::Open",
|
"p": "project_panel::Open",
|
||||||
|
"ctrl-v": "project_panel::OpenSplitRight",
|
||||||
|
"ctrl-x": "project_panel::OpenSplitUp",
|
||||||
"x": "project_panel::RevealInFileManager",
|
"x": "project_panel::RevealInFileManager",
|
||||||
"s": "workspace::OpenWithSystem",
|
"s": "workspace::OpenWithSystem",
|
||||||
"z d": "project_panel::CompareMarkedFiles",
|
"z d": "project_panel::CompareMarkedFiles",
|
||||||
|
|
|
@ -64,7 +64,7 @@ use ui::{
|
||||||
use util::{ResultExt, TakeUntilExt, TryFutureExt, maybe, paths::compare_paths};
|
use util::{ResultExt, TakeUntilExt, TryFutureExt, maybe, paths::compare_paths};
|
||||||
use workspace::{
|
use workspace::{
|
||||||
DraggedSelection, OpenInTerminal, OpenOptions, OpenVisible, PreviewTabsSettings, SelectedEntry,
|
DraggedSelection, OpenInTerminal, OpenOptions, OpenVisible, PreviewTabsSettings, SelectedEntry,
|
||||||
Workspace,
|
SplitDirection, Workspace,
|
||||||
dock::{DockPosition, Panel, PanelEvent},
|
dock::{DockPosition, Panel, PanelEvent},
|
||||||
notifications::{DetachAndPromptErr, NotifyTaskExt},
|
notifications::{DetachAndPromptErr, NotifyTaskExt},
|
||||||
};
|
};
|
||||||
|
@ -264,6 +264,10 @@ actions!(
|
||||||
Rename,
|
Rename,
|
||||||
/// Opens the selected file in the editor.
|
/// Opens the selected file in the editor.
|
||||||
Open,
|
Open,
|
||||||
|
/// Opens the selected file in a right editor.
|
||||||
|
OpenSplitRight,
|
||||||
|
/// Opens the selected file in an above editor.
|
||||||
|
OpenSplitUp,
|
||||||
/// Opens the selected file in a permanent tab.
|
/// Opens the selected file in a permanent tab.
|
||||||
OpenPermanent,
|
OpenPermanent,
|
||||||
/// Toggles focus on the project panel.
|
/// Toggles focus on the project panel.
|
||||||
|
@ -371,6 +375,7 @@ pub enum Event {
|
||||||
},
|
},
|
||||||
SplitEntry {
|
SplitEntry {
|
||||||
entry_id: ProjectEntryId,
|
entry_id: ProjectEntryId,
|
||||||
|
split_direction: Option<SplitDirection>,
|
||||||
},
|
},
|
||||||
Focus,
|
Focus,
|
||||||
}
|
}
|
||||||
|
@ -700,15 +705,17 @@ impl ProjectPanel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&Event::SplitEntry { entry_id } => {
|
&Event::SplitEntry { entry_id, split_direction } => {
|
||||||
if let Some(worktree) = project.read(cx).worktree_for_entry(entry_id, cx)
|
if let Some(worktree) = project.read(cx).worktree_for_entry(entry_id, cx)
|
||||||
&& let Some(entry) = worktree.read(cx).entry_for_id(entry_id) {
|
&& let Some(entry) = worktree.read(cx).entry_for_id(entry_id) {
|
||||||
workspace
|
workspace
|
||||||
.split_path(
|
.split_path_preview(
|
||||||
ProjectPath {
|
ProjectPath {
|
||||||
worktree_id: worktree.read(cx).id(),
|
worktree_id: worktree.read(cx).id(),
|
||||||
path: entry.path.clone(),
|
path: entry.path.clone(),
|
||||||
},
|
},
|
||||||
|
false,
|
||||||
|
split_direction,
|
||||||
window, cx,
|
window, cx,
|
||||||
)
|
)
|
||||||
.detach_and_log_err(cx);
|
.detach_and_log_err(cx);
|
||||||
|
@ -1303,10 +1310,40 @@ impl ProjectPanel {
|
||||||
self.open_internal(true, !preview_tabs_enabled, window, cx);
|
self.open_internal(true, !preview_tabs_enabled, window, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn open_split_right(
|
||||||
|
&mut self,
|
||||||
|
_: &OpenSplitRight,
|
||||||
|
window: &mut Window,
|
||||||
|
cx: &mut Context<Self>,
|
||||||
|
) {
|
||||||
|
self.open_split_internal(Some(SplitDirection::Right), window, cx);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn open_split_up(&mut self, _: &OpenSplitUp, window: &mut Window, cx: &mut Context<Self>) {
|
||||||
|
self.open_split_internal(Some(SplitDirection::Up), window, cx);
|
||||||
|
}
|
||||||
|
|
||||||
fn open_permanent(&mut self, _: &OpenPermanent, window: &mut Window, cx: &mut Context<Self>) {
|
fn open_permanent(&mut self, _: &OpenPermanent, window: &mut Window, cx: &mut Context<Self>) {
|
||||||
self.open_internal(false, true, window, cx);
|
self.open_internal(false, true, window, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn open_split_internal(
|
||||||
|
&mut self,
|
||||||
|
split_direction: Option<SplitDirection>,
|
||||||
|
window: &mut Window,
|
||||||
|
cx: &mut Context<Self>,
|
||||||
|
) {
|
||||||
|
let split_direction = split_direction.or(Some(SplitDirection::Right));
|
||||||
|
if let Some((_, entry)) = self.selected_entry(cx) {
|
||||||
|
if entry.is_file() {
|
||||||
|
self.split_entry(entry.id, split_direction, cx);
|
||||||
|
cx.notify();
|
||||||
|
} else {
|
||||||
|
self.toggle_expanded(entry.id, window, cx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn open_internal(
|
fn open_internal(
|
||||||
&mut self,
|
&mut self,
|
||||||
allow_preview: bool,
|
allow_preview: bool,
|
||||||
|
@ -1554,8 +1591,16 @@ impl ProjectPanel {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn split_entry(&mut self, entry_id: ProjectEntryId, cx: &mut Context<Self>) {
|
fn split_entry(
|
||||||
cx.emit(Event::SplitEntry { entry_id });
|
&mut self,
|
||||||
|
entry_id: ProjectEntryId,
|
||||||
|
split_direction: Option<SplitDirection>,
|
||||||
|
cx: &mut Context<Self>,
|
||||||
|
) {
|
||||||
|
cx.emit(Event::SplitEntry {
|
||||||
|
entry_id,
|
||||||
|
split_direction,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_file(&mut self, _: &NewFile, window: &mut Window, cx: &mut Context<Self>) {
|
fn new_file(&mut self, _: &NewFile, window: &mut Window, cx: &mut Context<Self>) {
|
||||||
|
@ -4282,7 +4327,7 @@ impl ProjectPanel {
|
||||||
}
|
}
|
||||||
} else if event.modifiers().secondary() {
|
} else if event.modifiers().secondary() {
|
||||||
if event.click_count() > 1 {
|
if event.click_count() > 1 {
|
||||||
project_panel.split_entry(entry_id, cx);
|
project_panel.split_entry(entry_id, None, cx);
|
||||||
} else {
|
} else {
|
||||||
project_panel.selection = Some(selection);
|
project_panel.selection = Some(selection);
|
||||||
if let Some(position) = project_panel.marked_entries.iter().position(|e| *e == selection) {
|
if let Some(position) = project_panel.marked_entries.iter().position(|e| *e == selection) {
|
||||||
|
@ -5253,6 +5298,8 @@ impl Render for ProjectPanel {
|
||||||
.on_action(cx.listener(Self::collapse_selected_entry))
|
.on_action(cx.listener(Self::collapse_selected_entry))
|
||||||
.on_action(cx.listener(Self::collapse_all_entries))
|
.on_action(cx.listener(Self::collapse_all_entries))
|
||||||
.on_action(cx.listener(Self::open))
|
.on_action(cx.listener(Self::open))
|
||||||
|
.on_action(cx.listener(Self::open_split_right))
|
||||||
|
.on_action(cx.listener(Self::open_split_up))
|
||||||
.on_action(cx.listener(Self::open_permanent))
|
.on_action(cx.listener(Self::open_permanent))
|
||||||
.on_action(cx.listener(Self::confirm))
|
.on_action(cx.listener(Self::confirm))
|
||||||
.on_action(cx.listener(Self::cancel))
|
.on_action(cx.listener(Self::cancel))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue