Add theme completer
This commit is contained in:
parent
ce97a2f05f
commit
a2db161d5a
1 changed files with 34 additions and 5 deletions
|
@ -115,10 +115,43 @@ pub fn file_picker(root: PathBuf) -> Picker<PathBuf> {
|
|||
|
||||
pub mod completers {
|
||||
use crate::ui::prompt::Completion;
|
||||
use std::borrow::Cow;
|
||||
use fuzzy_matcher::skim::SkimMatcherV2 as Matcher;
|
||||
use fuzzy_matcher::FuzzyMatcher;
|
||||
use helix_view::theme;
|
||||
use std::cmp::Reverse;
|
||||
use std::{borrow::Cow, sync::Arc};
|
||||
|
||||
pub type Completer = fn(&str) -> Vec<Completion>;
|
||||
|
||||
pub fn theme(input: &str) -> Vec<Completion> {
|
||||
let mut names = theme::Loader::read_names(&helix_core::runtime_dir().join("themes"));
|
||||
names.extend(theme::Loader::read_names(
|
||||
&helix_core::config_dir().join("themes"),
|
||||
));
|
||||
names.push("default".into());
|
||||
|
||||
let mut names: Vec<_> = names
|
||||
.into_iter()
|
||||
.map(|name| ((0..), Cow::from(name)))
|
||||
.collect();
|
||||
|
||||
let matcher = Matcher::default();
|
||||
|
||||
let mut matches: Vec<_> = names
|
||||
.into_iter()
|
||||
.filter_map(|(range, name)| {
|
||||
matcher
|
||||
.fuzzy_match(&name, &input)
|
||||
.map(|score| (name, score))
|
||||
})
|
||||
.collect();
|
||||
|
||||
matches.sort_unstable_by_key(|(_file, score)| Reverse(*score));
|
||||
names = matches.into_iter().map(|(name, _)| ((0..), name)).collect();
|
||||
|
||||
names
|
||||
}
|
||||
|
||||
// TODO: we could return an iter/lazy thing so it can fetch as many as it needs.
|
||||
pub fn filename(input: &str) -> Vec<Completion> {
|
||||
// Rust's filename handling is really annoying.
|
||||
|
@ -178,10 +211,6 @@ pub mod completers {
|
|||
|
||||
// if empty, return a list of dirs and files in current dir
|
||||
if let Some(file_name) = file_name {
|
||||
use fuzzy_matcher::skim::SkimMatcherV2 as Matcher;
|
||||
use fuzzy_matcher::FuzzyMatcher;
|
||||
use std::cmp::Reverse;
|
||||
|
||||
let matcher = Matcher::default();
|
||||
|
||||
// inefficient, but we need to calculate the scores, filter out None, then sort.
|
||||
|
|
Loading…
Reference in a new issue