Fix hidden cursor inverting cell colors
Since the block cursor inverts the background and foreground colors of a
cell, the hidden cursor has done the same thing without rendering a
cursor since it was using the block cursor shape.
A new `Hidden` cursor style has been introduced for explicitly handling
the invisible cursor differently.
This fixes #2342.
diff --git a/src/ansi.rs b/src/ansi.rs
index eb8764a..4e76c05 100644
--- a/src/ansi.rs
+++ b/src/ansi.rs
@@ -356,6 +356,9 @@
/// Cursor is a box like `☐`
HollowBlock,
+
+ /// Invisible cursor
+ Hidden,
}
impl Default for CursorStyle {
diff --git a/src/cursor.rs b/src/cursor.rs
index 268f35f..196241a 100644
--- a/src/cursor.rs
+++ b/src/cursor.rs
@@ -45,6 +45,7 @@
CursorStyle::Underline => get_underline_cursor_glyph(width, line_width),
CursorStyle::Beam => get_beam_cursor_glyph(height, line_width),
CursorStyle::Block => get_block_cursor_glyph(height, width),
+ CursorStyle::Hidden => RasterizedGlyph::default(),
}
}
diff --git a/src/term/mod.rs b/src/term/mod.rs
index 5f69fb6..0e95423 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -175,7 +175,7 @@
term: &'b Term,
config: &'b Config,
selection: Option<Locations>,
- cursor_style: CursorStyle,
+ mut cursor_style: CursorStyle,
metrics: font::Metrics,
) -> RenderableCellsIter<'b> {
let grid = &term.grid;
@@ -236,6 +236,8 @@
&& (cursor.col + 1) < grid.num_cols();
Some(cursor::get_cursor_glyph(cursor_style, metrics, offset_x, offset_y, is_wide))
} else {
+ // Use hidden cursor so text will not get inverted
+ cursor_style = CursorStyle::Hidden;
None
};