use std::{borrow::Cow, ffi::OsString}; use tokio::sync::oneshot; use yazi_config::opener::OpenerRule; use yazi_macro::emit; use yazi_shared::{event::Cmd, url::Url}; use crate::options::{OpenWithOpt, ProcessExecOpt}; pub struct TasksProxy; impl TasksProxy { #[inline] pub fn open_with(opener: Cow<'static, OpenerRule>, cwd: Url, targets: Vec) { emit!(Call(Cmd::new("tasks:open_with").with_any("option", OpenWithOpt { opener, cwd, targets }))); } #[inline] pub async fn process_exec(opener: Cow<'static, OpenerRule>, cwd: Url, args: Vec) { let (tx, rx) = oneshot::channel(); emit!(Call(Cmd::new("tasks:process_exec").with_any("option", ProcessExecOpt { cwd, opener, args, done: Some(tx) }))); rx.await.ok(); } }