From 6790567279bfbb803955dbfe5f6392f39be05662 Mon Sep 17 00:00:00 2001 From: XYenon Date: Mon, 7 Aug 2023 19:36:02 +0800 Subject: [PATCH] feat: add name to opener and show opener's args --- config/preset/yazi.toml | 2 +- config/src/open/opener.rs | 26 +++++++++++++++++--------- core/src/manager/manager.rs | 8 +++++++- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/config/preset/yazi.toml b/config/preset/yazi.toml index c7357c14..2ca88c2b 100644 --- a/config/preset/yazi.toml +++ b/config/preset/yazi.toml @@ -33,7 +33,7 @@ audio = [ ] fallback = [ { cmd = "open", args = [ "$*" ] }, - { cmd = "open", args = [ "-R", "$*" ] }, + { display_name = "open in Finder", cmd = "open", args = [ "-R", "$*" ] }, ] [open] diff --git a/config/src/open/opener.rs b/config/src/open/opener.rs index 568fec03..a93608b7 100644 --- a/config/src/open/opener.rs +++ b/config/src/open/opener.rs @@ -2,10 +2,11 @@ use serde::{Deserialize, Deserializer}; #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct Opener { - pub cmd: String, - pub args: Vec, - pub block: bool, - pub spread: bool, + pub display_name: Option, + pub cmd: String, + pub args: Vec, + pub block: bool, + pub spread: bool, } impl<'de> Deserialize<'de> for Opener { @@ -15,17 +16,24 @@ impl<'de> Deserialize<'de> for Opener { { #[derive(Deserialize)] pub struct Shadow { - pub cmd: String, - pub args: Vec, + pub display_name: Option, + pub cmd: String, + pub args: Vec, #[serde(default)] - pub block: bool, + pub block: bool, #[serde(skip)] - pub spread: bool, + pub spread: bool, } let shadow = Shadow::deserialize(deserializer)?; let spread = shadow.args.contains(&"$*".to_string()); - Ok(Self { cmd: shadow.cmd, args: shadow.args, block: shadow.block, spread }) + Ok(Self { + display_name: shadow.display_name, + cmd: shadow.cmd, + args: shadow.args, + block: shadow.block, + spread + }) } } diff --git a/core/src/manager/manager.rs b/core/src/manager/manager.rs index 2ac229de..b89eabd3 100644 --- a/core/src/manager/manager.rs +++ b/core/src/manager/manager.rs @@ -163,7 +163,12 @@ impl Manager { let result = emit!(Select(SelectOpt { title: "Open with:".to_string(), - items: openers.iter().map(|o| o.cmd.clone()).collect(), + items: openers.iter().map(|o| { + return if let Some(display_name) = &o.display_name { + display_name.clone() + } else { + format!("{} {}", o.cmd, o.args.join(" ")) + }}).collect(), position: Position::Hovered, })); if let Ok(choice) = result.await { @@ -233,6 +238,7 @@ impl Manager { emit!(Open( vec![(cmd.into(), "".to_string())], Some(Opener { + display_name: None, cmd: "sh".to_string(), args: vec!["-c".to_string(), "$0".to_string()], block,