feat: add prepend_rules and append_rules for [open] in yazi.toml (#754)

This commit is contained in:
Filipe Paniguel 2024-02-29 23:38:02 -03:00 committed by GitHub
parent c3a1103529
commit 7f062359e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -5,7 +5,7 @@ use serde::{Deserialize, Deserializer};
use yazi_shared::MIME_DIR; use yazi_shared::MIME_DIR;
use super::Opener; use super::Opener;
use crate::{open::OpenRule, MERGED_YAZI}; use crate::{open::OpenRule, Preset, MERGED_YAZI};
#[derive(Debug)] #[derive(Debug)]
pub struct Open { pub struct Open {
@ -70,15 +70,22 @@ impl<'de> Deserialize<'de> for Open {
} }
#[derive(Deserialize)] #[derive(Deserialize)]
struct OuterOpen { struct OuterOpen {
rules: Vec<OpenRule>, rules: Vec<OpenRule>,
#[serde(default)]
prepend_rules: Vec<OpenRule>,
#[serde(default)]
append_rules: Vec<OpenRule>,
} }
let outer = Outer::deserialize(deserializer)?; let mut outer = Outer::deserialize(deserializer)?;
Preset::mix(&mut outer.open.rules, outer.open.prepend_rules, outer.open.append_rules);
let openers = outer let openers = outer
.opener .opener
.into_iter() .into_iter()
.map(|(k, v)| (k, v.into_iter().filter_map(|o| o.take()).collect::<IndexSet<_>>())) .map(|(k, v)| (k, v.into_iter().filter_map(|o| o.take()).collect::<IndexSet<_>>()))
.collect(); .collect();
Ok(Self { rules: outer.open.rules, openers }) Ok(Self { rules: outer.open.rules, openers })
} }
} }