From c8c5dfd332e9c8bdfaf34a415631070ecfa11674 Mon Sep 17 00:00:00 2001 From: Giuliano Macedo Date: Wed, 11 Mar 2026 15:39:27 -0300 Subject: [PATCH] feat(bulk_rename): added --no-prompt opt --- yazi-actor/src/mgr/bulk_rename.rs | 24 ++++++++++++------------ yazi-dds/src/spark/spark.rs | 4 ++-- yazi-parser/src/mgr/bulk_rename.rs | 25 +++++++++++++++++++++++++ yazi-parser/src/mgr/mod.rs | 1 + 4 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 yazi-parser/src/mgr/bulk_rename.rs diff --git a/yazi-actor/src/mgr/bulk_rename.rs b/yazi-actor/src/mgr/bulk_rename.rs index 856b3f46..43ccb088 100644 --- a/yazi-actor/src/mgr/bulk_rename.rs +++ b/yazi-actor/src/mgr/bulk_rename.rs @@ -3,14 +3,14 @@ use std::{hash::Hash, io::{Read, Write}, ops::Deref, path::Path}; use anyhow::{Result, anyhow}; use crossterm::{execute, style::Print}; use hashbrown::HashMap; -use scopeguard::defer; use tokio::io::AsyncWriteExt; +use scopeguard::defer; use yazi_binding::Permit; use yazi_config::{YAZI, opener::OpenerRule}; use yazi_dds::Pubsub; use yazi_fs::{File, FilesOp, Splatter, max_common_root, path::skip_url, provider::{FileBuilder, Provider, local::{Gate, Local}}}; use yazi_macro::{err, succ}; -use yazi_parser::VoidOpt; +use yazi_parser::mgr::BulkRenameOpt; use yazi_proxy::{AppProxy, NotifyProxy, TasksProxy}; use yazi_shared::{data::Data, path::PathDyn, strand::{AsStrand, AsStrandJoin, Strand, StrandBuf, StrandLike}, terminal_clear, url::{AsUrl, UrlBuf, UrlCow, UrlLike}}; use yazi_term::YIELD_TO_SUBPROCESS; @@ -23,11 +23,11 @@ use crate::{Actor, Ctx}; pub struct BulkRename; impl Actor for BulkRename { - type Options = VoidOpt; + type Options = BulkRenameOpt; const NAME: &str = "bulk_rename"; - fn act(cx: &mut Ctx, _: Self::Options) -> Result { + fn act(cx: &mut Ctx, opt: Self::Options) -> Result { let Some(opener) = Self::opener() else { succ!(NotifyProxy::push_warn("Bulk rename", "No text opener found")); }; @@ -79,7 +79,7 @@ impl Actor for BulkRename { .map(|(i, s)| Tuple::new(i, s)) .collect(); - Self::r#do(root, old, new, selected).await + Self::r#do(root, old, new, selected, opt.no_prompt).await }); succ!(); } @@ -91,6 +91,7 @@ impl BulkRename { old: Vec, new: Vec, selected: Vec, + no_prompt: bool, ) -> Result<()> { terminal_clear(TTY.writer())?; if old.len() != new.len() { @@ -108,19 +109,18 @@ impl BulkRename { return Ok(()); } - { + if !no_prompt { let mut w = TTY.lockout(); for (old, new) in &todo { writeln!(w, "{} -> {}", old.display(), new.display())?; } write!(w, "Continue to rename? (y/N): ")?; w.flush()?; - } - - let mut buf = [0; 10]; - _ = TTY.reader().read(&mut buf)?; - if buf[0] != b'y' && buf[0] != b'Y' { - return Ok(()); + let mut buf = [0; 10]; + _ = TTY.reader().read(&mut buf)?; + if buf[0] != b'y' && buf[0] != b'Y' { + return Ok(()); + } } let permit = WATCHER.acquire().await.unwrap(); diff --git a/yazi-dds/src/spark/spark.rs b/yazi-dds/src/spark/spark.rs index 2a0441d0..c4f3fabb 100644 --- a/yazi-dds/src/spark/spark.rs +++ b/yazi-dds/src/spark/spark.rs @@ -26,7 +26,7 @@ pub enum Spark<'a> { // Mgr Arrow(yazi_parser::ArrowOpt), Back(yazi_parser::VoidOpt), - BulkRename(yazi_parser::VoidOpt), + BulkRename(yazi_parser::mgr::BulkRenameOpt), Cd(yazi_parser::mgr::CdOpt), Close(yazi_parser::mgr::CloseOpt), Copy(yazi_parser::mgr::CopyOpt), @@ -341,7 +341,6 @@ try_from_spark!( app:bootstrap, app:focus, mgr:back, - mgr:bulk_rename, mgr:enter, mgr:escape_filter, mgr:escape_find, @@ -378,6 +377,7 @@ try_from_spark!(yazi_parser::confirm::ShowOpt, confirm:show); try_from_spark!(yazi_parser::help::ToggleOpt, help:toggle); try_from_spark!(yazi_parser::input::CloseOpt, input:close); try_from_spark!(yazi_widgets::input::InputOpt, input:show); +try_from_spark!(yazi_parser::mgr::BulkRenameOpt, mgr:bulk_rename); try_from_spark!(yazi_parser::mgr::CdOpt, mgr:cd); try_from_spark!(yazi_parser::mgr::CloseOpt, mgr:close); try_from_spark!(yazi_parser::mgr::CopyOpt, mgr:copy); diff --git a/yazi-parser/src/mgr/bulk_rename.rs b/yazi-parser/src/mgr/bulk_rename.rs new file mode 100644 index 00000000..861604c7 --- /dev/null +++ b/yazi-parser/src/mgr/bulk_rename.rs @@ -0,0 +1,25 @@ +use mlua::{ExternalError, FromLua, IntoLua, Lua, Value}; +use yazi_shared::event::ActionCow; + +#[derive(Debug, Default)] +pub struct BulkRenameOpt { + pub no_prompt: bool, +} + +impl From for BulkRenameOpt { + fn from(a: ActionCow) -> Self { + Self { no_prompt: a.bool("no-prompt") } + } +} + +impl FromLua for BulkRenameOpt { + fn from_lua(_: Value, _: &Lua) -> mlua::Result { + Err("unsupported".into_lua_err()) + } +} + +impl IntoLua for BulkRenameOpt { + fn into_lua(self, _: &Lua) -> mlua::Result { + Err("unsupported".into_lua_err()) + } +} diff --git a/yazi-parser/src/mgr/mod.rs b/yazi-parser/src/mgr/mod.rs index ff9c10e9..a5c23f4a 100644 --- a/yazi-parser/src/mgr/mod.rs +++ b/yazi-parser/src/mgr/mod.rs @@ -1,4 +1,5 @@ yazi_macro::mod_flat!( + bulk_rename cd close copy