1 | sequence!( |
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 | |
21 | sequence!( |
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 | |
38 | sequence!( |
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 | |
55 | sequence!( |
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 | |
72 | sequence!( |
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 | |
95 | sequence!( |
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)] |
121 | test_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 | |