diff options
Diffstat (limited to 'vendor/anes/src/sequences/buffer.rs')
-rw-r--r-- | vendor/anes/src/sequences/buffer.rs | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/vendor/anes/src/sequences/buffer.rs b/vendor/anes/src/sequences/buffer.rs new file mode 100644 index 000000000..053195af6 --- /dev/null +++ b/vendor/anes/src/sequences/buffer.rs @@ -0,0 +1,145 @@ +sequence!( + /// Switches to the alternate buffer. + /// + /// Use the [`SwitchBufferToNormal`](struct.SwitchBufferToNormal.html) sequence to switch + /// back to the normal buffer. + /// + /// # Examples + /// + /// ```no_run + /// use std::io::{stdout, Write}; + /// use anes::{SwitchBufferToAlternate, SwitchBufferToNormal}; + /// + /// let mut stdout = stdout(); + /// write!(stdout, "{}", SwitchBufferToAlternate); + /// // Your app on alternate screen + /// write!(stdout, "{}", SwitchBufferToNormal); + /// ``` + struct SwitchBufferToAlternate => csi!("?1049h") +); + +sequence!( + /// Switches to the normal buffer. + /// + /// # Examples + /// + /// ```no_run + /// use std::io::{stdout, Write}; + /// use anes::{SwitchBufferToAlternate, SwitchBufferToNormal}; + /// + /// let mut stdout = stdout(); + /// write!(stdout, "{}", SwitchBufferToAlternate); + /// // Your app on alternate screen + /// write!(stdout, "{}", SwitchBufferToNormal); + /// ``` + struct SwitchBufferToNormal => csi!("?1049l") +); + +sequence!( + /// Scrolls up by the given number of rows. + /// + /// # Examples + /// + /// ```no_run + /// use std::io::{stdout, Write}; + /// use anes::ScrollBufferUp; + /// + /// let mut stdout = stdout(); + /// // Scroll up by 5 lines + /// write!(stdout, "{}", ScrollBufferUp(5)); + /// ``` + struct ScrollBufferUp(u16) => + |this, f| write!(f, csi!("{}S"), this.0) +); + +sequence!( + /// Scrolls down by the given number of rows. + /// + /// # Examples + /// + /// ```no_run + /// use std::io::{stdout, Write}; + /// use anes::ScrollBufferDown; + /// + /// let mut stdout = stdout(); + /// // Scroll down by 10 lines + /// write!(stdout, "{}", ScrollBufferDown(10)); + /// ``` + struct ScrollBufferDown(u16) => + |this, f| write!(f, csi!("{}T"), this.0) +); + +sequence!( + /// Clears part of the line. + /// + /// # Examples + /// + /// ```no_run + /// use std::io::{stdout, Write}; + /// use anes::ClearLine; + /// + /// let mut stdout = stdout(); + /// // Clear the whole line + /// write!(stdout, "{}", ClearLine::All); + /// ``` + enum ClearLine { + /// Clears from the cursor position to end of the line. + Right => csi!("K"), + /// Clears from the cursor position to beginning of the line. + Left => csi!("1K"), + /// Clears the whole line. + All => csi!("2K"), + } +); + +sequence!( + /// Clears part of the buffer. + /// + /// # Examples + /// + /// ```no_run + /// use std::io::{stdout, Write}; + /// use anes::ClearBuffer; + /// + /// let mut stdout = stdout(); + /// // Clear the entire buffer + /// write!(stdout, "{}", ClearBuffer::All); + /// ``` + enum ClearBuffer { + /// Clears from the cursor position to end of the screen. + Below => csi!("J"), + /// Clears from the cursor position to beginning of the screen. + Above => csi!("1J"), + /// Clears the entire buffer. + All => csi!("2J"), + /// Clears the entire buffer and all saved lines in the scrollback buffer. + SavedLines => csi!("3J"), + } +); + +#[cfg(test)] +test_sequences!( + switch_buffer_to_alternate( + SwitchBufferToAlternate => "\x1B[?1049h", + ), + switch_buffer_to_main( + SwitchBufferToNormal => "\x1B[?1049l", + ), + scroll_buffer_up( + ScrollBufferUp(10) => "\x1B[10S", + ), + scroll_buffer_down( + ScrollBufferDown(10) => "\x1B[10T", + ), + clear_line( + ClearLine::Right => "\x1B[K", + ClearLine::Left => "\x1B[1K", + ClearLine::All => "\x1B[2K", + ), + clear_buffer( + ClearBuffer::Below => "\x1B[J", + ClearBuffer::Above => "\x1B[1J", + ClearBuffer::All => "\x1B[2J", + ClearBuffer::SavedLines => "\x1B[3J", + ), +); |