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 tokio::io::AsyncWriteExt;
|
||||||
use yazi_config::{YAZI, opener::OpenerRule};
|
use yazi_config::{YAZI, opener::OpenerRule};
|
||||||
use yazi_dds::Pubsub;
|
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_macro::{err, succ};
|
||||||
use yazi_parser::VoidOpt;
|
use yazi_parser::VoidOpt;
|
||||||
use yazi_proxy::{AppProxy, HIDER, TasksProxy};
|
use yazi_proxy::{AppProxy, HIDER, TasksProxy};
|
||||||
|
|
@ -51,8 +51,14 @@ impl Actor for BulkRename {
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
defer! { tokio::spawn(Local.remove_file(tmp.clone())); }
|
defer! { tokio::spawn(Local.remove_file(tmp.clone())); }
|
||||||
TasksProxy::process_exec(opener, cwd, vec![UrlCow::default(), UrlBuf::from(&tmp).into()])
|
TasksProxy::process_exec(
|
||||||
.await;
|
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();
|
let _permit = HIDER.acquire().await.unwrap();
|
||||||
defer!(AppProxy::resume());
|
defer!(AppProxy::resume());
|
||||||
|
|
|
||||||
|
|
@ -45,12 +45,12 @@ impl Actor for OpenDo {
|
||||||
if let Ok(choice) = pick.await {
|
if let Ok(choice) = pick.await {
|
||||||
TasksProxy::open_shell_compat(ProcessOpenOpt {
|
TasksProxy::open_shell_compat(ProcessOpenOpt {
|
||||||
cwd: opt.cwd,
|
cwd: opt.cwd,
|
||||||
cmd: Splatter::new(&urls[..]).splat(&openers[choice].run),
|
cmd: Splatter::new(&urls).splat(&openers[choice].run),
|
||||||
args: urls,
|
args: urls,
|
||||||
block: openers[choice].block,
|
block: openers[choice].block,
|
||||||
orphan: openers[choice].orphan,
|
orphan: openers[choice].orphan,
|
||||||
done: None,
|
done: None,
|
||||||
spread: false,
|
spread: openers[choice].spread,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -70,7 +70,7 @@ impl OpenDo {
|
||||||
for (opener, args) in openers {
|
for (opener, args) in openers {
|
||||||
cx.tasks.open_shell_compat(ProcessOpenOpt {
|
cx.tasks.open_shell_compat(ProcessOpenOpt {
|
||||||
cwd: cwd.clone(),
|
cwd: cwd.clone(),
|
||||||
cmd: Splatter::new(&args[..]).splat(&opener.run),
|
cmd: Splatter::new(&args).splat(&opener.run),
|
||||||
args,
|
args,
|
||||||
block: opener.block,
|
block: opener.block,
|
||||||
orphan: opener.orphan,
|
orphan: opener.orphan,
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ impl Actor for Shell {
|
||||||
|
|
||||||
TasksProxy::open_shell_compat(ProcessOpenOpt {
|
TasksProxy::open_shell_compat(ProcessOpenOpt {
|
||||||
cwd,
|
cwd,
|
||||||
cmd: Splatter::new(&selected[..]).splat(opt.run.as_ref()),
|
cmd: Splatter::new(&selected).splat(opt.run.as_ref()),
|
||||||
args: selected,
|
args: selected,
|
||||||
block: opt.block,
|
block: opt.block,
|
||||||
orphan: opt.orphan,
|
orphan: opt.orphan,
|
||||||
|
|
|
||||||
|
|
@ -245,11 +245,15 @@ impl<T> Splatter<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove
|
// 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 tab(&self) -> usize { 0 }
|
||||||
|
|
||||||
fn selected(&self, tab: usize, idx: Option<usize>) -> impl Iterator<Item = Url<'_>> {
|
fn selected(&self, tab: usize, idx: Option<usize>) -> impl Iterator<Item = Url<'_>> {
|
||||||
self
|
self
|
||||||
|
.as_ref()
|
||||||
.iter()
|
.iter()
|
||||||
.filter(move |_| tab == 1)
|
.filter(move |_| tab == 1)
|
||||||
.map(|u| u.as_url())
|
.map(|u| u.as_url())
|
||||||
|
|
@ -258,7 +262,7 @@ impl<'a> Splatable for &'a [UrlCow<'a>] {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hovered(&self, tab: usize) -> Option<Url<'_>> {
|
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() }
|
fn yanked(&self) -> impl Iterator<Item = Url<'_>> { iter::empty() }
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
|
use std::ffi::OsString;
|
||||||
|
|
||||||
use tokio::sync::oneshot;
|
use tokio::sync::oneshot;
|
||||||
use yazi_config::opener::OpenerRule;
|
|
||||||
use yazi_macro::{emit, relay};
|
use yazi_macro::{emit, relay};
|
||||||
use yazi_parser::tasks::ProcessOpenOpt;
|
use yazi_parser::tasks::ProcessOpenOpt;
|
||||||
use yazi_shared::url::{UrlBuf, UrlCow};
|
use yazi_shared::url::{UrlBuf, UrlCow};
|
||||||
|
|
@ -12,14 +13,20 @@ impl TasksProxy {
|
||||||
emit!(Call(relay!(tasks:open_shell_compat).with_any("opt", opt)));
|
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();
|
let (tx, rx) = oneshot::channel();
|
||||||
emit!(Call(relay!(tasks:process_open).with_any("opt", ProcessOpenOpt {
|
emit!(Call(relay!(tasks:process_open).with_any("opt", ProcessOpenOpt {
|
||||||
cwd,
|
cwd,
|
||||||
cmd: opener.run.clone().into(),
|
cmd,
|
||||||
args,
|
args,
|
||||||
block: opener.block,
|
block,
|
||||||
orphan: opener.orphan,
|
orphan,
|
||||||
done: Some(tx),
|
done: Some(tx),
|
||||||
spread: false
|
spread: false
|
||||||
})));
|
})));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue