From 43c8578910e209428cb8a90b4bff9b0ca30541bb Mon Sep 17 00:00:00 2001 From: Christian Duerr Date: Mon, 22 Apr 2019 00:38:59 +0200 Subject: [PATCH] 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. --- src/ansi.rs | 3 +++ src/cursor.rs | 1 + src/term/mod.rs | 4 +++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ansi.rs b/src/ansi.rs index eb8764ac..4e76c05b 100644 --- a/src/ansi.rs +++ b/src/ansi.rs @@ -356,6 +356,9 @@ pub enum CursorStyle { /// Cursor is a box like `☐` HollowBlock, + + /// Invisible cursor + Hidden, } impl Default for CursorStyle { diff --git a/src/cursor.rs b/src/cursor.rs index 268f35fa..196241a0 100644 --- a/src/cursor.rs +++ b/src/cursor.rs @@ -45,6 +45,7 @@ pub fn get_cursor_glyph( 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 5f69fb6c..0e95423d 100644 --- a/src/term/mod.rs +++ b/src/term/mod.rs @@ -175,7 +175,7 @@ impl<'a> RenderableCellsIter<'a> { term: &'b Term, config: &'b Config, selection: Option, - cursor_style: CursorStyle, + mut cursor_style: CursorStyle, metrics: font::Metrics, ) -> RenderableCellsIter<'b> { let grid = &term.grid; @@ -236,6 +236,8 @@ impl<'a> RenderableCellsIter<'a> { && (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 };