|
|
@ -65,12 +65,28 @@ fn open(cx: &mut compositor::Context, args: &[Cow<str>], event: PromptEvent) ->
|
|
|
|
ensure!(!args.is_empty(), "wrong argument count");
|
|
|
|
ensure!(!args.is_empty(), "wrong argument count");
|
|
|
|
for arg in args {
|
|
|
|
for arg in args {
|
|
|
|
let (path, pos) = args::parse_file(arg);
|
|
|
|
let (path, pos) = args::parse_file(arg);
|
|
|
|
let _ = cx.editor.open(&path, Action::Replace)?;
|
|
|
|
// If the path is a directory, open a file picker on that directory and update the status
|
|
|
|
let (view, doc) = current!(cx.editor);
|
|
|
|
// message
|
|
|
|
let pos = Selection::point(pos_at_coords(doc.text().slice(..), pos, true));
|
|
|
|
if std::fs::canonicalize(&path)?.is_dir() {
|
|
|
|
doc.set_selection(view.id, pos);
|
|
|
|
let callback = async move {
|
|
|
|
// does not affect opening a buffer without pos
|
|
|
|
let call: job::Callback = job::Callback::EditorCompositor(Box::new(
|
|
|
|
align_view(doc, view, Align::Center);
|
|
|
|
move |editor: &mut Editor, compositor: &mut Compositor| {
|
|
|
|
|
|
|
|
let picker = ui::file_picker(path, &editor.config());
|
|
|
|
|
|
|
|
compositor.push(Box::new(overlayed(picker)));
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
));
|
|
|
|
|
|
|
|
Ok(call)
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
cx.jobs.callback(callback);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// Otherwise, just open the file
|
|
|
|
|
|
|
|
let _ = cx.editor.open(&path, Action::Replace)?;
|
|
|
|
|
|
|
|
let (view, doc) = current!(cx.editor);
|
|
|
|
|
|
|
|
let pos = Selection::point(pos_at_coords(doc.text().slice(..), pos, true));
|
|
|
|
|
|
|
|
doc.set_selection(view.id, pos);
|
|
|
|
|
|
|
|
// does not affect opening a buffer without pos
|
|
|
|
|
|
|
|
align_view(doc, view, Align::Center);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|