From 791f79a02a4bbb509c257af2849e411d32f4c18b Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Thu, 25 Aug 2022 08:51:19 +0300 Subject: Rework `--class` CLI option This commit swaps the order of `general` and `instance` arguments and also sets `instance` to `general` when only one argument was provided. This should make this option behave like in other terminals on X11, since they set either both or general by default, but not instance like Alacritty. Fixes #6279. --- alacritty/src/cli.rs | 29 +++++++++++++---------------- alacritty/src/config/window.rs | 10 ++++++++-- 2 files changed, 21 insertions(+), 18 deletions(-) (limited to 'alacritty/src') diff --git a/alacritty/src/cli.rs b/alacritty/src/cli.rs index 8872ec99..e9c563d4 100644 --- a/alacritty/src/cli.rs +++ b/alacritty/src/cli.rs @@ -11,7 +11,7 @@ use serde_yaml::Value; use alacritty_terminal::config::{Program, PtyConfig}; -use crate::config::window::{Class, Identity, DEFAULT_NAME}; +use crate::config::window::{Class, Identity}; use crate::config::{serde_utils, UiConfig}; /// CLI options for the main Alacritty executable. @@ -159,19 +159,16 @@ fn option_as_value(option: &str) -> Result { /// Parse the class CLI parameter. fn parse_class(input: &str) -> Result { - match input.find(',') { - Some(position) => { - let general = input[position + 1..].to_owned(); - - // Warn the user if they've passed too many values. - if general.contains(',') { - return Err(String::from("Too many parameters")); - } - - Ok(Class { instance: input[..position].into(), general }) + let (general, instance) = match input.split_once(',') { + // Warn the user if they've passed too many values. + Some((_, instance)) if instance.contains(',') => { + return Err(String::from("Too many parameters")) }, - None => Ok(Class { instance: input.into(), general: DEFAULT_NAME.into() }), - } + Some((general, instance)) => (general, instance), + None => (input, input), + }; + + Ok(Class::new(general, instance)) } /// Convert to hex if possible, else decimal @@ -385,15 +382,15 @@ mod tests { #[test] fn parse_instance_class() { let class = parse_class("one").unwrap(); + assert_eq!(class.general, "one"); assert_eq!(class.instance, "one"); - assert_eq!(class.general, DEFAULT_NAME); } #[test] fn parse_general_class() { let class = parse_class("one,two").unwrap(); - assert_eq!(class.instance, "one"); - assert_eq!(class.general, "two"); + assert_eq!(class.general, "one"); + assert_eq!(class.instance, "two"); } #[test] diff --git a/alacritty/src/config/window.rs b/alacritty/src/config/window.rs index 8a59a007..80df87b7 100644 --- a/alacritty/src/config/window.rs +++ b/alacritty/src/config/window.rs @@ -203,13 +203,19 @@ pub struct Dimensions { /// Window class hint. #[derive(Serialize, Debug, Clone, PartialEq, Eq)] pub struct Class { - pub instance: String, pub general: String, + pub instance: String, +} + +impl Class { + pub fn new(general: impl ToString, instance: impl ToString) -> Self { + Self { general: general.to_string(), instance: instance.to_string() } + } } impl Default for Class { fn default() -> Self { - Self { instance: DEFAULT_NAME.into(), general: DEFAULT_NAME.into() } + Self::new(DEFAULT_NAME, DEFAULT_NAME) } } -- cgit