anes/sequences/
buffer.rs

1sequence!(
2    /// Switches to the alternate buffer.
3    /// 
4    /// Use the [`SwitchBufferToNormal`](struct.SwitchBufferToNormal.html) sequence to switch
5    /// back to the normal buffer.
6    /// 
7    /// # Examples
8    /// 
9    /// ```no_run
10    /// use std::io::{stdout, Write};
11    /// use anes::{SwitchBufferToAlternate, SwitchBufferToNormal};
12    ///
13    /// let mut stdout = stdout();
14    /// write!(stdout, "{}", SwitchBufferToAlternate);
15    /// // Your app on alternate screen
16    /// write!(stdout, "{}", SwitchBufferToNormal);
17    /// ```
18    struct SwitchBufferToAlternate => csi!("?1049h")
19);
20
21sequence!(
22    /// Switches to the normal buffer.
23    /// 
24    /// # Examples
25    /// 
26    /// ```no_run
27    /// use std::io::{stdout, Write};
28    /// use anes::{SwitchBufferToAlternate, SwitchBufferToNormal};
29    ///
30    /// let mut stdout = stdout();
31    /// write!(stdout, "{}", SwitchBufferToAlternate);
32    /// // Your app on alternate screen
33    /// write!(stdout, "{}", SwitchBufferToNormal);
34    /// ```
35    struct SwitchBufferToNormal => csi!("?1049l")
36);
37
38sequence!(
39    /// Scrolls up by the given number of rows.
40    /// 
41    /// # Examples
42    /// 
43    /// ```no_run
44    /// use std::io::{stdout, Write};
45    /// use anes::ScrollBufferUp;
46    ///
47    /// let mut stdout = stdout();
48    /// // Scroll up by 5 lines
49    /// write!(stdout, "{}", ScrollBufferUp(5));
50    /// ```
51    struct ScrollBufferUp(u16) =>
52    |this, f| write!(f, csi!("{}S"), this.0)
53);
54
55sequence!(
56    /// Scrolls down by the given number of rows.
57    /// 
58    /// # Examples
59    /// 
60    /// ```no_run
61    /// use std::io::{stdout, Write};
62    /// use anes::ScrollBufferDown;
63    ///
64    /// let mut stdout = stdout();
65    /// // Scroll down by 10 lines
66    /// write!(stdout, "{}", ScrollBufferDown(10));
67    /// ```
68    struct ScrollBufferDown(u16) =>
69    |this, f| write!(f, csi!("{}T"), this.0)
70);
71
72sequence!(
73    /// Clears part of the line.
74    /// 
75    /// # Examples
76    /// 
77    /// ```no_run
78    /// use std::io::{stdout, Write};
79    /// use anes::ClearLine;
80    ///
81    /// let mut stdout = stdout();
82    /// // Clear the whole line
83    /// write!(stdout, "{}", ClearLine::All);
84    /// ```
85    enum ClearLine {
86        /// Clears from the cursor position to end of the line.
87        Right => csi!("K"),
88        /// Clears from the cursor position to beginning of the line.
89        Left => csi!("1K"),
90        /// Clears the whole line.
91        All => csi!("2K"),
92    }
93);
94
95sequence!(
96    /// Clears part of the buffer.
97    /// 
98    /// # Examples
99    /// 
100    /// ```no_run
101    /// use std::io::{stdout, Write};
102    /// use anes::ClearBuffer;
103    ///
104    /// let mut stdout = stdout();
105    /// // Clear the entire buffer
106    /// write!(stdout, "{}", ClearBuffer::All);
107    /// ```
108    enum ClearBuffer {
109        /// Clears from the cursor position to end of the screen.
110        Below => csi!("J"),
111        /// Clears from the cursor position to beginning of the screen.
112        Above => csi!("1J"),
113        /// Clears the entire buffer.
114        All => csi!("2J"),
115        /// Clears the entire buffer and all saved lines in the scrollback buffer.
116        SavedLines => csi!("3J"),
117    }
118);
119
120#[cfg(test)]
121test_sequences!(
122    switch_buffer_to_alternate(
123        SwitchBufferToAlternate => "\x1B[?1049h",
124    ),
125    switch_buffer_to_main(
126        SwitchBufferToNormal => "\x1B[?1049l",
127    ),
128    scroll_buffer_up(
129        ScrollBufferUp(10) => "\x1B[10S",
130    ),
131    scroll_buffer_down(
132        ScrollBufferDown(10) => "\x1B[10T",
133    ),
134    clear_line(
135        ClearLine::Right => "\x1B[K",
136        ClearLine::Left => "\x1B[1K",
137        ClearLine::All => "\x1B[2K",
138    ),
139    clear_buffer(
140        ClearBuffer::Below => "\x1B[J",
141        ClearBuffer::Above => "\x1B[1J",
142        ClearBuffer::All => "\x1B[2J",
143        ClearBuffer::SavedLines => "\x1B[3J",
144    ),
145);