mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-26 03:13:29 +04:00
Pass directory content into picker directly
This commit is contained in:
parent
084d1811ea
commit
8f5e4dff29
@ -375,7 +375,7 @@ pub fn doc(&self) -> &str {
|
|||||||
file_picker, "Open file picker",
|
file_picker, "Open file picker",
|
||||||
file_picker_in_current_buffer_directory, "Open file picker at current buffer's directory",
|
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_picker_in_current_directory, "Open file picker at current working directory",
|
||||||
file_browser, "Open file browser at current buffer's directory",
|
file_browser, "Open file browser at current working directory",
|
||||||
code_action, "Perform code action",
|
code_action, "Perform code action",
|
||||||
buffer_picker, "Open buffer picker",
|
buffer_picker, "Open buffer picker",
|
||||||
jumplist_picker, "Open jumplist picker",
|
jumplist_picker, "Open jumplist picker",
|
||||||
@ -2956,8 +2956,9 @@ fn file_browser(cx: &mut Context) {
|
|||||||
.set_error("Current working directory does not exist");
|
.set_error("Current working directory does not exist");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let picker = ui::file_browser(cwd);
|
if let Ok(picker) = ui::file_browser(cwd) {
|
||||||
cx.push_layer(Box::new(overlaid(picker)));
|
cx.push_layer(Box::new(overlaid(picker)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn buffer_picker(cx: &mut Context) {
|
fn buffer_picker(cx: &mut Context) {
|
||||||
|
@ -266,8 +266,8 @@ pub fn file_picker(root: PathBuf, config: &helix_view::editor::Config) -> FilePi
|
|||||||
picker
|
picker
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn file_browser(root: PathBuf) -> FilePicker {
|
pub fn file_browser(root: PathBuf) -> Result<FilePicker, std::io::Error> {
|
||||||
let directory_content = directory_content(&root);
|
let directory_content = directory_content(&root)?;
|
||||||
|
|
||||||
let columns = [PickerColumn::new(
|
let columns = [PickerColumn::new(
|
||||||
"path",
|
"path",
|
||||||
@ -278,14 +278,20 @@ pub fn file_browser(root: PathBuf) -> FilePicker {
|
|||||||
.into()
|
.into()
|
||||||
},
|
},
|
||||||
)];
|
)];
|
||||||
let picker = Picker::new(columns, 0, [], root, move |cx, path: &PathBuf, action| {
|
let picker = Picker::new(
|
||||||
|
columns,
|
||||||
|
0,
|
||||||
|
directory_content,
|
||||||
|
root,
|
||||||
|
move |cx, path: &PathBuf, action| {
|
||||||
if path.is_dir() {
|
if path.is_dir() {
|
||||||
let owned_path = path.clone();
|
let owned_path = path.clone();
|
||||||
let callback = Box::pin(async move {
|
let callback = Box::pin(async move {
|
||||||
let call: Callback =
|
let call: Callback =
|
||||||
Callback::EditorCompositor(Box::new(move |_editor, compositor| {
|
Callback::EditorCompositor(Box::new(move |_editor, compositor| {
|
||||||
let picker = file_browser(owned_path);
|
if let Ok(picker) = file_browser(owned_path) {
|
||||||
compositor.push(Box::new(overlay::overlaid(picker)));
|
compositor.push(Box::new(overlay::overlaid(picker)));
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
Ok(call)
|
Ok(call)
|
||||||
});
|
});
|
||||||
@ -298,18 +304,11 @@ pub fn file_browser(root: PathBuf) -> FilePicker {
|
|||||||
};
|
};
|
||||||
cx.editor.set_error(err);
|
cx.editor.set_error(err);
|
||||||
}
|
}
|
||||||
})
|
},
|
||||||
|
)
|
||||||
.with_preview(|_editor, path| Some((path.as_path().into(), None)));
|
.with_preview(|_editor, path| Some((path.as_path().into(), None)));
|
||||||
let injector = picker.injector();
|
|
||||||
|
|
||||||
if let Ok(files) = directory_content {
|
Ok(picker)
|
||||||
for file in files {
|
|
||||||
if injector.push(file).is_err() {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
picker
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn directory_content(path: &Path) -> Result<Vec<PathBuf>, std::io::Error> {
|
fn directory_content(path: &Path) -> Result<Vec<PathBuf>, std::io::Error> {
|
||||||
|
Loading…
Reference in New Issue
Block a user