From e218f1d8bbbac1d8237a3bc3255d58c364c53851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E9=9B=85=20misaki=20masa?= Date: Tue, 24 Jun 2025 13:29:34 +0800 Subject: [PATCH] feat: `filter` by full path (prefix + filename) in search view instead of just filename (#2915) --- yazi-fs/src/files.rs | 11 +++++------ yazi-shared/src/url/urn.rs | 4 ++++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/yazi-fs/src/files.rs b/yazi-fs/src/files.rs index 5ba7fc92..7769bcbc 100644 --- a/yazi-fs/src/files.rs +++ b/yazi-fs/src/files.rs @@ -186,10 +186,9 @@ impl Files { } let (mut hidden, mut items) = if let Some(filter) = &self.filter { - urns.into_iter().partition(|u| { - (!self.show_hidden && u.as_urn().is_hidden()) - || !u.as_urn().name().is_some_and(|s| filter.matches(s)) - }) + urns + .into_iter() + .partition(|u| (!self.show_hidden && u.as_urn().is_hidden()) || !filter.matches(u.as_urn())) } else if self.show_hidden { (HashSet::new(), urns) } else { @@ -267,7 +266,7 @@ impl Files { let (mut hidden, mut items) = if let Some(filter) = &self.filter { files .into_iter() - .partition(|(_, f)| (f.is_hidden() && !self.show_hidden) || !filter.matches(f.name())) + .partition(|(_, f)| (f.is_hidden() && !self.show_hidden) || !filter.matches(f.urn())) } else if self.show_hidden { (HashMap::new(), files) } else { @@ -320,7 +319,7 @@ impl Files { if let Some(filter) = &self.filter { files .into_iter() - .partition(|f| (f.is_hidden() && !self.show_hidden) || !filter.matches(f.name())) + .partition(|f| (f.is_hidden() && !self.show_hidden) || !filter.matches(f.urn())) } else if self.show_hidden { (vec![], files.into_iter().collect()) } else { diff --git a/yazi-shared/src/url/urn.rs b/yazi-shared/src/url/urn.rs index 01283c22..ca928cb0 100644 --- a/yazi-shared/src/url/urn.rs +++ b/yazi-shared/src/url/urn.rs @@ -36,6 +36,10 @@ impl AsRef for Urn { fn as_ref(&self) -> &Path { &self.0 } } +impl AsRef for Urn { + fn as_ref(&self) -> &OsStr { self.0.as_os_str() } +} + impl ToOwned for Urn { type Owned = UrnBuf;