From 9dcfa5c24017ce48d908132cae57dc45c7e92c58 Mon Sep 17 00:00:00 2001 From: Guillaume Thibault Date: Tue, 7 May 2024 16:46:30 -0400 Subject: [PATCH] chore: clean implementation of `--args='...'` parameter fir `fd and `rg` --- yazi-core/src/tab/commands/search.rs | 21 +++++++++------------ yazi-plugin/src/external/fd.rs | 2 +- yazi-plugin/src/external/rg.rs | 2 +- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/yazi-core/src/tab/commands/search.rs b/yazi-core/src/tab/commands/search.rs index a95e2aa9..f693db74 100644 --- a/yazi-core/src/tab/commands/search.rs +++ b/yazi-core/src/tab/commands/search.rs @@ -63,27 +63,24 @@ impl Tab { let mut input = InputProxy::show(InputCfg::search(&opt.type_.to_string())); let Some(Ok(subject)) = input.recv().await else { bail!("") }; - let mut arguments = Vec::new(); - let mut subjects = Vec::new(); let words = shell_words::split(&subject)?; - for word in words { - if word.starts_with("--args=") { - let args_string = word.strip_prefix("--args=").unwrap(); - arguments.extend(shell_words::split(args_string)?); - } else { - subjects.push(word); - } - } + let (arguments, subjects): (Vec, Vec) = words + .into_iter() + .partition(|word| word.starts_with("--args=")); if subjects.is_empty() { bail!("No search subject found"); } let subject = subjects.join(" "); + let args: Vec = arguments.into_iter() + .flat_map(|arg| shell_words::split(&arg["--args=".len()..])) + .flatten() + .collect(); cwd = cwd.into_search(subject.clone()); let rx = if opt.type_ == OptType::Rg { - external::rg(external::RgOpt { cwd: cwd.clone(), hidden, subject, args: arguments}) + external::rg(external::RgOpt { cwd: cwd.clone(), hidden, subject, args}) } else { - external::fd(external::FdOpt { cwd: cwd.clone(), hidden, glob: false, subject, args: arguments }) + external::fd(external::FdOpt { cwd: cwd.clone(), hidden, glob: false, subject, args }) }?; let rx = UnboundedReceiverStream::new(rx).chunks_timeout(1000, Duration::from_millis(300)); diff --git a/yazi-plugin/src/external/fd.rs b/yazi-plugin/src/external/fd.rs index 2031370a..9a82b8e9 100644 --- a/yazi-plugin/src/external/fd.rs +++ b/yazi-plugin/src/external/fd.rs @@ -1,4 +1,4 @@ -use std::{env::args, process::Stdio}; +use std::process::Stdio; use anyhow::Result; use tokio::{io::{AsyncBufReadExt, BufReader}, process::Command, sync::mpsc::{self, UnboundedReceiver}}; diff --git a/yazi-plugin/src/external/rg.rs b/yazi-plugin/src/external/rg.rs index 27c21eae..7581a038 100644 --- a/yazi-plugin/src/external/rg.rs +++ b/yazi-plugin/src/external/rg.rs @@ -16,7 +16,7 @@ pub fn rg(opt: RgOpt) -> Result> { .current_dir(&opt.cwd) .args(["--color=never", "--files-with-matches", "--smart-case"]) .args(if opt.hidden { ["--hidden", "--no-ignore"] } else { ["--no-hidden", "--ignore"] }) - .args(opt.args) + .args(&opt.args) .arg(&opt.subject) .kill_on_drop(true) .stdout(Stdio::piped())