summaryrefslogtreecommitdiffstats
path: root/vendor/anes/src/sequences/buffer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/anes/src/sequences/buffer.rs')
-rw-r--r--vendor/anes/src/sequences/buffer.rs145
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",
+ ),
+);