From 9961251248c74202d8310085102d5809c279757c Mon Sep 17 00:00:00 2001 From: hankertrix <91734413+hankertrix@users.noreply.github.com> Date: Fri, 28 Jun 2024 08:59:23 +0800 Subject: [PATCH] feat: add `--hovered` option to the `rename` and `remove` commands (#1227) Co-authored-by: sxyazi --- yazi-config/preset/yazi.toml | 2 +- yazi-core/src/manager/commands/remove.rs | 11 ++++++++++- yazi-core/src/manager/commands/rename.rs | 21 ++++++++++++--------- yazi-plugin/preset/plugins/archive.lua | 2 +- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/yazi-config/preset/yazi.toml b/yazi-config/preset/yazi.toml index d844c0f5..f337e07c 100644 --- a/yazi-config/preset/yazi.toml +++ b/yazi-config/preset/yazi.toml @@ -113,7 +113,7 @@ previewers = [ { mime = "application/pdf", run = "pdf" }, # Archive { mime = "application/{,g}zip", run = "archive" }, - { mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", run = "archive" }, + { mime = "application/x-{tar,bzip*,7z-compressed,xz,rar,iso9660-image}", run = "archive" }, # Font { mime = "font/*", run = "font" }, { mime = "application/vnd.ms-opentype", run = "font" }, diff --git a/yazi-core/src/manager/commands/remove.rs b/yazi-core/src/manager/commands/remove.rs index 8be5b536..e67c135d 100644 --- a/yazi-core/src/manager/commands/remove.rs +++ b/yazi-core/src/manager/commands/remove.rs @@ -7,6 +7,7 @@ use crate::{manager::Manager, tasks::Tasks}; pub struct Opt { force: bool, permanently: bool, + hovered: bool, targets: Vec, } @@ -15,6 +16,7 @@ impl From for Opt { Self { force: c.bool("force"), permanently: c.bool("permanently"), + hovered: c.bool("hovered"), targets: c.take_any("targets").unwrap_or_default(), } } @@ -25,9 +27,16 @@ impl Manager { if !self.active_mut().try_escape_visual() { return; } + let Some(hovered) = self.hovered().map(|h| &h.url) else { + return; + }; let mut opt = opt.into() as Opt; - opt.targets = self.selected_or_hovered(false).cloned().collect(); + opt.targets = if opt.hovered { + vec![hovered.clone()] + } else { + self.selected_or_hovered(false).cloned().collect() + }; if opt.force { return self.remove_do(opt, tasks); diff --git a/yazi-core/src/manager/commands/rename.rs b/yazi-core/src/manager/commands/rename.rs index b8cfc4dd..adebe7d4 100644 --- a/yazi-core/src/manager/commands/rename.rs +++ b/yazi-core/src/manager/commands/rename.rs @@ -10,17 +10,19 @@ use yazi_shared::{event::Cmd, fs::{maybe_exists, ok_or_not_found, paths_to_same_ use crate::manager::Manager; pub struct Opt { - force: bool, - empty: String, - cursor: String, + hovered: bool, + force: bool, + empty: String, + cursor: String, } impl From for Opt { fn from(mut c: Cmd) -> Self { Self { - force: c.bool("force"), - empty: c.take_str("empty").unwrap_or_default(), - cursor: c.take_str("cursor").unwrap_or_default(), + hovered: c.bool("hovered"), + force: c.bool("force"), + empty: c.take_str("empty").unwrap_or_default(), + cursor: c.take_str("cursor").unwrap_or_default(), } } } @@ -29,15 +31,16 @@ impl Manager { pub fn rename(&mut self, opt: impl Into) { if !self.active_mut().try_escape_visual() { return; - } else if !self.active().selected.is_empty() { - return self.bulk_rename(); } - let Some(hovered) = self.hovered().map(|h| h.url()) else { return; }; let opt = opt.into() as Opt; + if !opt.hovered && !self.active().selected.is_empty() { + return self.bulk_rename(); + } + let name = Self::empty_url_part(&hovered, &opt.empty); let cursor = match opt.cursor.as_str() { "start" => Some(0), diff --git a/yazi-plugin/preset/plugins/archive.lua b/yazi-plugin/preset/plugins/archive.lua index b0d09dce..3827d754 100644 --- a/yazi-plugin/preset/plugins/archive.lua +++ b/yazi-plugin/preset/plugins/archive.lua @@ -45,7 +45,7 @@ function M:peek() if size > 0 then sizes[#sizes + 1] = ui.Line(string.format(" %s ", ya.readable_size(size))) else - sizes[#sizes + 1] = ui.Line(" - ") + sizes[#sizes + 1] = ui.Line("") end ::continue::