Browse and listen to thousands of radio stations across the globe right from your terminal ๐ ๐ป ๐ตโจ
radio
rust
tokio
web-radio
command-line-tool
tui
1use std::io::{self, stderr, stdout, Stdout};
2
3use crossterm::{
4 event::{KeyboardEnhancementFlags, PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags},
5 execute,
6 terminal::*,
7};
8use ratatui::prelude::*;
9
10/// A type alias for the terminal type used in this application
11pub type Tui = Terminal<CrosstermBackend<Stdout>>;
12
13/// Initialize the terminal
14pub fn init() -> io::Result<Tui> {
15 execute!(stdout(), EnterAlternateScreen)?;
16 execute!(stderr(), EnterAlternateScreen)?;
17 if let Ok(true) = crossterm::terminal::supports_keyboard_enhancement() {
18 execute!(
19 stdout(),
20 PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES)
21 )?;
22 }
23
24 enable_raw_mode()?;
25
26 Terminal::new(CrosstermBackend::new(stdout()))
27}
28
29/// Restore the terminal to its original state
30pub fn restore() -> io::Result<()> {
31 execute!(stdout(), LeaveAlternateScreen)?;
32 execute!(stderr(), LeaveAlternateScreen)?;
33 if let Ok(true) = crossterm::terminal::supports_keyboard_enhancement() {
34 execute!(stdout(), PopKeyboardEnhancementFlags)?;
35 }
36
37 disable_raw_mode()?;
38
39 Ok(())
40}