aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2021-09-15 12:13:09 -0600
committerJosh Rahm <rahm@google.com>2021-09-15 12:13:09 -0600
commit843583e2246a2404999b6c36293d7966cfb84334 (patch)
treeb39bc41b3436cf3e3c849d27623f5c06b11596aa
parent579a59b054b5b994317b58bde1f075b1389f05e7 (diff)
downloadr-alacritty-843583e2246a2404999b6c36293d7966cfb84334.tar.gz
r-alacritty-843583e2246a2404999b6c36293d7966cfb84334.tar.bz2
r-alacritty-843583e2246a2404999b6c36293d7966cfb84334.zip
Add overline attribute.
-rw-r--r--alacritty/src/display/content.rs2
-rw-r--r--alacritty/src/renderer/rects.rs13
-rw-r--r--alacritty_terminal/src/ansi.rs6
-rw-r--r--alacritty_terminal/src/term/cell.rs2
-rw-r--r--alacritty_terminal/src/term/mod.rs6
5 files changed, 28 insertions, 1 deletions
diff --git a/alacritty/src/display/content.rs b/alacritty/src/display/content.rs
index 9f52e74e..e5ff3780 100644
--- a/alacritty/src/display/content.rs
+++ b/alacritty/src/display/content.rs
@@ -278,7 +278,7 @@ impl RenderableCell {
self.bg_alpha == 0.
&& self.character == ' '
&& self.zerowidth.is_none()
- && !self.flags.intersects(Flags::UNDERLINE | Flags::STRIKEOUT | Flags::DOUBLE_UNDERLINE | Flags::UNDERCURL)
+ && !self.flags.intersects(Flags::UNDERLINE | Flags::STRIKEOUT | Flags::DOUBLE_UNDERLINE | Flags::UNDERCURL | Flags::OVERLINE)
}
/// Apply [`CellRgb`] colors to the cell's colors.
diff --git a/alacritty/src/renderer/rects.rs b/alacritty/src/renderer/rects.rs
index f4e98bcf..61ff91b7 100644
--- a/alacritty/src/renderer/rects.rs
+++ b/alacritty/src/renderer/rects.rs
@@ -99,6 +99,18 @@ impl RenderLine {
color,
));
},
+ Flags::OVERLINE => {
+ let start_x = start.column.0 as f32 * size.cell_width();
+ let end_x = (end.column.0 + 1) as f32 * size.cell_width();
+ rects.push(RenderRect::new(
+ start_x + size.padding_x(),
+ start.line as f32 * size.cell_height(),
+ end_x - start_x,
+ metrics.underline_thickness,
+ color,
+ 1.,
+ ));
+ },
Flags::STRIKEOUT => {
rects.push(Self::create_rect(
size,
@@ -235,6 +247,7 @@ impl RenderLines {
self.update_flag(cell, Flags::DOUBLE_UNDERLINE);
self.update_flag(cell, Flags::STRIKEOUT);
self.update_flag(cell, Flags::UNDERCURL);
+ self.update_flag(cell, Flags::OVERLINE);
}
/// Update the lines for a specific flag.
diff --git a/alacritty_terminal/src/ansi.rs b/alacritty_terminal/src/ansi.rs
index 35a46549..51a3394e 100644
--- a/alacritty_terminal/src/ansi.rs
+++ b/alacritty_terminal/src/ansi.rs
@@ -780,6 +780,8 @@ pub enum Attr {
Hidden,
/// Strikeout text.
Strike,
+ /// Strikeout text.
+ Overline,
/// Cancel bold.
CancelBold,
/// Cancel bold and dim.
@@ -796,6 +798,8 @@ pub enum Attr {
CancelHidden,
/// Cancel strikeout.
CancelStrike,
+ /// Cancel strikeout.
+ CancelOverline,
/// Set indexed foreground color.
Foreground(Color),
/// Set indexed background color.
@@ -1375,6 +1379,8 @@ fn attrs_from_sgr_parameters(params: &mut ParamsIter<'_>) -> Vec<Option<Attr>> {
parse_sgr_color(&mut iter).map(Attr::Background)
},
[49] => Some(Attr::Background(Color::Named(NamedColor::Background))),
+ [53] => Some(Attr::Overline),
+ [55] => Some(Attr::CancelOverline),
[58, params @ ..] => {
let rgb_start = if params.len() > 4 { 2 } else { 1 };
let rgb_iter = params[rgb_start..].iter().copied();
diff --git a/alacritty_terminal/src/term/cell.rs b/alacritty_terminal/src/term/cell.rs
index 467d955a..4f5ac1e2 100644
--- a/alacritty_terminal/src/term/cell.rs
+++ b/alacritty_terminal/src/term/cell.rs
@@ -25,6 +25,7 @@ bitflags! {
const LEADING_WIDE_CHAR_SPACER = 0b0000_0100_0000_0000;
const DOUBLE_UNDERLINE = 0b0000_1000_0000_0000;
const UNDERCURL = 0b0001_0000_0000_0000;
+ const OVERLINE = 0b0010_0000_0000_0000;
}
}
@@ -124,6 +125,7 @@ impl GridCell for Cell {
| Flags::UNDERLINE
| Flags::DOUBLE_UNDERLINE
| Flags::UNDERCURL
+ | Flags::OVERLINE
| Flags::STRIKEOUT
| Flags::WRAPLINE
| Flags::WIDE_CHAR_SPACER
diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs
index 85b76937..5a641a7b 100644
--- a/alacritty_terminal/src/term/mod.rs
+++ b/alacritty_terminal/src/term/mod.rs
@@ -1530,6 +1530,12 @@ impl<T: EventListener> Handler for Term<T> {
cursor.template.flags.remove(
Flags::UNDERLINE | Flags::DOUBLE_UNDERLINE | Flags::UNDERCURL);
},
+ Attr::Overline => {
+ cursor.template.flags.insert(Flags::OVERLINE);
+ },
+ Attr::CancelOverline => {
+ cursor.template.flags.remove(Flags::OVERLINE);
+ },
Attr::Hidden => cursor.template.flags.insert(Flags::HIDDEN),
Attr::CancelHidden => cursor.template.flags.remove(Flags::HIDDEN),
Attr::Strike => cursor.template.flags.insert(Flags::STRIKEOUT),