From 8c6422458299496f6fa2a6984c93bd05b55c1888 Mon Sep 17 00:00:00 2001 From: Christian Duerr Date: Sun, 1 Mar 2020 04:07:36 +0000 Subject: [PATCH] Remove `tabspaces` config option This completely removes the tabspaces option from the Alacritty configuration, due to frequent misuse of it. Based on some research, none of the terminal emulators support setting the value for tabspaces or read the terminfo to determine init_tabs value at startup. The tested terminal emulators were URxvt, XTerm, and Termite. --- CHANGELOG.md | 1 + alacritty.yml | 9 --------- alacritty/src/config/mod.rs | 8 ++++++++ alacritty_terminal/src/config/mod.rs | 21 ++++----------------- alacritty_terminal/src/term/mod.rs | 15 +++++++-------- 5 files changed, 20 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3e6ded..06bc1cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,6 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed - Config option `auto_scroll`, which is now always disabled +- Config option `tabspaces`, which is now fixed at `8` ## 0.4.1 diff --git a/alacritty.yml b/alacritty.yml index b65b4f0..7ed4666 100644 --- a/alacritty.yml +++ b/alacritty.yml @@ -87,15 +87,6 @@ # scrollback is enabled (history > 0). #multiplier: 3 -# Spaces per Tab (changes require restart) -# -# This setting defines the width of a tab in cells. -# -# Some applications, like Emacs, rely on knowing about the width of a tab. -# To prevent unexpected behavior in these applications, it's also required to -# change the `it` value in terminfo when altering this setting. -#tabspaces: 8 - # Font configuration #font: # Normal (roman) font face diff --git a/alacritty/src/config/mod.rs b/alacritty/src/config/mod.rs index d7b702b..2a59871 100644 --- a/alacritty/src/config/mod.rs +++ b/alacritty/src/config/mod.rs @@ -209,6 +209,14 @@ fn print_deprecation_warnings(config: &Config) { safely removed from the config" ); } + + if config.tabspaces.is_some() { + warn!( + target: LOG_TARGET_CONFIG, + "Config tabspaces has been removed and is now always 8, it can be safely removed from \ + the config" + ); + } } #[cfg(test)] diff --git a/alacritty_terminal/src/config/mod.rs b/alacritty_terminal/src/config/mod.rs index fd049af..da95391 100644 --- a/alacritty_terminal/src/config/mod.rs +++ b/alacritty_terminal/src/config/mod.rs @@ -96,10 +96,6 @@ pub struct Config { #[serde(default, deserialize_with = "failure_default")] live_config_reload: DefaultTrueBool, - /// Number of spaces in one tab - #[serde(default, deserialize_with = "failure_default")] - tabspaces: Tabspaces, - /// How much scrolling history to keep #[serde(default, deserialize_with = "failure_default")] pub scrolling: Scrolling, @@ -133,6 +129,10 @@ pub struct Config { #[serde(skip)] pub hold: bool, + // TODO: REMOVED + #[serde(default, deserialize_with = "failure_default")] + pub tabspaces: Option, + // TODO: DEPRECATED #[serde(default, deserialize_with = "failure_default")] pub render_timer: Option, @@ -143,10 +143,6 @@ pub struct Config { } impl Config { - pub fn tabspaces(&self) -> usize { - self.tabspaces.0 - } - #[inline] pub fn draw_bold_text_with_bright_colors(&self) -> bool { self.draw_bold_text_with_bright_colors @@ -327,15 +323,6 @@ impl<'a> Deserialize<'a> for Alpha { } } -#[derive(Deserialize, Copy, Clone, Debug, PartialEq, Eq)] -struct Tabspaces(usize); - -impl Default for Tabspaces { - fn default() -> Self { - Tabspaces(8) - } -} - #[derive(Deserialize, Copy, Clone, Debug, PartialEq, Eq)] struct DefaultTrueBool(bool); diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs index f198c59..d545d68 100644 --- a/alacritty_terminal/src/term/mod.rs +++ b/alacritty_terminal/src/term/mod.rs @@ -47,6 +47,9 @@ const BRACKET_PAIRS: [(char, char); 4] = [('(', ')'), ('[', ']'), ('{', '}'), (' /// Max size of the window title stack. const TITLE_STACK_MAX_DEPTH: usize = 4096; +/// Default tab interval, corresponding to terminfo `it` value. +const INITIAL_TABSTOPS: usize = 8; + /// A type that can expand a given point to a region /// /// Usually this is implemented for some 2-D array type since @@ -916,8 +919,7 @@ impl Term { let grid = Grid::new(num_lines, num_cols, history_size, Cell::default()); let alt = Grid::new(num_lines, num_cols, 0 /* scroll history */, Cell::default()); - let tabspaces = config.tabspaces(); - let tabs = TabStops::new(grid.num_cols(), tabspaces); + let tabs = TabStops::new(grid.num_cols()); let scroll_region = Line(0)..grid.num_lines(); @@ -2154,16 +2156,14 @@ impl Handler for Term { struct TabStops { tabs: Vec, - tabspaces: usize, } impl TabStops { #[inline] - fn new(num_cols: Column, tabspaces: usize) -> TabStops { + fn new(num_cols: Column) -> TabStops { TabStops { - tabspaces, tabs: IndexRange::from(Column(0)..num_cols) - .map(|i| (*i as usize) % tabspaces == 0) + .map(|i| (*i as usize) % INITIAL_TABSTOPS == 0) .collect::>(), } } @@ -2179,10 +2179,9 @@ impl TabStops { /// Increase tabstop capacity. #[inline] fn resize(&mut self, num_cols: Column) { - let tabspaces = self.tabspaces; let mut index = self.tabs.len(); self.tabs.resize_with(num_cols.0, || { - let is_tabstop = index % tabspaces == 0; + let is_tabstop = index % INITIAL_TABSTOPS == 0; index += 1; is_tabstop });