From b6f572ececa92ee1c69312e1a9e5043db117c5b5 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Sat, 10 Feb 2024 19:41:32 +0800 Subject: [PATCH] .. --- yazi-core/src/tab/commands/escape.rs | 12 +++++------- yazi-core/src/tab/commands/select_all.rs | 14 ++++++-------- yazi-core/src/tab/tab.rs | 7 +++++-- yazi-fm/src/lives/files.rs | 2 +- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/yazi-core/src/tab/commands/escape.rs b/yazi-core/src/tab/commands/escape.rs index d500046e..df31e2ef 100644 --- a/yazi-core/src/tab/commands/escape.rs +++ b/yazi-core/src/tab/commands/escape.rs @@ -38,13 +38,11 @@ impl Tab { }; let state = self.mode.is_select(); - for i in indices { - if let Some(file) = self.current.files.get(*i) { - if state { - self.selected.insert(file.url.clone()); - } else { - self.selected.remove(&file.url); - } + for f in indices.iter().filter_map(|i| self.current.files.get(*i)) { + if state { + self.selected.insert(f.url()); + } else { + self.selected.remove(&f.url); } } diff --git a/yazi-core/src/tab/commands/select_all.rs b/yazi-core/src/tab/commands/select_all.rs index 993182b6..5ad5e5a5 100644 --- a/yazi-core/src/tab/commands/select_all.rs +++ b/yazi-core/src/tab/commands/select_all.rs @@ -26,20 +26,18 @@ impl Tab { let mut b = false; match opt.into().state { Some(true) => { - for file in self.current.files.iter() { - b |= self.selected.insert(file.url()); + for f in self.current.files.iter() { + b |= self.selected.insert(f.url()); } } Some(false) => { - for file in self.current.files.iter() { - b |= self.selected.remove(&file.url); + for f in self.current.files.iter() { + b |= self.selected.remove(&f.url); } } None => { - for file in self.current.files.iter() { - if !self.selected.remove(&file.url) { - b |= self.selected.insert(file.url()); - } + for f in self.current.files.iter() { + b |= self.selected.remove(&f.url) || self.selected.insert(f.url()); } } } diff --git a/yazi-core/src/tab/tab.rs b/yazi-core/src/tab/tab.rs index f376f7ba..ac6a4f29 100644 --- a/yazi-core/src/tab/tab.rs +++ b/yazi-core/src/tab/tab.rs @@ -59,7 +59,7 @@ impl Tab { let pending = self.mode.visual().map(|(_, p)| Cow::Borrowed(p)).unwrap_or_default(); let is_unset = self.mode.is_unset(); if self.selected.is_empty() && (is_unset || pending.is_empty()) { - return vec![]; + return self.current.hovered().map(|h| vec![h]).unwrap_or_default(); } let selected: BTreeSet<_> = self.selected.iter().collect(); @@ -81,7 +81,10 @@ impl Tab { } } } - items + Some(items) + .filter(|v| !v.is_empty()) + .or_else(|| self.current.hovered().map(|h| vec![h])) + .unwrap_or_default() } // --- History diff --git a/yazi-fm/src/lives/files.rs b/yazi-fm/src/lives/files.rs index bf135d56..62a8900c 100644 --- a/yazi-fm/src/lives/files.rs +++ b/yazi-fm/src/lives/files.rs @@ -23,7 +23,7 @@ impl Files { folder: &yazi_core::folder::Folder, tab: &yazi_core::tab::Tab, ) -> mlua::Result> { - SCOPE.create_any_userdata(Self { folder, window, tab }) + SCOPE.create_any_userdata(Self { window, folder, tab }) } pub(super) fn register(lua: &Lua) -> mlua::Result<()> {