| //! A terminal cursor related ANSI escape sequences. |
| |
| sequence!( |
| /// Saves the cursor position. |
| /// |
| /// Use the [`RestoreCursorPosition`](struct.RestoreCursorPosition.html) sequence to |
| /// restore the cursor position. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::{SaveCursorPosition, RestoreCursorPosition}; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Save cursor position |
| /// write!(stdout, "{}", SaveCursorPosition); |
| /// |
| /// // Your app |
| /// |
| /// // Restore cursor position |
| /// write!(stdout, "{}", RestoreCursorPosition); |
| /// ``` |
| struct SaveCursorPosition => esc!("7") |
| ); |
| |
| sequence!( |
| /// Restores the cursor position. |
| /// |
| /// Use the [`SaveCursorPosition`](struct.SaveCursorPosition.html) sequence to |
| /// save the cursor position. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::{SaveCursorPosition, RestoreCursorPosition}; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Save cursor position |
| /// write!(stdout, "{}", SaveCursorPosition); |
| /// |
| /// // Your app |
| /// |
| /// // Restore cursor position |
| /// write!(stdout, "{}", RestoreCursorPosition); |
| /// ``` |
| struct RestoreCursorPosition => esc!("8") |
| ); |
| |
| sequence!( |
| /// Hides the cursor. |
| /// |
| /// Use the [`ShowCursor`](struct.ShowCursor.html) sequence to show the cursor. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::HideCursor; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Hide cursor |
| /// write!(stdout, "{}", HideCursor); |
| /// ``` |
| struct HideCursor => csi!("?25l") |
| ); |
| |
| sequence!( |
| /// Shows the cursor. |
| /// |
| /// Use the [`HideCursor`](struct.HideCursor.html) sequence to hide the cursor. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::ShowCursor; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Show cursor |
| /// write!(stdout, "{}", ShowCursor); |
| /// ``` |
| struct ShowCursor => csi!("?25h") |
| ); |
| |
| sequence!( |
| /// Enables the cursor blinking. |
| /// |
| /// Use the [`DisableCursorBlinking`](struct.DisableCursorBlinking.html) sequence to disable |
| /// cursor blinking. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::EnableCursorBlinking; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Enable cursor blinking |
| /// write!(stdout, "{}", EnableCursorBlinking); |
| /// ``` |
| struct EnableCursorBlinking => csi!("?12h") |
| ); |
| |
| sequence!( |
| /// Disables the cursor blinking. |
| /// |
| /// Use the [`EnableCursorBlinking`](struct.EnableCursorBlinking.html) sequence to enable |
| /// cursor blinking. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::DisableCursorBlinking; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Disable cursor blinking |
| /// write!(stdout, "{}", DisableCursorBlinking); |
| /// ``` |
| struct DisableCursorBlinking => csi!("?12l") |
| ); |
| |
| sequence!( |
| /// Moves the cursor to the given location (column, row). |
| /// |
| /// # Notes |
| /// |
| /// Top/left cell is represented as `1, 1` (`column, row`). |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::MoveCursorTo; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Move cursor to top left cell |
| /// write!(stdout, "{}", MoveCursorTo(1, 1)); |
| /// ``` |
| struct MoveCursorTo(u16, u16) => |
| |this, f| write!(f, csi!("{};{}H"), this.1, this.0) |
| ); |
| |
| sequence!( |
| /// Moves the cursor up by the given number of rows. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::MoveCursorUp; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Move cursor up by 5 rows |
| /// write!(stdout, "{}", MoveCursorUp(5)); |
| /// ``` |
| struct MoveCursorUp(u16) => |
| |this, f| write!(f, csi!("{}A"), this.0) |
| ); |
| |
| sequence!( |
| /// Moves the cursor down by the given number of rows. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::MoveCursorDown; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Move cursor down by 5 rows |
| /// write!(stdout, "{}", MoveCursorDown(5)); |
| /// ``` |
| struct MoveCursorDown(u16) => |
| |this, f| write!(f, csi!("{}B"), this.0) |
| ); |
| |
| sequence!( |
| /// Moves the cursor right by the given number of columns. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::MoveCursorRight; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Move cursor right by 5 columns |
| /// write!(stdout, "{}", MoveCursorRight(5)); |
| /// ``` |
| struct MoveCursorRight(u16) => |
| |this, f| write!(f, csi!("{}C"), this.0) |
| ); |
| |
| sequence!( |
| /// Moves the cursor left by the given number of columns. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::MoveCursorLeft; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Move cursor left by 5 columns |
| /// write!(stdout, "{}", MoveCursorLeft(5)); |
| /// ``` |
| struct MoveCursorLeft(u16) => |
| |this, f| write!(f, csi!("{}D"), this.0) |
| ); |
| |
| sequence!( |
| /// Moves the cursor to beginning of line the given number of lines down. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::MoveCursorToNextLine; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Move cursor down by 2 rows and the move it to the first column |
| /// write!(stdout, "{}", MoveCursorToNextLine(2)); |
| /// ``` |
| /// |
| /// The previous example does the same thing as the following one: |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::{MoveCursorDown, MoveCursorToColumn}; |
| /// |
| /// let mut stdout = stdout(); |
| /// write!(stdout, "{}{}", MoveCursorDown(2), MoveCursorToColumn(1)); |
| /// ``` |
| struct MoveCursorToNextLine(u16) => |
| |this, f| write!(f, csi!("{}E"), this.0) |
| ); |
| |
| sequence!( |
| /// Moves the cursor to beginning of line the given number of lines up. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::MoveCursorToPreviousLine; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Move cursor up by 2 rows and the move it to the first column |
| /// write!(stdout, "{}", MoveCursorToPreviousLine(2)); |
| /// ``` |
| /// |
| /// The previous example does the same thing as the following one: |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::{MoveCursorUp, MoveCursorToColumn}; |
| /// |
| /// let mut stdout = stdout(); |
| /// write!(stdout, "{}{}", MoveCursorUp(2), MoveCursorToColumn(1)); |
| /// ``` |
| struct MoveCursorToPreviousLine(u16) => |
| |this, f| write!(f, csi!("{}F"), this.0) |
| ); |
| |
| sequence!( |
| /// Moves the cursor to the given column. |
| /// |
| /// # Notes |
| /// |
| /// Beginning of the line (left cell) is represented as `1`. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::MoveCursorToColumn; |
| /// |
| /// let mut stdout = stdout(); |
| /// // Move cursor to the 10th column (same row) |
| /// write!(stdout, "{}", MoveCursorToColumn(10)); |
| /// ``` |
| struct MoveCursorToColumn(u16) => |
| |this, f| write!(f, csi!("{}G"), this.0) |
| ); |
| |
| // TODO Enhance example with Parser to show how to retrieve it |
| sequence!( |
| /// Asks for the current cursor position. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::ReportCursorPosition; |
| /// |
| /// let mut stdout = stdout(); |
| /// write!(stdout, "{}", ReportCursorPosition); |
| /// ``` |
| 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", |
| ) |
| ); |