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);
146