diff options
author | Christian Duerr <contact@christianduerr.com> | 2023-11-08 07:03:24 +0100 |
---|---|---|
committer | Christian Duerr <contact@christianduerr.com> | 2023-11-11 20:33:06 +0100 |
commit | 2f097dac5c78a01bdb020c982a09867b3213a69b (patch) | |
tree | f751637a5d4eff5a151273b3bbc7c083d2ed8fc5 /alacritty/src/event.rs | |
parent | 683b5a2cb47579560ed272dc1a4818507dbd30c7 (diff) | |
download | r-alacritty-2f097dac5c78a01bdb020c982a09867b3213a69b.tar.gz r-alacritty-2f097dac5c78a01bdb020c982a09867b3213a69b.tar.bz2 r-alacritty-2f097dac5c78a01bdb020c982a09867b3213a69b.zip |
Add `--option` argument to `create-window`
This patch adds a new CLI parameter to the `create-window` subcommand,
matching the existing `--option` parameter when creating a new Alacritty
instance.
This parameter allows setting up the initial window configuration from
the CLI without having to call `alacritty msg config`, making sure that
all options are set appropriately right from the start.
Closes #6238.
Diffstat (limited to 'alacritty/src/event.rs')
-rw-r--r-- | alacritty/src/event.rs | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs index 3bd24f89..f7fd044c 100644 --- a/alacritty/src/event.rs +++ b/alacritty/src/event.rs @@ -36,7 +36,7 @@ use alacritty_terminal::term::search::{Match, RegexSearch}; use alacritty_terminal::term::{self, ClipboardType, Term, TermMode}; #[cfg(unix)] -use crate::cli::IpcConfig; +use crate::cli::{IpcConfig, ParsedOptions}; use crate::cli::{Options as CliOptions, WindowOptions}; use crate::clipboard::Clipboard; use crate::config::ui_config::{HintAction, HintInternalAction}; @@ -1479,7 +1479,7 @@ pub struct Processor { windows: HashMap<WindowId, WindowContext, RandomState>, gl_display: Option<GlutinDisplay>, #[cfg(unix)] - global_ipc_options: Vec<String>, + global_ipc_options: ParsedOptions, cli_options: CliOptions, config: Rc<UiConfig>, } @@ -1531,16 +1531,16 @@ impl Processor { ) -> Result<(), Box<dyn Error>> { let window = self.windows.iter().next().as_ref().unwrap().1; + // Overide config with CLI/IPC options. + let mut config_overrides = options.config_overrides(); + #[cfg(unix)] + config_overrides.extend_from_slice(&self.global_ipc_options); + let mut config = self.config.clone(); + config = config_overrides.override_config_rc(config); + #[allow(unused_mut)] let mut window_context = - window.additional(event_loop, proxy, self.config.clone(), options)?; - - // Apply global IPC options. - #[cfg(unix)] - { - let options = self.global_ipc_options.clone(); - window_context.add_window_config(self.config.clone(), &options); - } + window.additional(event_loop, proxy, config, options, config_overrides)?; self.windows.insert(window_context.id(), window_context); Ok(()) @@ -1712,7 +1712,7 @@ impl Processor { } // Load config and update each terminal. - if let Ok(config) = config::reload(&path, &self.cli_options) { + if let Ok(config) = config::reload(&path, &mut self.cli_options) { self.config = Rc::new(config); for window_context in self.windows.values_mut() { @@ -1726,15 +1726,10 @@ impl Processor { payload: EventType::IpcConfig(ipc_config), window_id, }) => { - // Persist global options for future windows. - if window_id.is_none() { - if ipc_config.reset { - self.global_ipc_options.clear(); - } else { - self.global_ipc_options.extend_from_slice(&ipc_config.options); - } - } + // Try and parse options as toml. + let mut options = ParsedOptions::from_options(&ipc_config.options); + // Override IPC config for each window with matching ID. for (_, window_context) in self .windows .iter_mut() @@ -1743,8 +1738,16 @@ impl Processor { if ipc_config.reset { window_context.reset_window_config(self.config.clone()); } else { - window_context - .add_window_config(self.config.clone(), &ipc_config.options); + window_context.add_window_config(self.config.clone(), &options); + } + } + + // Persist global options for future windows. + if window_id.is_none() { + if ipc_config.reset { + self.global_ipc_options.clear(); + } else { + self.global_ipc_options.append(&mut options); } } }, |