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 = [
{ cmd = "open", args = [ "$*" ] },
{ cmd = "open", args = [ "-R", "$*" ] },
{ display_name = "open in Finder", cmd = "open", args = [ "-R", "$*" ] },
]
[open]

View file

@ -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<String>,
pub block: bool,
pub spread: bool,
pub display_name: Option<String>,
pub cmd: String,
pub args: Vec<String>,
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<String>,
pub display_name: Option<String>,
pub cmd: String,
pub args: Vec<String>,
#[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
})
}
}

View file

@ -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,