Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add: move GENERAL config to [general], live_config_reload to [instanc… #7908

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion alacritty/src/cli.rs
Expand Up @@ -89,7 +89,7 @@ impl Options {
pub fn override_config(&mut self, config: &mut UiConfig) {
#[cfg(unix)]
{
config.ipc_socket |= self.socket.is_some();
config.general.ipc_socket |= self.socket.is_some();
}

config.window.dynamic_title &= self.window_options.window_identity.title.is_none();
Expand Down
34 changes: 34 additions & 0 deletions alacritty/src/config/general.rs
@@ -0,0 +1,34 @@
use std::path::PathBuf;

use alacritty_config_derive::ConfigDeserialize;

#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Eq)]
pub struct General {
/// Offer IPC through a unix socket.
#[cfg(unix)]
pub ipc_socket: bool,

/// Live config reload.
pub live_config_reload: bool,

/// Shell startup directory.
pub working_directory: Option<PathBuf>,

/// Configuration file imports.
///
/// This is never read since the field is directly accessed through the config's
/// [`toml::Value`], but still present to prevent unused field warnings.
import: Vec<String>,
}

impl Default for General {
fn default() -> Self {
Self {
#[cfg(unix)]
ipc_socket: true,
live_config_reload: true,
import: Default::default(),
working_directory: Default::default(),
}
}
}
13 changes: 13 additions & 0 deletions alacritty/src/config/instance.rs
@@ -0,0 +1,13 @@
use alacritty_config_derive::ConfigDeserialize;

#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Eq)]
pub struct Instance {
/// Live config reload.
pub live_config_reload: bool,
}

impl Default for Instance {
fn default() -> Self {
Self { live_config_reload: true }
}
}
9 changes: 8 additions & 1 deletion alacritty/src/config/mod.rs
Expand Up @@ -24,6 +24,8 @@ pub mod ui_config;
pub mod window;

mod bindings;
mod general;
mod instance;
mod mouse;

use crate::cli::Options;
Expand Down Expand Up @@ -286,7 +288,12 @@ pub fn imports(
config: &Value,
recursion_limit: usize,
) -> StdResult<Vec<StdResult<PathBuf, String>>, String> {
let imports = match config.get("import") {
let general = match config.get("general") {
Some(general) => general,
None => return Ok(Vec::new()),
};

let imports = match general.get("import") {
Some(Value::Array(imports)) => imports,
Some(_) => return Err("Invalid import type: expected a sequence".into()),
None => return Ok(Vec::new()),
Expand Down
7 changes: 5 additions & 2 deletions alacritty/src/config/terminal.rs
Expand Up @@ -4,12 +4,15 @@ use toml::Value;
use alacritty_config_derive::{ConfigDeserialize, SerdeReplace};
use alacritty_terminal::term::Osc52;

use crate::config::ui_config::StringVisitor;
use crate::config::ui_config::{Program, StringVisitor};

#[derive(ConfigDeserialize, Default, Copy, Clone, Debug, PartialEq)]
#[derive(ConfigDeserialize, Default, Clone, Debug, PartialEq)]
pub struct Terminal {
/// OSC52 support mode.
pub osc52: SerdeOsc52,

/// Path to a shell program to run on startup.
pub shell: Option<Program>,
}

#[derive(SerdeReplace, Default, Copy, Clone, Debug, PartialEq)]
Expand Down
88 changes: 38 additions & 50 deletions alacritty/src/config/ui_config.rs
Expand Up @@ -26,6 +26,8 @@ use crate::config::color::Colors;
use crate::config::cursor::Cursor;
use crate::config::debug::Debug;
use crate::config::font::Font;
use crate::config::general::General;
use crate::config::instance::Instance;
use crate::config::mouse::{Mouse, MouseBindings};
use crate::config::scrolling::Scrolling;
use crate::config::selection::Selection;
Expand All @@ -38,7 +40,7 @@ use crate::config::LOG_TARGET_CONFIG;
const URL_REGEX: &str = "(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file:|git://|ssh:|ftp://)\
[^\u{0000}-\u{001F}\u{007F}-\u{009F}<>\"\\s{-}\\^⟨⟩`]+";

#[derive(ConfigDeserialize, Clone, Debug, PartialEq)]
#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Default)]
pub struct UiConfig {
/// Extra environment variables.
pub env: HashMap<String, String>,
Expand All @@ -61,6 +63,12 @@ pub struct UiConfig {
/// Mouse configuration.
pub mouse: Mouse,

/// General configuration.
pub general: General,

/// Instance configuration.
pub instance: Instance,

/// Debug options.
pub debug: Debug,

Expand All @@ -69,9 +77,6 @@ pub struct UiConfig {
'window.option_as_alt' to alter behavior of Option")]
pub alt_send_esc: Option<bool>,

/// Live config reload.
pub live_config_reload: bool,

/// Bell configuration.
pub bell: BellConfig,

Expand All @@ -85,18 +90,11 @@ pub struct UiConfig {
/// Regex hints for interacting with terminal content.
pub hints: Hints,

/// Offer IPC through a unix socket.
#[cfg(unix)]
pub ipc_socket: bool,

/// Config for the alacritty_terminal itself.
pub terminal: Terminal,

/// Path to a shell program to run on startup.
pub shell: Option<Program>,

/// Shell startup directory.
pub working_directory: Option<PathBuf>,
// pub shell: Option<Program>,

/// Keyboard configuration.
keyboard: Keyboard,
Expand All @@ -112,44 +110,34 @@ pub struct UiConfig {
/// Bindings for the mouse.
#[config(deprecated = "use mouse.bindings instead")]
mouse_bindings: Option<MouseBindings>,

/// Configuration file imports.
///
/// This is never read since the field is directly accessed through the config's
/// [`toml::Value`], but still present to prevent unused field warnings.
import: Vec<String>,
}

impl Default for UiConfig {
fn default() -> Self {
Self {
live_config_reload: true,
#[cfg(unix)]
ipc_socket: true,
draw_bold_text_with_bright_colors: Default::default(),
working_directory: Default::default(),
mouse_bindings: Default::default(),
config_paths: Default::default(),
key_bindings: Default::default(),
alt_send_esc: Default::default(),
scrolling: Default::default(),
selection: Default::default(),
keyboard: Default::default(),
terminal: Default::default(),
import: Default::default(),
cursor: Default::default(),
window: Default::default(),
colors: Default::default(),
shell: Default::default(),
mouse: Default::default(),
debug: Default::default(),
hints: Default::default(),
font: Default::default(),
bell: Default::default(),
env: Default::default(),
}
}
}
// impl Default for UiConfig {
// fn default() -> Self {
// Self {
// general: Default::default(),
// instance: Default::default(),
// draw_bold_text_with_bright_colors: Default::default(),
// mouse_bindings: Default::default(),
// config_paths: Default::default(),
// key_bindings: Default::default(),
// alt_send_esc: Default::default(),
// scrolling: Default::default(),
// selection: Default::default(),
// keyboard: Default::default(),
// terminal: Default::default(),
// cursor: Default::default(),
// window: Default::default(),
// colors: Default::default(),
// mouse: Default::default(),
// debug: Default::default(),
// hints: Default::default(),
// font: Default::default(),
// bell: Default::default(),
// env: Default::default(),
// }
// }
// }

impl UiConfig {
/// Derive [`TermConfig`] from the config.
Expand All @@ -166,10 +154,10 @@ impl UiConfig {

/// Derive [`PtyOptions`] from the config.
pub fn pty_config(&self) -> PtyOptions {
let shell = self.shell.clone().map(Into::into);
let shell = self.terminal.shell.clone().map(Into::into);
PtyOptions {
shell,
working_directory: self.working_directory.clone(),
working_directory: self.general.working_directory.clone(),
hold: false,
env: HashMap::new(),
}
Expand Down
4 changes: 2 additions & 2 deletions alacritty/src/main.rs
Expand Up @@ -165,13 +165,13 @@ fn alacritty(mut options: Options) -> Result<(), Box<dyn Error>> {
//
// The monitor watches the config file for changes and reloads it. Pending
// config changes are processed in the main loop.
if config.live_config_reload {
if config.instance.live_config_reload {
monitor::watch(config.config_paths.clone(), window_event_loop.create_proxy());
}

// Create the IPC socket listener.
#[cfg(unix)]
let socket_path = if config.ipc_socket {
let socket_path = if config.general.ipc_socket {
ipc::spawn_ipc_socket(&options, window_event_loop.create_proxy())
} else {
None
Expand Down