diff options
-rw-r--r-- | helix-term/src/ui/mod.rs | 14 | ||||
-rw-r--r-- | helix-term/src/ui/picker.rs | 8 |
2 files changed, 15 insertions, 7 deletions
diff --git a/helix-term/src/ui/mod.rs b/helix-term/src/ui/mod.rs index f9480dd4..4daf82fc 100644 --- a/helix-term/src/ui/mod.rs +++ b/helix-term/src/ui/mod.rs @@ -38,7 +38,7 @@ pub fn file_picker(root: &str) -> Picker<PathBuf> { files.take(MAX).collect(), |path: &PathBuf| { // format_fn - path.strip_prefix("./").unwrap().to_str().unwrap() + path.strip_prefix("./").unwrap().to_str().unwrap().into() }, |editor: &mut Editor, path: &PathBuf| { let size = editor.view().unwrap().size; @@ -56,11 +56,17 @@ pub fn buffer_picker(views: &[View], current: usize) -> Picker<(Option<PathBuf>, .enumerate() .map(|(i, view)| (view.doc.relative_path().map(Path::to_path_buf), i)) .collect(), - |(path, index): &(Option<PathBuf>, usize)| { + move |(path, index): &(Option<PathBuf>, usize)| { // format_fn match path { - Some(path) => path.to_str().unwrap(), - None => "[NEW]", + 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)| { diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs index 94eec2eb..4190e548 100644 --- a/helix-term/src/ui/picker.rs +++ b/helix-term/src/ui/picker.rs @@ -10,6 +10,8 @@ use tui::{ use fuzzy_matcher::skim::SkimMatcherV2 as Matcher; use fuzzy_matcher::FuzzyMatcher; +use std::borrow::Cow; + use crate::ui::{Prompt, PromptEvent}; use helix_core::Position; use helix_view::Editor; @@ -25,14 +27,14 @@ pub struct Picker<T> { // pattern: String, prompt: Prompt, - format_fn: Box<dyn Fn(&T) -> &str>, + format_fn: Box<dyn Fn(&T) -> Cow<str>>, callback_fn: Box<dyn Fn(&mut Editor, &T)>, } impl<T> Picker<T> { pub fn new( options: Vec<T>, - format_fn: impl Fn(&T) -> &str + 'static, + format_fn: impl Fn(&T) -> Cow<str> + 'static, callback_fn: impl Fn(&mut Editor, &T) + 'static, ) -> Self { let prompt = Prompt::new( @@ -82,7 +84,7 @@ impl<T> Picker<T> { let text = (format_fn)(option); // TODO: using fuzzy_indices could give us the char idx for match highlighting matcher - .fuzzy_match(text, pattern) + .fuzzy_match(&text, pattern) .map(|score| (index, score)) }), ); |