Restore buffer_picker.

This commit is contained in:
Blaž Hrastnik 2021-03-24 16:26:53 +09:00
parent 376232c543
commit 915fd9ebaf
2 changed files with 37 additions and 37 deletions

View file

@ -11,7 +11,7 @@ use once_cell::sync::Lazy;
use crate::{ use crate::{
compositor::{Callback, Compositor}, compositor::{Callback, Compositor},
ui::{self, Popup, Prompt, PromptEvent}, ui::{self, Picker, Popup, Prompt, PromptEvent},
}; };
use std::path::PathBuf; use std::path::PathBuf;
@ -19,7 +19,7 @@ use std::path::PathBuf;
use helix_view::{ use helix_view::{
document::Mode, document::Mode,
view::{View, PADDING}, view::{View, PADDING},
Document, Editor, Document, DocumentId, Editor,
}; };
use crossterm::event::{KeyCode, KeyEvent}; use crossterm::event::{KeyCode, KeyEvent};
@ -820,10 +820,39 @@ pub fn file_picker(cx: &mut Context) {
} }
pub fn buffer_picker(cx: &mut Context) { pub fn buffer_picker(cx: &mut Context) {
// let documents = cx.editor.documents.iter().map(||).collect(); use std::path::{Path, PathBuf};
// (document_id, relative_path/name) mappings let current = cx.editor.view().doc;
// let picker = ui::buffer_picker(&documents, editor.focus);
// cx.push_layer(Box::new(picker)); let picker = Picker::new(
cx.editor
.documents
.iter()
.map(|(id, doc)| (id, doc.relative_path().map(Path::to_path_buf)))
.collect(),
move |(id, path): &(DocumentId, Option<PathBuf>)| {
// format_fn
match path {
Some(path) => {
if *id == current {
format!("{} (*)", path.to_str().unwrap()).into()
} else {
path.to_str().unwrap().into()
}
}
None => "[NEW]".into(),
}
},
|editor: &mut Editor, (_, path): &(DocumentId, Option<PathBuf>)| match path {
Some(path) => {
use helix_view::editor::Action;
editor
.open(path.into(), Action::Replace)
.expect("editor.open failed");
}
None => (),
},
);
cx.push_layer(Box::new(picker));
} }
// calculate line numbers for each selection range // calculate line numbers for each selection range

View file

@ -20,6 +20,8 @@ pub use tui::style::{Color, Modifier, Style};
use helix_core::regex::Regex; use helix_core::regex::Regex;
use helix_view::{Document, Editor}; use helix_view::{Document, Editor};
use std::path::{Path, PathBuf};
// TODO: temp // TODO: temp
#[inline(always)] #[inline(always)]
pub fn text_color() -> Style { pub fn text_color() -> Style {
@ -75,7 +77,6 @@ pub fn regex_prompt(
) )
} }
use std::path::{Path, PathBuf};
pub fn file_picker(root: &str) -> Picker<PathBuf> { pub fn file_picker(root: &str) -> Picker<PathBuf> {
use ignore::Walk; use ignore::Walk;
// TODO: determine root based on git root // TODO: determine root based on git root
@ -109,36 +110,6 @@ pub fn file_picker(root: &str) -> Picker<PathBuf> {
) )
} }
use helix_view::View;
pub fn buffer_picker(buffers: &[Document], current: usize) -> Picker<(Option<PathBuf>, usize)> {
use helix_view::Editor;
Picker::new(
buffers
.iter()
.enumerate()
.map(|(i, doc)| (doc.relative_path().map(Path::to_path_buf), i))
.collect(),
move |(path, index): &(Option<PathBuf>, usize)| {
// format_fn
match path {
Some(path) => {
if *index == current {
format!("{} (*)", path.to_str().unwrap()).into()
} else {
path.to_str().unwrap().into()
}
}
None => "[NEW]".into(),
}
},
|editor: &mut Editor, &(_, index): &(Option<PathBuf>, usize)| {
// if index < editor.views.len() {
// editor.focus = index;
// }
},
)
}
pub mod completers { pub mod completers {
use crate::ui::prompt::Completion; use crate::ui::prompt::Completion;
use std::borrow::Cow; use std::borrow::Cow;