diff --git a/yazi-config/src/open/open.rs b/yazi-config/src/open/open.rs index 5339314d..a18ebfed 100644 --- a/yazi-config/src/open/open.rs +++ b/yazi-config/src/open/open.rs @@ -5,7 +5,7 @@ use serde::{Deserialize, Deserializer}; use yazi_shared::MIME_DIR; use super::Opener; -use crate::{open::OpenRule, MERGED_YAZI}; +use crate::{open::OpenRule, Preset, MERGED_YAZI}; #[derive(Debug)] pub struct Open { @@ -70,15 +70,22 @@ impl<'de> Deserialize<'de> for Open { } #[derive(Deserialize)] struct OuterOpen { - rules: Vec, + rules: Vec, + #[serde(default)] + prepend_rules: Vec, + #[serde(default)] + append_rules: Vec, } - 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 .opener .into_iter() .map(|(k, v)| (k, v.into_iter().filter_map(|o| o.take()).collect::>())) .collect(); + Ok(Self { rules: outer.open.rules, openers }) } }