From e1082e47cbaa7be4888947777f6c86050d19cd77 Mon Sep 17 00:00:00 2001 From: mtgmonkey Date: Tue, 8 Jul 2025 12:15:21 -0400 Subject: [PATCH] implement get_cursor_pos --- src/enums.rs | 2 ++ src/parsers.rs | 2 ++ src/parsers/tests.rs | 1 + 3 files changed, 5 insertions(+) diff --git a/src/enums.rs b/src/enums.rs index 5745adf..292f1b4 100644 --- a/src/enums.rs +++ b/src/enums.rs @@ -7,6 +7,7 @@ use heapless::Vec; #[derive(Debug, PartialEq, Clone)] pub enum AnsiSequence { Escape, + GetCursorPos, CursorPos(u32, u32), CursorUp(u32), CursorDown(u32), @@ -65,6 +66,7 @@ impl Display for AnsiSequence { use AnsiSequence::*; match self { Escape => write!(formatter, "\u{1b}"), + GetCursorPos => write!(formatter, "[6n"), CursorPos(line, col) => write!(formatter, "[{};{}H", line, col), CursorUp(amt) => write!(formatter, "[{}A", amt), CursorDown(amt) => write!(formatter, "[{}B", amt), diff --git a/src/parsers.rs b/src/parsers.rs index 197fff9..eb49841 100644 --- a/src/parsers.rs +++ b/src/parsers.rs @@ -182,6 +182,7 @@ fn set_top_and_bottom(input: &str) -> IResult<&str, AnsiSequence> { .parse(input) } +tag_parser!(get_cursor_pos, "[6n", AnsiSequence::GetCursorPos); tag_parser!(cursor_save, "[s", AnsiSequence::CursorSave); tag_parser!(cursor_restore, "[u", AnsiSequence::CursorRestore); tag_parser!(erase_display, "[2J", AnsiSequence::EraseDisplay); @@ -281,6 +282,7 @@ fn combined(input: &str) -> IResult<&str, AnsiSequence> { set_g1_graph, set_single_shift2, set_single_shift3, + get_cursor_pos, )) .parse(input) } diff --git a/src/parsers/tests.rs b/src/parsers/tests.rs index 720811d..ad511c7 100644 --- a/src/parsers/tests.rs +++ b/src/parsers/tests.rs @@ -44,6 +44,7 @@ macro_rules! test_def_val_parser { }; } +test_parser!(get_cursor_pos, "\u{1b}[6n"); test_def_val_parser!(cursor_pos_default, "\u{1b}[H"); test_def_val_parser!(cursor_pos, "\u{1b}[10;5H"); test_def_val_parser!(cursor_up_default, "\u{1b}[A");