Skip to content

Commit

Permalink
fix: displaying duplicate command suggestions
Browse files Browse the repository at this point in the history
Fixes #955
  • Loading branch information
mikavilpas committed Apr 29, 2024
1 parent 3a09155 commit 0f02b9e
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions yazi-core/src/which/commands/show.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::str::FromStr;
use std::{collections::HashSet, str::FromStr};

use yazi_config::{keymap::{Control, Key}, KEYMAP};
use yazi_config::{keymap::{Control, ControlCow, Key}, KEYMAP};
use yazi_shared::{event::Cmd, render, Layer};

use crate::which::{Which, WhichSorter};
Expand Down Expand Up @@ -45,16 +45,21 @@ impl Which {
pub fn show_with(&mut self, key: &Key, layer: Layer) {
self.layer = layer;
self.times = 1;
self.cands = KEYMAP
.get(layer)
.iter()
.filter(|c| c.on.len() > 1 && &c.on[0] == key)
.map(|c| c.into())
.collect();
self.cands = keymap_candidates(layer, key);

WhichSorter::default().sort(&mut self.cands);
self.visible = true;
self.silent = false;
render!();
}
}

fn keymap_candidates(layer: Layer, key: &Key) -> Vec<ControlCow> {
let mut seen = HashSet::new();

let mut matches =
KEYMAP.get(layer).iter().filter(|c| c.on.len() > 1 && &c.on[0] == key).collect::<Vec<_>>();

matches.retain(|c| seen.insert(c.on.clone()));
matches.into_iter().map(|c| c.into()).collect()
}

0 comments on commit 0f02b9e

Please sign in to comment.