Add config option to change selection color

This commit is contained in:
Kirill Chibisov 2019-03-13 02:11:32 +03:00 committed by Christian Duerr
parent 62c1d999e1
commit 0b9ae4ce93
4 changed files with 35 additions and 2 deletions

View File

@ -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

View File

@ -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:

View File

@ -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(),
@ -1421,6 +1424,15 @@ pub struct CursorColors {
pub cursor: Option<Rgb>,
}
#[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 {

View File

@ -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,