1 //! A terminal related ANSI escape sequences.
2 
3 sequence!(
4     /// Resizes the text area to the given width and height in characters.
5     ///
6     /// # Examples
7     ///
8     /// ```no_run
9     /// use std::io::{stdout, Write};
10     /// use anes::ResizeTextArea;
11     ///
12     /// let mut stdout = stdout();
13     /// // Resize the terminal to 80x25
14     /// write!(stdout, "{}", ResizeTextArea(80, 25));
15     /// ```
16     struct ResizeTextArea(u16, u16) =>
17     |this, f| write!(f, csi!("8;{};{}t"), this.1, this.0)
18 );
19 
20 sequence!(
21     /// Tells the terminal to start reporting mouse events.
22     ///
23     /// Mouse events are not reported by default.
24     struct EnableMouseEvents => concat!(
25         csi!("?1000h"),
26         csi!("?1002h"),
27         csi!("?1015h"),
28         csi!("?1006h")
29     )
30 );
31 
32 sequence!(
33     /// Tells the terminal to stop reporting mouse events.
34     struct DisableMouseEvents => concat!(
35         csi!("?1006l"),
36         csi!("?1015l"),
37         csi!("?1002l"),
38         csi!("?1000l")
39     )
40 );
41 
42 #[cfg(test)]
43 test_sequences!(
44     resize_text_area(
45         ResizeTextArea(80, 25) => "\x1B[8;25;80t",
46         ResizeTextArea(1, 1) => "\x1B[8;1;1t",
47     ),
48     enable_mouse_events(
49         EnableMouseEvents => "\x1B[?1000h\x1B[?1002h\x1B[?1015h\x1B[?1006h",
50     ),
51     disable_mouse_events(
52         DisableMouseEvents => "\x1B[?1006l\x1B[?1015l\x1B[?1002l\x1B[?1000l",
53     )
54 );
55