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.rs | 55 |
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; |