diff options
Diffstat (limited to 'alacritty/src/config/ui_config.rs')
-rw-r--r-- | alacritty/src/config/ui_config.rs | 129 |
1 files changed, 53 insertions, 76 deletions
diff --git a/alacritty/src/config/ui_config.rs b/alacritty/src/config/ui_config.rs index 87b27b3e..25f9fb91 100644 --- a/alacritty/src/config/ui_config.rs +++ b/alacritty/src/config/ui_config.rs @@ -3,7 +3,8 @@ use std::path::PathBuf; use log::error; use serde::{Deserialize, Deserializer}; -use alacritty_terminal::config::{failure_default, Percentage, LOG_TARGET_CONFIG}; +use alacritty_config_derive::ConfigDeserialize; +use alacritty_terminal::config::{Percentage, LOG_TARGET_CONFIG}; use crate::config::bindings::{self, Binding, KeyBinding, MouseBinding}; use crate::config::debug::Debug; @@ -11,66 +12,52 @@ use crate::config::font::Font; use crate::config::mouse::Mouse; use crate::config::window::WindowConfig; -#[derive(Debug, PartialEq, Deserialize)] +#[derive(ConfigDeserialize, Debug, PartialEq)] pub struct UIConfig { /// Font configuration. - #[serde(default, deserialize_with = "failure_default")] pub font: Font, /// Window configuration. - #[serde(default, deserialize_with = "failure_default")] pub window: WindowConfig, - #[serde(default, deserialize_with = "failure_default")] pub mouse: Mouse, - /// Keybindings. - #[serde(default = "default_key_bindings", deserialize_with = "deserialize_key_bindings")] - pub key_bindings: Vec<KeyBinding>, - - /// Bindings for the mouse. - #[serde(default = "default_mouse_bindings", deserialize_with = "deserialize_mouse_bindings")] - pub mouse_bindings: Vec<MouseBinding>, - /// Debug options. - #[serde(default, deserialize_with = "failure_default")] pub debug: Debug, /// Send escape sequences using the alt key. - #[serde(default, deserialize_with = "failure_default")] - alt_send_esc: DefaultTrueBool, + pub alt_send_esc: bool, /// Live config reload. - #[serde(default, deserialize_with = "failure_default")] - live_config_reload: DefaultTrueBool, - - /// Background opacity from 0.0 to 1.0. - #[serde(default, deserialize_with = "failure_default")] - background_opacity: Percentage, + pub live_config_reload: bool, /// Path where config was loaded from. - #[serde(skip)] + #[config(skip)] pub config_paths: Vec<PathBuf>, - // TODO: DEPRECATED - #[serde(default, deserialize_with = "failure_default")] - pub dynamic_title: Option<bool>, + /// Keybindings. + key_bindings: KeyBindings, + + /// Bindings for the mouse. + mouse_bindings: MouseBindings, + + /// Background opacity from 0.0 to 1.0. + background_opacity: Percentage, } impl Default for UIConfig { fn default() -> Self { - UIConfig { + Self { + alt_send_esc: true, + live_config_reload: true, font: Default::default(), window: Default::default(), mouse: Default::default(), - key_bindings: default_key_bindings(), - mouse_bindings: default_mouse_bindings(), debug: Default::default(), - alt_send_esc: Default::default(), - background_opacity: Default::default(), - live_config_reload: Default::default(), - dynamic_title: Default::default(), config_paths: Default::default(), + key_bindings: Default::default(), + mouse_bindings: Default::default(), + background_opacity: Default::default(), } } } @@ -82,48 +69,50 @@ impl UIConfig { } #[inline] - pub fn dynamic_title(&self) -> bool { - self.dynamic_title.unwrap_or_else(|| self.window.dynamic_title()) + pub fn key_bindings(&self) -> &[KeyBinding] { + &self.key_bindings.0.as_slice() } #[inline] - pub fn set_dynamic_title(&mut self, dynamic_title: bool) { - self.window.set_dynamic_title(dynamic_title); + pub fn mouse_bindings(&self) -> &[MouseBinding] { + self.mouse_bindings.0.as_slice() } +} - /// Live config reload. - #[inline] - pub fn live_config_reload(&self) -> bool { - self.live_config_reload.0 - } +#[derive(Debug, PartialEq)] +struct KeyBindings(Vec<KeyBinding>); - /// Send escape sequences using the alt key. - #[inline] - pub fn alt_send_esc(&self) -> bool { - self.alt_send_esc.0 +impl Default for KeyBindings { + fn default() -> Self { + Self(bindings::default_key_bindings()) } } -fn default_key_bindings() -> Vec<KeyBinding> { - bindings::default_key_bindings() +impl<'de> Deserialize<'de> for KeyBindings { + fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> + where + D: Deserializer<'de>, + { + Ok(Self(deserialize_bindings(deserializer, Self::default().0)?)) + } } -fn default_mouse_bindings() -> Vec<MouseBinding> { - bindings::default_mouse_bindings() -} +#[derive(Debug, PartialEq)] +struct MouseBindings(Vec<MouseBinding>); -fn deserialize_key_bindings<'a, D>(deserializer: D) -> Result<Vec<KeyBinding>, D::Error> -where - D: Deserializer<'a>, -{ - deserialize_bindings(deserializer, bindings::default_key_bindings()) +impl Default for MouseBindings { + fn default() -> Self { + Self(bindings::default_mouse_bindings()) + } } -fn deserialize_mouse_bindings<'a, D>(deserializer: D) -> Result<Vec<MouseBinding>, D::Error> -where - D: Deserializer<'a>, -{ - deserialize_bindings(deserializer, bindings::default_mouse_bindings()) +impl<'de> Deserialize<'de> for MouseBindings { + fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> + where + D: Deserializer<'de>, + { + Ok(Self(deserialize_bindings(deserializer, Self::default().0)?)) + } } fn deserialize_bindings<'a, D, T>( @@ -143,7 +132,7 @@ where match Binding::<T>::deserialize(value) { Ok(binding) => bindings.push(binding), Err(err) => { - error!(target: LOG_TARGET_CONFIG, "Problem with config: {}; ignoring binding", err); + error!(target: LOG_TARGET_CONFIG, "Config error: {}; ignoring binding", err); }, } } @@ -158,23 +147,11 @@ where Ok(bindings) } -#[derive(Deserialize, Copy, Clone, Debug, PartialEq, Eq)] -pub struct DefaultTrueBool(pub bool); - -impl Default for DefaultTrueBool { - fn default() -> Self { - DefaultTrueBool(true) - } -} - /// A delta for a point in a 2 dimensional plane. -#[serde(default, bound(deserialize = "T: Deserialize<'de> + Default"))] -#[derive(Clone, Copy, Debug, Default, Deserialize, PartialEq, Eq)] -pub struct Delta<T: Default + PartialEq + Eq> { +#[derive(ConfigDeserialize, Clone, Copy, Debug, Default, PartialEq, Eq)] +pub struct Delta<T: Default> { /// Horizontal change. - #[serde(deserialize_with = "failure_default")] pub x: T, /// Vertical change. - #[serde(deserialize_with = "failure_default")] pub y: T, } |