aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaž Hrastnik2020-12-21 08:58:54 +0000
committerBlaž Hrastnik2020-12-21 08:58:54 +0000
commit47e282804d4206050a24ce3d1bfa18086b755265 (patch)
treee79f1376c3d5e92fffb21e8f38a724b7602e878c
parent3d3295bb759994d4fbf328c126678f63e0c38d4f (diff)
buffer picker: Mark current view with (*)
-rw-r--r--helix-term/src/ui/mod.rs14
-rw-r--r--helix-term/src/ui/picker.rs8
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))
}),
);