@@ -11,7 +11,7 @@ use once_cell::sync::Lazy;
12use crate::{
12use crate::{
13 compositor::{Callback, Compositor},
13 compositor::{Callback, Compositor},
14− ui::{self, Popup, Prompt, PromptEvent},
14+ ui::{self, Picker, Popup, Prompt, PromptEvent},
17use std::path::PathBuf;
17use std::path::PathBuf;
@@ -19,7 +19,7 @@ use std::path::PathBuf;
19use helix_view::{
19use helix_view::{
20 document::Mode,
20 document::Mode,
21 view::{View, PADDING},
21 view::{View, PADDING},
22− Document, Editor,
22+ Document, DocumentId, Editor,
25use crossterm::event::{KeyCode, KeyEvent};
25use crossterm::event::{KeyCode, KeyEvent};
@@ -820,10 +820,39 @@ pub fn file_picker(cx: &mut Context) {
822pub fn buffer_picker(cx: &mut Context) {
822pub fn buffer_picker(cx: &mut Context) {
823− // let documents = cx.editor.documents.iter().map(||).collect();
823+ use std::path::{Path, PathBuf};
824− // (document_id, relative_path/name) mappings
824+ let current = cx.editor.view().doc;
825− // let picker = ui::buffer_picker(&documents, editor.focus);
825+
826+ let picker = Picker::new(
830+ .map(|(id, doc)| (id, doc.relative_path().map(Path::to_path_buf)))
832+ move |(id, path): &(DocumentId, Option<PathBuf>)| {
837+ format!("{} (*)", path.to_str().unwrap()).into()
839+ path.to_str().unwrap().into()
842+ None => "[NEW]".into(),
845+ |editor: &mut Editor, (_, path): &(DocumentId, Option<PathBuf>)| match path {
847+ use helix_view::editor::Action;
849+ .open(path.into(), Action::Replace)
850+ .expect("editor.open failed");
826− // cx.push_layer(Box::new(picker));
855+ cx.push_layer(Box::new(picker));
829// calculate line numbers for each selection range
858// calculate line numbers for each selection range