summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty/src/display/content.rs25
2 files changed, 14 insertions, 12 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 59ad284e..f337f601 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Line indicator obstructing vi mode cursor when scrolled into history
- Vi mode search starting in the line below the vi cursor
+- Invisible cursor with matching foreground/background colors
## 0.9.0
diff --git a/alacritty/src/display/content.rs b/alacritty/src/display/content.rs
index 2deb3d3e..db73a73b 100644
--- a/alacritty/src/display/content.rs
+++ b/alacritty/src/display/content.rs
@@ -117,22 +117,23 @@ impl<'a> RenderableContent<'a> {
} else {
self.config.ui_config.colors.cursor
};
- let mut cursor_color =
+ let cursor_color =
self.terminal_content.colors[NamedColor::Cursor].map_or(color.background, CellRgb::Rgb);
- let mut text_color = color.foreground;
+ let text_color = color.foreground;
- // Invert the cursor if it has a fixed background close to the cell's background.
- if matches!(
- cursor_color,
- CellRgb::Rgb(color) if color.contrast(cell.bg) < MIN_CURSOR_CONTRAST
- ) {
- cursor_color = CellRgb::CellForeground;
- text_color = CellRgb::CellBackground;
- }
+ let insufficient_contrast = (!matches!(cursor_color, CellRgb::Rgb(_))
+ || !matches!(text_color, CellRgb::Rgb(_)))
+ && cell.fg.contrast(cell.bg) < MIN_CURSOR_CONTRAST;
// Convert from cell colors to RGB.
- let text_color = text_color.color(cell.fg, cell.bg);
- let cursor_color = cursor_color.color(cell.fg, cell.bg);
+ let mut text_color = text_color.color(cell.fg, cell.bg);
+ let mut cursor_color = cursor_color.color(cell.fg, cell.bg);
+
+ // Invert cursor color with insufficient contrast to prevent invisible cursors.
+ if insufficient_contrast {
+ cursor_color = self.config.ui_config.colors.primary.foreground;
+ text_color = self.config.ui_config.colors.primary.background;
+ }
Some(RenderableCursor {
is_wide: cell.flags.contains(Flags::WIDE_CHAR),