Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/src/commands.rs')
-rw-r--r--helix-term/src/commands.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index a5a210fe..9064e1cc 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -393,6 +393,9 @@ impl MappableCommand {
file_picker, "Open file picker",
file_picker_in_current_buffer_directory, "Open file picker at current buffer's directory",
file_picker_in_current_directory, "Open file picker at current working directory",
+ file_browser, "Open file browser in workspace root",
+ file_browser_in_current_buffer_directory, "Open file browser at current buffer's directory",
+ file_browser_in_current_directory, "Open file browser at current working directory",
code_action, "Perform code action",
buffer_picker, "Open buffer picker",
jumplist_picker, "Open jumplist picker",
@@ -2992,6 +2995,58 @@ fn file_picker_in_current_directory(cx: &mut Context) {
cx.push_layer(Box::new(overlaid(picker)));
}
+fn file_browser(cx: &mut Context) {
+ let root = find_workspace().0;
+ if !root.exists() {
+ cx.editor.set_error("Workspace directory does not exist");
+ return;
+ }
+
+ if let Ok(picker) = ui::file_browser(root, cx.editor) {
+ cx.push_layer(Box::new(overlaid(picker)));
+ }
+}
+
+fn file_browser_in_current_buffer_directory(cx: &mut Context) {
+ let doc_dir = doc!(cx.editor)
+ .path()
+ .and_then(|path| path.parent().map(|path| path.to_path_buf()));
+
+ let path = match doc_dir {
+ Some(path) => path,
+ None => {
+ let cwd = helix_stdx::env::current_working_dir();
+ if !cwd.exists() {
+ cx.editor.set_error(
+ "Current buffer has no parent and current working directory does not exist",
+ );
+ return;
+ }
+ cx.editor.set_error(
+ "Current buffer has no parent, opening file browser in current working directory",
+ );
+ cwd
+ }
+ };
+
+ if let Ok(picker) = ui::file_browser(path, cx.editor) {
+ cx.push_layer(Box::new(overlaid(picker)));
+ }
+}
+
+fn file_browser_in_current_directory(cx: &mut Context) {
+ let cwd = helix_stdx::env::current_working_dir();
+ if !cwd.exists() {
+ cx.editor
+ .set_error("Current working directory does not exist");
+ return;
+ }
+
+ if let Ok(picker) = ui::file_browser(cwd, cx.editor) {
+ cx.push_layer(Box::new(overlaid(picker)));
+ }
+}
+
fn buffer_picker(cx: &mut Context) {
let current = view!(cx.editor).doc;