diff options
author | Dustin <dustin1114@gmail.com> | 2019-10-14 13:50:58 -0400 |
---|---|---|
committer | Christian Duerr <contact@christianduerr.com> | 2019-10-14 19:50:58 +0200 |
commit | 401c2aab964b60e8c3b072e5098ba8e366d04944 (patch) | |
tree | 8b8fb2f11a93ebb3e59dedb41e01a89f30791455 /alacritty/src | |
parent | 3475e449870b382cda4ea6d48f980577cd8c929e (diff) | |
download | r-alacritty-401c2aab964b60e8c3b072e5098ba8e366d04944.tar.gz r-alacritty-401c2aab964b60e8c3b072e5098ba8e366d04944.tar.bz2 r-alacritty-401c2aab964b60e8c3b072e5098ba8e366d04944.zip |
Add support for title stack escape sequences
This commit adds the concept of a "title stack" to the terminal. Some programs
(e.g. vim) send control sequences `CSI 22 ; 0` (push title) and `CSI 23 ; 0`
(pop title).
The title stack is just a history of previous titles. Applications can push
the current title onto the stack, and pop it back off (setting the window title
in the process).
Fixes #2840.
Diffstat (limited to 'alacritty/src')
-rw-r--r-- | alacritty/src/cli.rs | 12 | ||||
-rw-r--r-- | alacritty/src/window.rs | 6 |
2 files changed, 10 insertions, 8 deletions
diff --git a/alacritty/src/cli.rs b/alacritty/src/cli.rs index 99387a61..b0e3cc94 100644 --- a/alacritty/src/cli.rs +++ b/alacritty/src/cli.rs @@ -266,9 +266,12 @@ impl Options { config.window.dimensions = self.dimensions.unwrap_or(config.window.dimensions); config.window.position = self.position.or(config.window.position); - config.window.title = self.title.or(config.window.title); config.window.embed = self.embed.and_then(|embed| embed.parse().ok()); + if let Some(title) = self.title { + config.window.title = title.clone(); + } + if let Some(class) = self.class { let parts: Vec<_> = class.split(',').collect(); config.window.class.instance = parts[0].into(); @@ -277,7 +280,7 @@ impl Options { } } - config.set_dynamic_title(config.dynamic_title() && config.window.title.is_none()); + config.set_dynamic_title(config.dynamic_title() && config.window.title == DEFAULT_NAME); config.debug.print_events = self.print_events || config.debug.print_events; config.debug.log_level = max(config.debug.log_level, self.log_level); @@ -298,7 +301,8 @@ mod test { #[test] fn dynamic_title_ignoring_options_by_default() { - let config = Config::default(); + let mut config = Config::default(); + config.window.title = "Alacritty".to_string(); let old_dynamic_title = config.dynamic_title(); let config = Options::default().into_config(config); @@ -321,7 +325,7 @@ mod test { fn dynamic_title_overridden_by_config() { let mut config = Config::default(); - config.window.title = Some("foo".to_owned()); + config.window.title = "foo".to_owned(); let config = Options::default().into_config(config); assert!(!config.dynamic_title()); diff --git a/alacritty/src/window.rs b/alacritty/src/window.rs index c783dc69..0394296e 100644 --- a/alacritty/src/window.rs +++ b/alacritty/src/window.rs @@ -31,7 +31,7 @@ use image::ImageFormat; #[cfg(not(any(target_os = "macos", windows)))] use x11_dl::xlib::{Display as XDisplay, PropModeReplace, XErrorEvent, Xlib}; -use alacritty_terminal::config::{Decorations, StartupMode, WindowConfig, DEFAULT_NAME}; +use alacritty_terminal::config::{Decorations, StartupMode, WindowConfig}; use alacritty_terminal::event::Event; use alacritty_terminal::gl; use alacritty_terminal::term::{SizeInfo, Term}; @@ -146,9 +146,7 @@ impl Window { config: &Config, logical: Option<LogicalSize>, ) -> Result<Window> { - let title = config.window.title.as_ref().map_or(DEFAULT_NAME, |t| t); - - let window_builder = Window::get_platform_window(title, &config.window); + let window_builder = Window::get_platform_window(&config.window.title, &config.window); let windowed_context = create_gl_window(window_builder.clone(), &event_loop, false, logical) .or_else(|_| create_gl_window(window_builder, &event_loop, true, logical))?; |