diff options
author | Kirill Chibisov <wchibisovkirill@gmail.com> | 2019-03-13 02:11:32 +0300 |
---|---|---|
committer | Christian Duerr <chrisduerr@users.noreply.github.com> | 2019-03-12 23:11:32 +0000 |
commit | 0b9ae4ce936dfafbf5ea1929a170c97391cdea0b (patch) | |
tree | fe4d17c51ab6a5bad60e7da8c0d24adbdce5a353 | |
parent | 62c1d999e1361fc68ee4e54865b205415fa0a38d (diff) | |
download | alacritty-0b9ae4ce936dfafbf5ea1929a170c97391cdea0b.tar.gz alacritty-0b9ae4ce936dfafbf5ea1929a170c97391cdea0b.zip |
Add config option to change selection color
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | alacritty.yml | 9 | ||||
-rw-r--r-- | src/config/mod.rs | 12 | ||||
-rw-r--r-- | src/term/mod.rs | 15 |
4 files changed, 35 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index a57bfe87..5aa786bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Dynamic title support on Windows - Ability to specify starting position with the `--position` flag - New configuration field `window.position` allows specifying the starting position +- Added the ability to change the selection color ### Fixed diff --git a/alacritty.yml b/alacritty.yml index 6135b318..69268885 100644 --- a/alacritty.yml +++ b/alacritty.yml @@ -184,6 +184,15 @@ colors: #cursor: # text: '0x000000' # cursor: '0xffffff' + + # Selection colors + # + # Colors which should be used to draw the selection area. If selection + # background is unset, selection color will be the inverse of the cell colors. + # If only text is unset the cell text color will remain the same. + #selection: + # text: '0xeaeaea' + # background: '0x404040' # Normal colors normal: diff --git a/src/config/mod.rs b/src/config/mod.rs index 4b9e1f8e..b8dd9f82 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -1285,6 +1285,8 @@ pub struct Colors { pub primary: PrimaryColors, #[serde(deserialize_with = "failure_default")] pub cursor: CursorColors, + #[serde(deserialize_with = "failure_default")] + pub selection: SelectionColors, #[serde(deserialize_with = "deserialize_normal_colors")] pub normal: AnsiColors, #[serde(deserialize_with = "deserialize_bright_colors")] @@ -1300,6 +1302,7 @@ impl Default for Colors { Colors { primary: Default::default(), cursor: Default::default(), + selection: Default::default(), normal: default_normal_colors(), bright: default_bright_colors(), dim: Default::default(), @@ -1422,6 +1425,15 @@ pub struct CursorColors { } #[serde(default)] +#[derive(Debug, Copy, Clone, Default, Deserialize, PartialEq, Eq)] +pub struct SelectionColors { + #[serde(deserialize_with = "deserialize_optional_color")] + pub text: Option<Rgb>, + #[serde(deserialize_with = "deserialize_optional_color")] + pub background: Option<Rgb>, +} + +#[serde(default)] #[derive(Debug, Deserialize, PartialEq, Eq)] pub struct PrimaryColors { #[serde(deserialize_with = "rgb_from_hex")] diff --git a/src/term/mod.rs b/src/term/mod.rs index fc59ffd6..f48ad699 100644 --- a/src/term/mod.rs +++ b/src/term/mod.rs @@ -455,17 +455,28 @@ impl<'a> Iterator for RenderableCellsIter<'a> { (cell, selected) }; - // Apply inversion and lookup RGB values + // Lookup RGB values let mut fg_rgb = self.compute_fg_rgb(cell.fg, &cell); let mut bg_rgb = self.compute_bg_rgb(cell.bg); - let bg_alpha = if selected ^ cell.inverse() { + let selection_background = self.config.colors().selection.background; + let bg_alpha = if let (true, Some(col)) = (selected, selection_background) { + // Override selection background with config colors + bg_rgb = col; + 1.0 + } else if selected ^ cell.inverse() { + // Invert cell fg and bg colors mem::swap(&mut fg_rgb, &mut bg_rgb); self.compute_bg_alpha(cell.fg) } else { self.compute_bg_alpha(cell.bg) }; + // Override selection text with config colors + if let (true, Some(col)) = (selected, self.config.colors().selection.text) { + fg_rgb = col; + } + return Some(RenderableCell { line: cell.line, column: cell.column, |