feat: add name to opener and show opener's args

This commit is contained in:
XYenon 2023-08-07 19:36:02 +08:00
parent ab5ff057c4
commit 6790567279
3 changed files with 25 additions and 11 deletions

View file

@ -33,7 +33,7 @@ audio = [
] ]
fallback = [ fallback = [
{ cmd = "open", args = [ "$*" ] }, { cmd = "open", args = [ "$*" ] },
{ cmd = "open", args = [ "-R", "$*" ] }, { display_name = "open in Finder", cmd = "open", args = [ "-R", "$*" ] },
] ]
[open] [open]

View file

@ -2,10 +2,11 @@ use serde::{Deserialize, Deserializer};
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Opener { pub struct Opener {
pub cmd: String, pub display_name: Option<String>,
pub args: Vec<String>, pub cmd: String,
pub block: bool, pub args: Vec<String>,
pub spread: bool, pub block: bool,
pub spread: bool,
} }
impl<'de> Deserialize<'de> for Opener { impl<'de> Deserialize<'de> for Opener {
@ -15,17 +16,24 @@ impl<'de> Deserialize<'de> for Opener {
{ {
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct Shadow { pub struct Shadow {
pub cmd: String, pub display_name: Option<String>,
pub args: Vec<String>, pub cmd: String,
pub args: Vec<String>,
#[serde(default)] #[serde(default)]
pub block: bool, pub block: bool,
#[serde(skip)] #[serde(skip)]
pub spread: bool, pub spread: bool,
} }
let shadow = Shadow::deserialize(deserializer)?; let shadow = Shadow::deserialize(deserializer)?;
let spread = shadow.args.contains(&"$*".to_string()); 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
})
} }
} }

View file

@ -163,7 +163,12 @@ impl Manager {
let result = emit!(Select(SelectOpt { let result = emit!(Select(SelectOpt {
title: "Open with:".to_string(), 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, position: Position::Hovered,
})); }));
if let Ok(choice) = result.await { if let Ok(choice) = result.await {
@ -233,6 +238,7 @@ impl Manager {
emit!(Open( emit!(Open(
vec![(cmd.into(), "".to_string())], vec![(cmd.into(), "".to_string())],
Some(Opener { Some(Opener {
display_name: None,
cmd: "sh".to_string(), cmd: "sh".to_string(),
args: vec!["-c".to_string(), "$0".to_string()], args: vec!["-c".to_string(), "$0".to_string()],
block, block,