Add separate color for underlines
This commit is contained in:
parent
999b45b28c
commit
3ad7d543ca
5 changed files with 36 additions and 2 deletions
|
@ -4,7 +4,7 @@ use crossterm::{
|
|||
execute, queue,
|
||||
style::{
|
||||
Attribute as CAttribute, Color as CColor, Print, SetAttribute, SetBackgroundColor,
|
||||
SetForegroundColor,
|
||||
SetForegroundColor, SetUnderlineColor,
|
||||
},
|
||||
terminal::{self, Clear, ClearType},
|
||||
};
|
||||
|
@ -47,6 +47,7 @@ where
|
|||
{
|
||||
let mut fg = Color::Reset;
|
||||
let mut bg = Color::Reset;
|
||||
let mut underline = Color::Reset;
|
||||
let mut modifier = Modifier::empty();
|
||||
let mut last_pos: Option<(u16, u16)> = None;
|
||||
for (x, y, cell) in content {
|
||||
|
@ -73,6 +74,11 @@ where
|
|||
map_error(queue!(self.buffer, SetBackgroundColor(color)))?;
|
||||
bg = cell.bg;
|
||||
}
|
||||
if cell.underline != underline {
|
||||
let color = CColor::from(cell.underline);
|
||||
map_error(queue!(self.buffer, SetUnderlineColor(color)))?;
|
||||
underline = cell.underline;
|
||||
}
|
||||
|
||||
map_error(queue!(self.buffer, Print(&cell.symbol)))?;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ pub struct Cell {
|
|||
pub symbol: String,
|
||||
pub fg: Color,
|
||||
pub bg: Color,
|
||||
pub underline: Color,
|
||||
pub modifier: Modifier,
|
||||
}
|
||||
|
||||
|
@ -44,6 +45,9 @@ impl Cell {
|
|||
if let Some(c) = style.bg {
|
||||
self.bg = c;
|
||||
}
|
||||
if let Some(c) = style.underline {
|
||||
self.underline = c;
|
||||
}
|
||||
self.modifier.insert(style.add_modifier);
|
||||
self.modifier.remove(style.sub_modifier);
|
||||
self
|
||||
|
@ -53,6 +57,7 @@ impl Cell {
|
|||
Style::default()
|
||||
.fg(self.fg)
|
||||
.bg(self.bg)
|
||||
.underline(self.bg)
|
||||
.add_modifier(self.modifier)
|
||||
}
|
||||
|
||||
|
@ -61,6 +66,7 @@ impl Cell {
|
|||
self.symbol.push(' ');
|
||||
self.fg = Color::Reset;
|
||||
self.bg = Color::Reset;
|
||||
self.underline = Color::Reset;
|
||||
self.modifier = Modifier::empty();
|
||||
}
|
||||
}
|
||||
|
@ -71,6 +77,7 @@ impl Default for Cell {
|
|||
symbol: " ".into(),
|
||||
fg: Color::Reset,
|
||||
bg: Color::Reset,
|
||||
underline: Color::Reset,
|
||||
modifier: Modifier::empty(),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -440,6 +440,7 @@ impl FromStr for Modifier {
|
|||
pub struct Style {
|
||||
pub fg: Option<Color>,
|
||||
pub bg: Option<Color>,
|
||||
pub underline: Option<Color>,
|
||||
pub add_modifier: Modifier,
|
||||
pub sub_modifier: Modifier,
|
||||
}
|
||||
|
@ -449,6 +450,7 @@ impl Default for Style {
|
|||
Style {
|
||||
fg: None,
|
||||
bg: None,
|
||||
underline: None,
|
||||
add_modifier: Modifier::empty(),
|
||||
sub_modifier: Modifier::empty(),
|
||||
}
|
||||
|
@ -461,6 +463,7 @@ impl Style {
|
|||
Style {
|
||||
fg: Some(Color::Reset),
|
||||
bg: Some(Color::Reset),
|
||||
underline: Some(Color::Reset),
|
||||
add_modifier: Modifier::empty(),
|
||||
sub_modifier: Modifier::all(),
|
||||
}
|
||||
|
@ -496,6 +499,21 @@ impl Style {
|
|||
self
|
||||
}
|
||||
|
||||
/// Changes the underline color.
|
||||
///
|
||||
/// ## Examples
|
||||
///
|
||||
/// ```rust
|
||||
/// # use helix_view::graphics::{Color, Style};
|
||||
/// let style = Style::default().underline(Color::Blue);
|
||||
/// let diff = Style::default().underline(Color::Red);
|
||||
/// assert_eq!(style.patch(diff), Style::default().underline(Color::Red));
|
||||
/// ```
|
||||
pub fn underline(mut self, color: Color) -> Style {
|
||||
self.underline = Some(color);
|
||||
self
|
||||
}
|
||||
|
||||
/// Changes the text emphasis.
|
||||
///
|
||||
/// When applied, it adds the given modifier to the `Style` modifiers.
|
||||
|
@ -552,6 +570,7 @@ impl Style {
|
|||
pub fn patch(mut self, other: Style) -> Style {
|
||||
self.fg = other.fg.or(self.fg);
|
||||
self.bg = other.bg.or(self.bg);
|
||||
self.underline = other.underline.or(self.underline);
|
||||
|
||||
self.add_modifier.remove(other.sub_modifier);
|
||||
self.add_modifier.insert(other.add_modifier);
|
||||
|
|
|
@ -269,6 +269,7 @@ impl ThemePalette {
|
|||
match name.as_str() {
|
||||
"fg" => *style = style.fg(self.parse_color(value)?),
|
||||
"bg" => *style = style.bg(self.parse_color(value)?),
|
||||
"underline" => *style = style.underline(self.parse_color(value)?),
|
||||
"modifiers" => {
|
||||
let modifiers = value
|
||||
.as_array()
|
||||
|
|
|
@ -92,7 +92,8 @@
|
|||
"info" = { fg = "light_blue" }
|
||||
"hint" = { fg = "light_gray3" }
|
||||
|
||||
diagnostic = { modifiers = ["underlined"] }
|
||||
"diagnostic.error" = {underline = "red", modifiers = ["undercurled"] }
|
||||
"diagnostic" = {underline = "gold", modifiers = ["undercurled"] }
|
||||
|
||||
[palette]
|
||||
white = "#ffffff"
|
||||
|
|
Loading…
Add table
Reference in a new issue