diff options
author | Kirill Chibisov <contact@kchibisov.com> | 2020-07-11 20:03:09 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-11 20:03:09 +0300 |
commit | 18cf806a27f06185b1ceb2d63f3b9bc2dd3dc80e (patch) | |
tree | 6609ca3aec4fe8da171de474a4a8e8d9b572f0e5 /alacritty_terminal/src/config | |
parent | 5f039cee49b9c817177c6feecc5e7d97fb0a57e1 (diff) | |
download | alacritty-18cf806a27f06185b1ceb2d63f3b9bc2dd3dc80e.tar.gz alacritty-18cf806a27f06185b1ceb2d63f3b9bc2dd3dc80e.zip |
Remove gui dependencies from alacritty_terminal
This commit removes font dependency from alacritty_terminal,
so it'll simplify the usage of alacritty_terminal as a library,
since you won't link to system's libraries anymore. It also
moves many alacritty related config options from it.
Fixes #3393.
Diffstat (limited to 'alacritty_terminal/src/config')
-rw-r--r-- | alacritty_terminal/src/config/debug.rs | 64 | ||||
-rw-r--r-- | alacritty_terminal/src/config/font.rs | 216 | ||||
-rw-r--r-- | alacritty_terminal/src/config/mod.rs | 106 | ||||
-rw-r--r-- | alacritty_terminal/src/config/window.rs | 215 |
4 files changed, 4 insertions, 597 deletions
diff --git a/alacritty_terminal/src/config/debug.rs b/alacritty_terminal/src/config/debug.rs deleted file mode 100644 index 9c9d4fde..00000000 --- a/alacritty_terminal/src/config/debug.rs +++ /dev/null @@ -1,64 +0,0 @@ -use log::{error, LevelFilter}; -use serde::{Deserialize, Deserializer}; - -use crate::config::{failure_default, LOG_TARGET_CONFIG}; - -/// Debugging options. -#[serde(default)] -#[derive(Deserialize, Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub struct Debug { - #[serde(default = "default_log_level", deserialize_with = "deserialize_log_level")] - pub log_level: LevelFilter, - - #[serde(deserialize_with = "failure_default")] - pub print_events: bool, - - /// Keep the log file after quitting. - #[serde(deserialize_with = "failure_default")] - pub persistent_logging: bool, - - /// Should show render timer. - #[serde(deserialize_with = "failure_default")] - pub render_timer: bool, - - /// Record ref test. - #[serde(skip)] - pub ref_test: bool, -} - -impl Default for Debug { - fn default() -> Self { - Self { - log_level: default_log_level(), - print_events: Default::default(), - persistent_logging: Default::default(), - render_timer: Default::default(), - ref_test: Default::default(), - } - } -} - -fn default_log_level() -> LevelFilter { - LevelFilter::Warn -} - -fn deserialize_log_level<'a, D>(deserializer: D) -> Result<LevelFilter, D::Error> -where - D: Deserializer<'a>, -{ - Ok(match failure_default::<D, String>(deserializer)?.to_lowercase().as_str() { - "off" | "none" => LevelFilter::Off, - "error" => LevelFilter::Error, - "warn" => LevelFilter::Warn, - "info" => LevelFilter::Info, - "debug" => LevelFilter::Debug, - "trace" => LevelFilter::Trace, - level => { - error!( - target: LOG_TARGET_CONFIG, - "Problem with config: invalid log level {}; using level Warn", level - ); - default_log_level() - }, - }) -} diff --git a/alacritty_terminal/src/config/font.rs b/alacritty_terminal/src/config/font.rs deleted file mode 100644 index 6a9120c9..00000000 --- a/alacritty_terminal/src/config/font.rs +++ /dev/null @@ -1,216 +0,0 @@ -use std::fmt; - -use font::Size; -use log::error; -use serde::de::Visitor; -use serde::{Deserialize, Deserializer}; - -#[cfg(target_os = "macos")] -use crate::config::DefaultTrueBool; -use crate::config::{failure_default, Delta, LOG_TARGET_CONFIG}; - -/// Font config. -/// -/// Defaults are provided at the level of this struct per platform, but not per -/// field in this struct. It might be nice in the future to have defaults for -/// each value independently. Alternatively, maybe erroring when the user -/// doesn't provide complete config is Ok. -#[serde(default)] -#[derive(Debug, Deserialize, Clone, PartialEq, Eq)] -pub struct Font { - /// Normal font face. - #[serde(deserialize_with = "failure_default")] - normal: FontDescription, - - /// Bold font face. - #[serde(deserialize_with = "failure_default")] - bold: SecondaryFontDescription, - - /// Italic font face. - #[serde(deserialize_with = "failure_default")] - italic: SecondaryFontDescription, - - /// Bold italic font face. - #[serde(deserialize_with = "failure_default")] - bold_italic: SecondaryFontDescription, - - /// Font size in points. - #[serde(deserialize_with = "DeserializeSize::deserialize")] - pub size: Size, - - /// Extra spacing per character. - #[serde(deserialize_with = "failure_default")] - pub offset: Delta<i8>, - - /// Glyph offset within character cell. - #[serde(deserialize_with = "failure_default")] - pub glyph_offset: Delta<i8>, - - #[cfg(target_os = "macos")] - #[serde(deserialize_with = "failure_default")] - use_thin_strokes: DefaultTrueBool, -} - -impl Default for Font { - fn default() -> Font { - Font { - size: default_font_size(), - normal: Default::default(), - bold: Default::default(), - italic: Default::default(), - bold_italic: Default::default(), - glyph_offset: Default::default(), - offset: Default::default(), - #[cfg(target_os = "macos")] - use_thin_strokes: Default::default(), - } - } -} - -impl Font { - /// Get a font clone with a size modification. - pub fn with_size(self, size: Size) -> Font { - Font { size, ..self } - } - - /// Get normal font description. - pub fn normal(&self) -> &FontDescription { - &self.normal - } - - /// Get bold font description. - pub fn bold(&self) -> FontDescription { - self.bold.desc(&self.normal) - } - - /// Get italic font description. - pub fn italic(&self) -> FontDescription { - self.italic.desc(&self.normal) - } - - /// Get bold italic font description. - pub fn bold_italic(&self) -> FontDescription { - self.bold_italic.desc(&self.normal) - } - - #[cfg(target_os = "macos")] - pub fn use_thin_strokes(&self) -> bool { - self.use_thin_strokes.0 - } - - #[cfg(not(target_os = "macos"))] - pub fn use_thin_strokes(&self) -> bool { - false - } -} - -fn default_font_size() -> Size { - Size::new(11.) -} - -/// Description of the normal font. -#[serde(default)] -#[derive(Debug, Deserialize, Clone, PartialEq, Eq)] -pub struct FontDescription { - #[serde(deserialize_with = "failure_default")] - pub family: String, - #[serde(deserialize_with = "failure_default")] - pub style: Option<String>, -} - -impl Default for FontDescription { - fn default() -> FontDescription { - FontDescription { - #[cfg(not(any(target_os = "macos", windows)))] - family: "monospace".into(), - #[cfg(target_os = "macos")] - family: "Menlo".into(), - #[cfg(windows)] - family: "Consolas".into(), - style: None, - } - } -} - -/// Description of the italic and bold font. -#[serde(default)] -#[derive(Debug, Default, Deserialize, Clone, PartialEq, Eq)] -pub struct SecondaryFontDescription { - #[serde(deserialize_with = "failure_default")] - family: Option<String>, - #[serde(deserialize_with = "failure_default")] - style: Option<String>, -} - -impl SecondaryFontDescription { - pub fn desc(&self, fallback: &FontDescription) -> FontDescription { - FontDescription { - family: self.family.clone().unwrap_or_else(|| fallback.family.clone()), - style: self.style.clone(), - } - } -} - -trait DeserializeSize: Sized { - fn deserialize<'a, D>(_: D) -> ::std::result::Result<Self, D::Error> - where - D: serde::de::Deserializer<'a>; -} - -impl DeserializeSize for Size { - fn deserialize<'a, D>(deserializer: D) -> ::std::result::Result<Self, D::Error> - where - D: serde::de::Deserializer<'a>, - { - use std::marker::PhantomData; - - struct NumVisitor<__D> { - _marker: PhantomData<__D>, - } - - impl<'a, __D> Visitor<'a> for NumVisitor<__D> - where - __D: serde::de::Deserializer<'a>, - { - type Value = f64; - - fn expecting(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str("f64 or u64") - } - - fn visit_f64<E>(self, value: f64) -> ::std::result::Result<Self::Value, E> - where - E: ::serde::de::Error, - { - Ok(value) - } - - fn visit_u64<E>(self, value: u64) -> ::std::result::Result<Self::Value, E> - where - E: ::serde::de::Error, - { - Ok(value as f64) - } - } - - let value = serde_yaml::Value::deserialize(deserializer)?; - let size = value - .deserialize_any(NumVisitor::<D> { _marker: PhantomData }) - .map(|v| Size::new(v as _)); - - // Use default font size as fallback. - match size { - Ok(size) => Ok(size), - Err(err) => { - let size = default_font_size(); - error!( - target: LOG_TARGET_CONFIG, - "Problem with config: {}; using size {}", - err, - size.as_f32_pts() - ); - Ok(size) - }, - } - } -} diff --git a/alacritty_terminal/src/config/mod.rs b/alacritty_terminal/src/config/mod.rs index 83dcd7b8..98579a69 100644 --- a/alacritty_terminal/src/config/mod.rs +++ b/alacritty_terminal/src/config/mod.rs @@ -8,19 +8,13 @@ use serde_yaml::Value; mod bell; mod colors; -mod debug; -mod font; mod scrolling; -mod window; use crate::ansi::CursorStyle; pub use crate::config::bell::{BellAnimation, BellConfig}; pub use crate::config::colors::Colors; -pub use crate::config::debug::Debug; -pub use crate::config::font::{Font, FontDescription}; pub use crate::config::scrolling::Scrolling; -pub use crate::config::window::{Decorations, Dimensions, StartupMode, WindowConfig, DEFAULT_NAME}; pub const LOG_TARGET_CONFIG: &str = "alacritty_config"; const MAX_SCROLLBACK_LINES: u32 = 100_000; @@ -31,18 +25,10 @@ pub type MockConfig = Config<HashMap<String, serde_yaml::Value>>; /// Top-level config type. #[derive(Debug, PartialEq, Default, Deserialize)] pub struct Config<T> { - /// Pixel padding. - #[serde(default, deserialize_with = "failure_default")] - pub padding: Option<Delta<u8>>, - /// TERM env variable. #[serde(default, deserialize_with = "failure_default")] pub env: HashMap<String, String>, - /// Font configuration. - #[serde(default, deserialize_with = "failure_default")] - pub font: Font, - /// Should draw bold text with brighter colors instead of bold font. #[serde(default, deserialize_with = "failure_default")] draw_bold_text_with_bright_colors: bool, @@ -50,14 +36,6 @@ pub struct Config<T> { #[serde(default, deserialize_with = "failure_default")] pub colors: Colors, - /// Background opacity from 0.0 to 1.0. - #[serde(default, deserialize_with = "failure_default")] - background_opacity: Percentage, - - /// Window configuration. - #[serde(default, deserialize_with = "failure_default")] - pub window: WindowConfig, - #[serde(default, deserialize_with = "failure_default")] pub selection: Selection, @@ -73,14 +51,6 @@ pub struct Config<T> { #[serde(default, deserialize_with = "failure_default")] bell: BellConfig, - /// Use dynamic title. - #[serde(default, deserialize_with = "failure_default")] - dynamic_title: DefaultTrueBool, - - /// Live config reload. - #[serde(default, deserialize_with = "failure_default")] - live_config_reload: DefaultTrueBool, - /// How much scrolling history to keep. #[serde(default, deserialize_with = "failure_default")] pub scrolling: Scrolling, @@ -94,18 +64,10 @@ pub struct Config<T> { #[serde(default, deserialize_with = "failure_default")] pub winpty_backend: bool, - /// Send escape sequences using the alt key. - #[serde(default, deserialize_with = "failure_default")] - alt_send_esc: DefaultTrueBool, - /// Shell startup directory. #[serde(default, deserialize_with = "option_explicit_none")] pub working_directory: Option<PathBuf>, - /// Debug options. - #[serde(default, deserialize_with = "failure_default")] - pub debug: Debug, - /// Additional configuration options not directly required by the terminal. #[serde(flatten)] pub ui_config: T, @@ -121,14 +83,6 @@ pub struct Config<T> { // TODO: REMOVED #[serde(default, deserialize_with = "failure_default")] pub tabspaces: Option<usize>, - - // TODO: DEPRECATED - #[serde(default, deserialize_with = "failure_default")] - pub render_timer: Option<bool>, - - // TODO: DEPRECATED - #[serde(default, deserialize_with = "failure_default")] - pub persistent_logging: Option<bool>, } impl<T> Config<T> { @@ -137,50 +91,6 @@ impl<T> Config<T> { self.draw_bold_text_with_bright_colors } - /// Should show render timer. - #[inline] - pub fn render_timer(&self) -> bool { - self.render_timer.unwrap_or(self.debug.render_timer) - } - - /// Live config reload. - #[inline] - pub fn live_config_reload(&self) -> bool { - self.live_config_reload.0 - } - - #[inline] - pub fn set_live_config_reload(&mut self, live_config_reload: bool) { - self.live_config_reload.0 = live_config_reload; - } - - #[inline] - pub fn dynamic_title(&self) -> bool { - self.dynamic_title.0 - } - - #[inline] - pub fn set_dynamic_title(&mut self, dynamic_title: bool) { - self.dynamic_title.0 = dynamic_title; - } - - /// Send escape sequences using the alt key. - #[inline] - pub fn alt_send_esc(&self) -> bool { - self.alt_send_esc.0 - } - - /// Keep the log file after quitting Alacritty. - #[inline] - pub fn persistent_logging(&self) -> bool { - self.persistent_logging.unwrap_or(self.debug.persistent_logging) - } - - #[inline] - pub fn background_opacity(&self) -> f32 { - self.background_opacity.0 as f32 - } - #[inline] pub fn bell(&self) -> &BellConfig { self.visual_bell.as_ref().unwrap_or(&self.bell) @@ -294,18 +204,6 @@ impl Program { } } -/// 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> { - /// Horizontal change. - #[serde(deserialize_with = "failure_default")] - pub x: T, - /// Vertical change. - #[serde(deserialize_with = "failure_default")] - pub y: T, -} - /// Wrapper around f32 that represents a percentage value between 0.0 and 1.0. #[derive(Clone, Copy, Debug, PartialEq)] pub struct Percentage(f32); @@ -320,6 +218,10 @@ impl Percentage { value }) } + + pub fn as_f32(self) -> f32 { + self.0 + } } impl Default for Percentage { diff --git a/alacritty_terminal/src/config/window.rs b/alacritty_terminal/src/config/window.rs deleted file mode 100644 index b410f0a2..00000000 --- a/alacritty_terminal/src/config/window.rs +++ /dev/null @@ -1,215 +0,0 @@ -use std::os::raw::c_ulong; - -use log::error; -use serde::{Deserialize, Deserializer}; -use serde_yaml::Value; - -use crate::config::{failure_default, option_explicit_none, Delta, LOG_TARGET_CONFIG}; -use crate::index::{Column, Line}; - -/// Default Alacritty name, used for window title and class. -pub const DEFAULT_NAME: &str = "Alacritty"; - -#[serde(default)] -#[derive(Deserialize, Debug, Clone, PartialEq, Eq)] -pub struct WindowConfig { - /// Initial dimensions. - #[serde(deserialize_with = "failure_default")] - pub dimensions: Dimensions, - - /// Initial position. - #[serde(deserialize_with = "failure_default")] - pub position: Option<Delta<i32>>, - - /// Pixel padding. - #[serde(deserialize_with = "failure_default")] - pub padding: Delta<u8>, - - /// Draw the window with title bar / borders. - #[serde(deserialize_with = "failure_default")] - pub decorations: Decorations, - - /// Spread out additional padding evenly. - #[serde(deserialize_with = "failure_default")] - pub dynamic_padding: bool, - - /// Startup mode. - #[serde(deserialize_with = "failure_default")] - startup_mode: StartupMode, - - /// Window title. - #[serde(default = "default_title")] - pub title: String, - - /// Window class. - #[serde(deserialize_with = "deserialize_class")] - pub class: Class, - - /// XEmbed parent. - #[serde(skip)] - pub embed: Option<c_ulong>, - - /// GTK theme variant. - #[serde(deserialize_with = "option_explicit_none")] - pub gtk_theme_variant: Option<String>, - - // TODO: DEPRECATED - #[serde(deserialize_with = "failure_default")] - pub start_maximized: Option<bool>, -} - -pub fn default_title() -> String { - DEFAULT_NAME.to_string() -} - -impl WindowConfig { - pub fn startup_mode(&self) -> StartupMode { - match self.start_maximized { - Some(true) => StartupMode::Maximized, - _ => self.startup_mode, - } - } -} - -impl Default for WindowConfig { - fn default() -> WindowConfig { - WindowConfig { - dimensions: Default::default(), - position: Default::default(), - padding: Default::default(), - decorations: Default::default(), - dynamic_padding: Default::default(), - startup_mode: Default::default(), - class: Default::default(), - embed: Default::default(), - gtk_theme_variant: Default::default(), - start_maximized: Default::default(), - title: default_title(), - } - } -} - -#[derive(Debug, Deserialize, Copy, Clone, PartialEq, Eq)] -pub enum StartupMode { - Windowed, - Maximized, - Fullscreen, - #[cfg(target_os = "macos")] - SimpleFullscreen, -} - -impl Default for StartupMode { - fn default() -> StartupMode { - StartupMode::Windowed - } -} - -#[derive(Debug, Copy, Clone, PartialEq, Eq, Deserialize)] -pub enum Decorations { - #[serde(rename = "full")] - Full, - #[cfg(target_os = "macos")] - #[serde(rename = "transparent")] - Transparent, - #[cfg(target_os = "macos")] - #[serde(rename = "buttonless")] - Buttonless, - #[serde(rename = "none")] - None, -} - -impl Default for Decorations { - fn default() -> Decorations { - Decorations::Full - } -} - -/// Window Dimensions. -/// -/// Newtype to avoid passing values incorrectly. -#[serde(default)] -#[derive(Default, Debug, Copy, Clone, Deserialize, PartialEq, Eq)] -pub struct Dimensions { - /// Window width in character columns. - #[serde(deserialize_with = "failure_default")] - columns: Column, - - /// Window Height in character lines. - #[serde(deserialize_with = "failure_default")] - lines: Line, -} - -impl Dimensions { - pub fn new(columns: Column, lines: Line) -> Self { - Dimensions { columns, lines } - } - - /// Get lines. - #[inline] - pub fn lines_u32(&self) -> u32 { - self.lines.0 as u32 - } - - /// Get columns. - #[inline] - pub fn columns_u32(&self) -> u32 { - self.columns.0 as u32 - } -} - -/// Window class hint. -#[serde(default)] -#[derive(Deserialize, Debug, Clone, PartialEq, Eq)] -pub struct Class { - #[serde(deserialize_with = "deserialize_class_resource")] - pub instance: String, - - #[serde(deserialize_with = "deserialize_class_resource")] - pub general: String, -} - -impl Default for Class { - fn default() -> Self { - Class { instance: DEFAULT_NAME.into(), general: DEFAULT_NAME.into() } - } -} - -fn deserialize_class_resource<'a, D>(deserializer: D) -> Result<String, D::Error> -where - D: Deserializer<'a>, -{ - let value = Value::deserialize(deserializer)?; - match String::deserialize(value) { - Ok(value) => Ok(value), - Err(err) => { - error!( - target: LOG_TARGET_CONFIG, - "Problem with config: {}, using default value {}", err, DEFAULT_NAME, - ); - - Ok(DEFAULT_NAME.into()) - }, - } -} - -fn deserialize_class<'a, D>(deserializer: D) -> Result<Class, D::Error> -where - D: Deserializer<'a>, -{ - let value = Value::deserialize(deserializer)?; - - if let Value::String(instance) = value { - return Ok(Class { instance, general: DEFAULT_NAME.into() }); - } - - match Class::deserialize(value) { - Ok(value) => Ok(value), - Err(err) => { - error!( - target: LOG_TARGET_CONFIG, - "Problem with config: {}; using class {}", err, DEFAULT_NAME - ); - Ok(Class::default()) - }, - } -} |