From 47e282804d4206050a24ce3d1bfa18086b755265 Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Mon, 21 Dec 2020 17:58:54 +0900 Subject: buffer picker: Mark current view with (*) --- helix-term/src/ui/mod.rs | 14 ++++++++++---- helix-term/src/ui/picker.rs | 8 +++++--- 2 files changed, 15 insertions(+), 7 deletions(-) (limited to 'helix-term') 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 { 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, .enumerate() .map(|(i, view)| (view.doc.relative_path().map(Path::to_path_buf), i)) .collect(), - |(path, index): &(Option, usize)| { + move |(path, index): &(Option, 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, 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 { // pattern: String, prompt: Prompt, - format_fn: Box &str>, + format_fn: Box Cow>, callback_fn: Box, } impl Picker { pub fn new( options: Vec, - format_fn: impl Fn(&T) -> &str + 'static, + format_fn: impl Fn(&T) -> Cow + 'static, callback_fn: impl Fn(&mut Editor, &T) + 'static, ) -> Self { let prompt = Prompt::new( @@ -82,7 +84,7 @@ impl Picker { 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)) }), ); -- cgit v1.2.3-70-g09d2