From 146e2b508986a538b3e2d99e2e28d04c79fef722 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 14 Jun 2022 13:49:47 +0200 Subject: [PATCH 1/4] Open files when creating them in project panel --- crates/project_panel/src/project_panel.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 48901043f2..e34c1bce18 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -396,6 +396,7 @@ impl ProjectPanel { cx.focus_self(); let worktree_id = edit_state.worktree_id; + let is_new_entry = edit_state.is_new_entry; let worktree = self.project.read(cx).worktree_for_id(worktree_id, cx)?; let entry = worktree.read(cx).entry_for_id(edit_state.entry_id)?.clone(); let filename = self.filename_editor.read(cx).text(cx); @@ -403,7 +404,7 @@ impl ProjectPanel { let edit_task; let edited_entry_id; - if edit_state.is_new_entry { + if is_new_entry { self.selection = Some(Selection { worktree_id, entry_id: NEW_ENTRY_ID, @@ -444,6 +445,15 @@ impl ProjectPanel { } } this.update_visible_entries(None, cx); + if is_new_entry { + this.open_entry( + &Open { + entry_id: new_entry.id, + change_focus: true, + }, + cx, + ); + } cx.notify(); }); Ok(()) From 572e29585458d88dbb048b212e2a04e7dd2c85f3 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 14 Jun 2022 13:56:56 +0200 Subject: [PATCH 2/4] Open files in project panel using `enter` instead of `right` --- crates/project_panel/src/project_panel.rs | 39 +++++++++++++++-------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index e34c1bce18..bbd64efe17 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -289,14 +289,14 @@ impl ProjectPanel { fn expand_selected_entry(&mut self, _: &ExpandSelectedEntry, cx: &mut ViewContext) { if let Some((worktree, entry)) = self.selected_entry(cx) { - let expanded_dir_ids = - if let Some(expanded_dir_ids) = self.expanded_dir_ids.get_mut(&worktree.id()) { - expanded_dir_ids - } else { - return; - }; - if entry.is_dir() { + let expanded_dir_ids = + if let Some(expanded_dir_ids) = self.expanded_dir_ids.get_mut(&worktree.id()) { + expanded_dir_ids + } else { + return; + }; + match expanded_dir_ids.binary_search(&entry.id) { Ok(_) => self.select_next(&SelectNext, cx), Err(ix) => { @@ -305,12 +305,6 @@ impl ProjectPanel { cx.notify(); } } - } else { - let event = Event::OpenedEntry { - entry_id: entry.id, - focus_opened_item: true, - }; - cx.emit(event); } } } @@ -392,6 +386,25 @@ impl ProjectPanel { } fn confirm(&mut self, _: &Confirm, cx: &mut ViewContext) -> Option>> { + if let Some(task) = self.confirm_edit(cx) { + Some(task) + } else if let Some((_, entry)) = self.selected_entry(cx) { + if entry.is_file() { + self.open_entry( + &Open { + entry_id: entry.id, + change_focus: true, + }, + cx, + ); + } + None + } else { + None + } + } + + fn confirm_edit(&mut self, cx: &mut ViewContext) -> Option>> { let edit_state = self.edit_state.as_mut()?; cx.focus_self(); From a5a4246e6ce50bec21f2a1bfe378a2d576dbbe1b Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 14 Jun 2022 14:01:49 +0200 Subject: [PATCH 3/4] Attempt to open new entry only if it is a file --- crates/project_panel/src/project_panel.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index bbd64efe17..895d17354c 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -410,6 +410,7 @@ impl ProjectPanel { let worktree_id = edit_state.worktree_id; let is_new_entry = edit_state.is_new_entry; + let is_dir = edit_state.is_dir; let worktree = self.project.read(cx).worktree_for_id(worktree_id, cx)?; let entry = worktree.read(cx).entry_for_id(edit_state.entry_id)?.clone(); let filename = self.filename_editor.read(cx).text(cx); @@ -458,7 +459,7 @@ impl ProjectPanel { } } this.update_visible_entries(None, cx); - if is_new_entry { + if is_new_entry && !is_dir { this.open_entry( &Open { entry_id: new_entry.id, From 5dd28b7e571f021e62d71224fbdca18d741935c6 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 14 Jun 2022 14:03:25 +0200 Subject: [PATCH 4/4] :art: --- crates/project_panel/src/project_panel.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 895d17354c..5996abb5d5 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -426,7 +426,7 @@ impl ProjectPanel { let new_path = entry.path.join(&filename); edited_entry_id = NEW_ENTRY_ID; edit_task = self.project.update(cx, |project, cx| { - project.create_entry((edit_state.worktree_id, new_path), edit_state.is_dir, cx) + project.create_entry((worktree_id, new_path), is_dir, cx) })?; } else { let new_path = if let Some(parent) = entry.path.clone().parent() {