diff --git a/src/tui.rs b/src/tui.rs index 9121106..9cc7c00 100644 --- a/src/tui.rs +++ b/src/tui.rs @@ -1,6 +1,10 @@ use std::io::{self, stderr, stdout, Stdout}; -use crossterm::{execute, terminal::*}; +use crossterm::{ + event::{KeyboardEnhancementFlags, PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags}, + execute, + terminal::*, +}; use ratatui::prelude::*; /// A type alias for the terminal type used in this application @@ -10,7 +14,15 @@ pub type Tui = Terminal>; pub fn init() -> io::Result { execute!(stdout(), EnterAlternateScreen)?; execute!(stderr(), EnterAlternateScreen)?; + if let Ok(true) = crossterm::terminal::supports_keyboard_enhancement() { + execute!( + stdout(), + PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES) + )?; + } + enable_raw_mode()?; + Terminal::new(CrosstermBackend::new(stdout())) } @@ -18,6 +30,11 @@ pub fn init() -> io::Result { pub fn restore() -> io::Result<()> { execute!(stdout(), LeaveAlternateScreen)?; execute!(stderr(), LeaveAlternateScreen)?; + if let Ok(true) = crossterm::terminal::supports_keyboard_enhancement() { + execute!(stdout(), PopKeyboardEnhancementFlags)?; + } + disable_raw_mode()?; + Ok(()) }