summaryrefslogtreecommitdiff
path: root/alacritty_terminal/src/config
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2020-07-11 20:03:09 +0300
committerGitHub <noreply@github.com>2020-07-11 20:03:09 +0300
commit18cf806a27f06185b1ceb2d63f3b9bc2dd3dc80e (patch)
tree6609ca3aec4fe8da171de474a4a8e8d9b572f0e5 /alacritty_terminal/src/config
parent5f039cee49b9c817177c6feecc5e7d97fb0a57e1 (diff)
downloadalacritty-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.rs64
-rw-r--r--alacritty_terminal/src/config/font.rs216
-rw-r--r--alacritty_terminal/src/config/mod.rs106
-rw-r--r--alacritty_terminal/src/config/window.rs215
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())
- },
- }
-}