mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
c607239d6b
commit
3dea25e4f0
5 changed files with 31 additions and 14 deletions
|
|
@ -7,7 +7,7 @@ use scopeguard::defer;
|
|||
use tokio::io::AsyncWriteExt;
|
||||
use yazi_config::{YAZI, opener::OpenerRule};
|
||||
use yazi_dds::Pubsub;
|
||||
use yazi_fs::{File, FilesOp, max_common_root, path::skip_url, provider::{FileBuilder, Provider, local::{Gate, Local}}};
|
||||
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_proxy::{AppProxy, HIDER, TasksProxy};
|
||||
|
|
@ -51,8 +51,14 @@ impl Actor for BulkRename {
|
|||
.await?;
|
||||
|
||||
defer! { tokio::spawn(Local.remove_file(tmp.clone())); }
|
||||
TasksProxy::process_exec(opener, cwd, vec![UrlCow::default(), UrlBuf::from(&tmp).into()])
|
||||
.await;
|
||||
TasksProxy::process_exec(
|
||||
cwd,
|
||||
Splatter::new(&[UrlCow::default(), Url::regular(&tmp).into()]).splat(&opener.run),
|
||||
vec![UrlCow::default(), UrlBuf::from(&tmp).into()],
|
||||
opener.block,
|
||||
opener.orphan,
|
||||
)
|
||||
.await;
|
||||
|
||||
let _permit = HIDER.acquire().await.unwrap();
|
||||
defer!(AppProxy::resume());
|
||||
|
|
|
|||
|
|
@ -45,12 +45,12 @@ impl Actor for OpenDo {
|
|||
if let Ok(choice) = pick.await {
|
||||
TasksProxy::open_shell_compat(ProcessOpenOpt {
|
||||
cwd: opt.cwd,
|
||||
cmd: Splatter::new(&urls[..]).splat(&openers[choice].run),
|
||||
cmd: Splatter::new(&urls).splat(&openers[choice].run),
|
||||
args: urls,
|
||||
block: openers[choice].block,
|
||||
orphan: openers[choice].orphan,
|
||||
done: None,
|
||||
spread: false,
|
||||
spread: openers[choice].spread,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -70,7 +70,7 @@ impl OpenDo {
|
|||
for (opener, args) in openers {
|
||||
cx.tasks.open_shell_compat(ProcessOpenOpt {
|
||||
cwd: cwd.clone(),
|
||||
cmd: Splatter::new(&args[..]).splat(&opener.run),
|
||||
cmd: Splatter::new(&args).splat(&opener.run),
|
||||
args,
|
||||
block: opener.block,
|
||||
orphan: opener.orphan,
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ impl Actor for Shell {
|
|||
|
||||
TasksProxy::open_shell_compat(ProcessOpenOpt {
|
||||
cwd,
|
||||
cmd: Splatter::new(&selected[..]).splat(opt.run.as_ref()),
|
||||
cmd: Splatter::new(&selected).splat(opt.run.as_ref()),
|
||||
args: selected,
|
||||
block: opt.block,
|
||||
orphan: opt.orphan,
|
||||
|
|
|
|||
|
|
@ -245,11 +245,15 @@ impl<T> Splatter<T> {
|
|||
}
|
||||
|
||||
// TODO: remove
|
||||
impl<'a> Splatable for &'a [UrlCow<'a>] {
|
||||
impl<'a, T> Splatable for &'a T
|
||||
where
|
||||
T: AsRef<[UrlCow<'a>]>,
|
||||
{
|
||||
fn tab(&self) -> usize { 0 }
|
||||
|
||||
fn selected(&self, tab: usize, idx: Option<usize>) -> impl Iterator<Item = Url<'_>> {
|
||||
self
|
||||
.as_ref()
|
||||
.iter()
|
||||
.filter(move |_| tab == 1)
|
||||
.map(|u| u.as_url())
|
||||
|
|
@ -258,7 +262,7 @@ impl<'a> Splatable for &'a [UrlCow<'a>] {
|
|||
}
|
||||
|
||||
fn hovered(&self, tab: usize) -> Option<Url<'_>> {
|
||||
self.first().filter(|_| tab == 1).map(|u| u.as_url())
|
||||
self.as_ref().first().filter(|_| tab == 1).map(|u| u.as_url())
|
||||
}
|
||||
|
||||
fn yanked(&self) -> impl Iterator<Item = Url<'_>> { iter::empty() }
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use std::ffi::OsString;
|
||||
|
||||
use tokio::sync::oneshot;
|
||||
use yazi_config::opener::OpenerRule;
|
||||
use yazi_macro::{emit, relay};
|
||||
use yazi_parser::tasks::ProcessOpenOpt;
|
||||
use yazi_shared::url::{UrlBuf, UrlCow};
|
||||
|
|
@ -12,14 +13,20 @@ impl TasksProxy {
|
|||
emit!(Call(relay!(tasks:open_shell_compat).with_any("opt", opt)));
|
||||
}
|
||||
|
||||
pub async fn process_exec(opener: &OpenerRule, cwd: UrlBuf, args: Vec<UrlCow<'static>>) {
|
||||
pub async fn process_exec(
|
||||
cwd: UrlBuf,
|
||||
cmd: OsString,
|
||||
args: Vec<UrlCow<'static>>,
|
||||
block: bool,
|
||||
orphan: bool,
|
||||
) {
|
||||
let (tx, rx) = oneshot::channel();
|
||||
emit!(Call(relay!(tasks:process_open).with_any("opt", ProcessOpenOpt {
|
||||
cwd,
|
||||
cmd: opener.run.clone().into(),
|
||||
cmd,
|
||||
args,
|
||||
block: opener.block,
|
||||
orphan: opener.orphan,
|
||||
block,
|
||||
orphan,
|
||||
done: Some(tx),
|
||||
spread: false
|
||||
})));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue