From a05cdd9f9b58e661b76cc7e82e0d1078ca8a59e0 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Fri, 2 Aug 2024 15:17:57 +0800 Subject: [PATCH] Refactor --- scripts/publish.sh | 1 + yazi-config/src/keymap/keymap.rs | 12 ------------ yazi-core/src/help/commands/escape.rs | 3 ++- yazi-core/src/help/help.rs | 22 ++++++++++------------ yazi-fm/src/help/layout.rs | 12 +++++++++--- 5 files changed, 22 insertions(+), 28 deletions(-) diff --git a/scripts/publish.sh b/scripts/publish.sh index 84b17ead..86330afd 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -1,6 +1,7 @@ cargo publish -p yazi-shared cargo publish -p yazi-config cargo publish -p yazi-proxy +cargo publish -p yazi-fs cargo publish -p yazi-adapter cargo publish -p yazi-boot cargo publish -p yazi-dds diff --git a/yazi-config/src/keymap/keymap.rs b/yazi-config/src/keymap/keymap.rs index 73187dce..f5542281 100644 --- a/yazi-config/src/keymap/keymap.rs +++ b/yazi-config/src/keymap/keymap.rs @@ -30,18 +30,6 @@ impl Keymap { Layer::Which => unreachable!(), } } - - pub fn get_shortcut_for_command(&self, cmd_name: &str, layer: Layer) -> Option { - let control = self - .get(layer) - .iter() - .find(|&c| c.run.iter().any(|cmd| cmd.name.eq(cmd_name))); - - match control { - Some(c) => Some(c.on()), - None => None - } - } } impl FromStr for Keymap { diff --git a/yazi-core/src/help/commands/escape.rs b/yazi-core/src/help/commands/escape.rs index 2d6c58a3..8384ac75 100644 --- a/yazi-core/src/help/commands/escape.rs +++ b/yazi-core/src/help/commands/escape.rs @@ -4,10 +4,11 @@ use crate::help::Help; impl Help { pub fn escape(&mut self, _: Cmd) { - if self.in_filter.is_none() { + if self.keyword().is_none() { return self.toggle(self.layer); } + self.keyword = String::new(); self.in_filter = None; self.filter_apply(); render!(); diff --git a/yazi-core/src/help/help.rs b/yazi-core/src/help/help.rs index cde803c4..620f9e6d 100644 --- a/yazi-core/src/help/help.rs +++ b/yazi-core/src/help/help.rs @@ -14,7 +14,7 @@ pub struct Help { pub(super) bindings: Vec<&'static Control>, // Filter - keyword: Option, + pub(super) keyword: String, pub(super) in_filter: Option, pub(super) offset: usize, @@ -29,7 +29,7 @@ impl Help { self.visible = !self.visible; self.layer = layer; - self.keyword = Some(String::new()); + self.keyword = String::new(); self.in_filter = None; self.filter_apply(); @@ -65,18 +65,16 @@ impl Help { } pub(super) fn filter_apply(&mut self) { - let kw = self.in_filter.as_ref().map(|i| i.value()).filter(|v| !v.is_empty()); - if self.keyword.as_deref() == kw { - return; - } + let kw = self.in_filter.as_ref().map_or("", |i| i.value()); - if let Some(kw) = kw { - self.bindings = KEYMAP.get(self.layer).iter().filter(|&c| c.contains(kw)).collect(); - } else { + if kw.is_empty() { + self.keyword = String::new(); self.bindings = KEYMAP.get(self.layer).iter().collect(); + } else if self.keyword != kw { + self.keyword = kw.to_owned(); + self.bindings = KEYMAP.get(self.layer).iter().filter(|&c| c.contains(kw)).collect(); } - self.keyword = kw.map(|s| s.to_owned()); self.arrow(0); } } @@ -89,8 +87,8 @@ impl Help { .in_filter .as_ref() .map(|i| i.value()) - .or(self.keyword.as_deref()) - .map(|s| format!("/{}", s)) + .or(Some(self.keyword.as_str()).filter(|&s| !s.is_empty())) + .map(|s| format!("Filter: {}", s)) } // --- Bindings diff --git a/yazi-fm/src/help/layout.rs b/yazi-fm/src/help/layout.rs index 82bb7be7..f0ba75da 100644 --- a/yazi-fm/src/help/layout.rs +++ b/yazi-fm/src/help/layout.rs @@ -1,6 +1,6 @@ use ratatui::{buffer::Buffer, layout::{self, Constraint, Rect}, text::Line, widgets::Widget}; use yazi_config::{KEYMAP, THEME}; -use yazi_shared::Layer; + use super::Bindings; use crate::Ctx; @@ -10,6 +10,13 @@ pub(crate) struct Layout<'a> { impl<'a> Layout<'a> { pub fn new(cx: &'a Ctx) -> Self { Self { cx } } + + fn tips() -> String { + match KEYMAP.help.iter().find(|&c| c.run.iter().any(|c| c.name == "filter")) { + Some(c) => format!(" (Press `{}` to filter)", c.on()), + None => String::new(), + } + } } impl<'a> Widget for Layout<'a> { @@ -18,9 +25,8 @@ impl<'a> Widget for Layout<'a> { yazi_plugin::elements::Clear::default().render(area, buf); let chunks = layout::Layout::vertical([Constraint::Fill(1), Constraint::Length(1)]).split(area); - let filter_key = KEYMAP.get_shortcut_for_command("filter", Layer::Help).unwrap_or_else(|| "[undefined]".into()); Line::styled( - help.keyword().unwrap_or_else(|| format!("{}.help (press {} to filter)", help.layer, filter_key)), + help.keyword().unwrap_or_else(|| format!("{}.help{}", help.layer, Self::tips())), THEME.help.footer, ) .render(chunks[1], buf);