diff --git a/Cargo.lock b/Cargo.lock index 797cb6e..f7719c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,7 +2,7 @@ # It is not intended for manual editing. [[package]] name = "ansi-parser" -version = "0.5.0" +version = "0.5.1" dependencies = [ "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/src/enums.rs b/src/enums.rs index 427aedc..bc2f9f0 100644 --- a/src/enums.rs +++ b/src/enums.rs @@ -16,13 +16,14 @@ pub enum AnsiSequence { SetGraphicsMode(Vec), SetMode(u8), ResetMode(u8), -// HideCursor, + HideCursor, + ShowCursor } use std::fmt::Display; impl Display for AnsiSequence { fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(formatter, "\x1b[")?; + write!(formatter, "\u{1b}[")?; use AnsiSequence::*; match self { @@ -56,7 +57,11 @@ impl Display for AnsiSequence { SetMode(mode) => write!(formatter, "={}h", mode), ResetMode(mode) - => write!(formatter, "={}l", mode) + => write!(formatter, "={}l", mode), + ShowCursor + => write!(formatter, "?25h"), + HideCursor + => write!(formatter, "?25l") } } } diff --git a/src/parsers.rs b/src/parsers.rs index 110c021..0a2e609 100644 --- a/src/parsers.rs +++ b/src/parsers.rs @@ -159,6 +159,22 @@ named!( ) ); +named!( + hide_cursor<&str, AnsiSequence>, + do_parse!( + tag!("?25l") >> + (AnsiSequence::HideCursor) + ) +); + +named!( + show_cursor<&str, AnsiSequence>, + do_parse!( + tag!("?25h") >> + (AnsiSequence::ShowCursor) + ) +); + named!( combined<&str, AnsiSequence>, alt!( @@ -174,6 +190,8 @@ named!( | graphics_mode | set_mode | reset_mode + | hide_cursor + | show_cursor ) );