diff --git a/yazi-core/src/which/commands/show.rs b/yazi-core/src/which/commands/show.rs index 037fd9934..39f69c477 100644 --- a/yazi-core/src/which/commands/show.rs +++ b/yazi-core/src/which/commands/show.rs @@ -1,6 +1,6 @@ use std::{collections::HashSet, str::FromStr}; -use yazi_config::{keymap::{Control, ControlCow, Key}, KEYMAP}; +use yazi_config::{keymap::{Control, Key}, KEYMAP}; use yazi_shared::{event::Cmd, render, Layer}; use crate::which::{Which, WhichSorter}; @@ -43,9 +43,17 @@ impl Which { } pub fn show_with(&mut self, key: &Key, layer: Layer) { + let mut seen = HashSet::new(); + self.layer = layer; self.times = 1; - self.cands = keymap_candidates(layer, key); + self.cands = KEYMAP + .get(layer) + .iter() + .filter(|c| c.on.len() > 1 && &c.on[0] == key) + .filter(|&c| seen.insert(&c.on)) + .map(|c| c.into()) + .collect(); WhichSorter::default().sort(&mut self.cands); self.visible = true; @@ -53,13 +61,3 @@ impl Which { render!(); } } - -fn keymap_candidates(layer: Layer, key: &Key) -> Vec { - let mut seen = HashSet::new(); - - let mut matches = - KEYMAP.get(layer).iter().filter(|c| c.on.len() > 1 && &c.on[0] == key).collect::>(); - - matches.retain(|c| seen.insert(c.on.clone())); - matches.into_iter().map(|c| c.into()).collect() -}