sequence!(
struct SaveCursorPosition => esc!("7")
);
sequence!(
struct RestoreCursorPosition => esc!("8")
);
sequence!(
struct HideCursor => csi!("?25l")
);
sequence!(
struct ShowCursor => csi!("?25h")
);
sequence!(
struct EnableCursorBlinking => csi!("?12h")
);
sequence!(
struct DisableCursorBlinking => csi!("?12l")
);
sequence!(
struct MoveCursorTo(u16, u16) =>
|this, f| write!(f, csi!("{};{}H"), this.1, this.0)
);
sequence!(
struct MoveCursorUp(u16) =>
|this, f| write!(f, csi!("{}A"), this.0)
);
sequence!(
struct MoveCursorDown(u16) =>
|this, f| write!(f, csi!("{}B"), this.0)
);
sequence!(
struct MoveCursorRight(u16) =>
|this, f| write!(f, csi!("{}C"), this.0)
);
sequence!(
struct MoveCursorLeft(u16) =>
|this, f| write!(f, csi!("{}D"), this.0)
);
sequence!(
struct MoveCursorToNextLine(u16) =>
|this, f| write!(f, csi!("{}E"), this.0)
);
sequence!(
struct MoveCursorToPreviousLine(u16) =>
|this, f| write!(f, csi!("{}F"), this.0)
);
sequence!(
struct MoveCursorToColumn(u16) =>
|this, f| write!(f, csi!("{}G"), this.0)
);
sequence!(
struct ReportCursorPosition => csi!("6n")
);
#[cfg(test)]
test_sequences!(
save_cursor_position(
SaveCursorPosition => "\x1B7",
),
restore_cursor_position(
RestoreCursorPosition => "\x1B8",
),
hide_cursor(
HideCursor => "\x1B[?25l",
),
show_cursor(
ShowCursor => "\x1B[?25h",
),
disable_cursor_blinking(
DisableCursorBlinking => "\x1B[?12l",
),
enable_cursor_blinking(
EnableCursorBlinking => "\x1B[?12h",
),
move_cursor_up(
MoveCursorUp(10) => "\x1B[10A",
),
move_cursor_down(
MoveCursorDown(10) => "\x1B[10B",
),
move_cursor_right(
MoveCursorRight(10) => "\x1B[10C",
),
move_cursor_left(
MoveCursorLeft(10) => "\x1B[10D",
),
move_cursor_to(
MoveCursorTo(5, 10) => "\x1B[10;5H",
),
move_cursor_to_next_line(
MoveCursorToNextLine(5) => "\x1B[5E",
),
move_cursor_to_previous_line(
MoveCursorToPreviousLine(5) => "\x1B[5F",
),
move_cursor_to_column(
MoveCursorToColumn(1) => "\x1B[1G",
),
report_cursor_position(
ReportCursorPosition => "\x1B[6n",
)
);