From 27170ce70b02ded53a875d8b6bfb9270b9591644 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Fri, 3 Oct 2025 16:45:11 +0800 Subject: [PATCH] fix: incorrect `$0` and `$@` parameters in `shell` command under empty directories --- yazi-core/src/tab/tab.rs | 6 +++--- yazi-shared/src/loc/buf.rs | 2 ++ yazi-shared/src/url/buf.rs | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/yazi-core/src/tab/tab.rs b/yazi-core/src/tab/tab.rs index 99f5558c..a7c25901 100644 --- a/yazi-core/src/tab/tab.rs +++ b/yazi-core/src/tab/tab.rs @@ -1,5 +1,3 @@ -use std::iter; - use anyhow::Result; use ratatui::layout::Rect; use tokio::task::JoinHandle; @@ -96,7 +94,9 @@ impl Tab { } pub fn hovered_and_selected(&self) -> Box + '_> { - let Some(h) = self.hovered() else { return Box::new(iter::empty()) }; + let Some(h) = self.hovered() else { + return Box::new([UrlBuf::new()].into_iter().chain(self.selected.values())); + }; if self.selected.is_empty() { Box::new([&h.url, &h.url].into_iter()) } else { diff --git a/yazi-shared/src/loc/buf.rs b/yazi-shared/src/loc/buf.rs index b4936923..1a3ecc51 100644 --- a/yazi-shared/src/loc/buf.rs +++ b/yazi-shared/src/loc/buf.rs @@ -84,6 +84,8 @@ impl LocBuf { Ok(Self { inner: loc.inner, uri, urn }) } + pub const fn empty() -> Self { Self { inner: PathBuf::new(), uri: 0, urn: 0 } } + pub fn zeroed(path: impl Into) -> Self { let loc = Self::from(path.into()); let Loc { inner, uri, urn } = Loc::zeroed(&loc.inner); diff --git a/yazi-shared/src/url/buf.rs b/yazi-shared/src/url/buf.rs index 8d3b5224..5c268bbb 100644 --- a/yazi-shared/src/url/buf.rs +++ b/yazi-shared/src/url/buf.rs @@ -79,6 +79,12 @@ impl PartialEq> for &UrlBuf { } impl UrlBuf { + #[inline] + pub const fn new() -> &'static Self { + static U: UrlBuf = UrlBuf { loc: LocBuf::empty(), scheme: Scheme::Regular }; + &U + } + #[inline] pub fn join(&self, path: impl AsRef) -> Self { self.as_url().join(path) }