From 45ece466c235cce6e998bbd404f915cad3628c8c Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 11 Aug 2022 23:15:09 +0200 Subject: [PATCH] Support more modifiers on some terminal emulators If a terminal emulator supports the kitty protocol, this change will allow cove to take advantage of this. This means that more modifiers will work on special keys like enter or escape. See also this section of the kitty protocol docs: https://sw.kovidgoyal.net/kitty/keyboard-protocol/#disambiguate-escape-codes --- src/terminal.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/terminal.rs b/src/terminal.rs index 7f01c90..9feca31 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -4,7 +4,10 @@ use std::io::Write; use std::{io, mem}; use crossterm::cursor::{Hide, MoveTo, Show}; -use crossterm::event::{DisableBracketedPaste, EnableBracketedPaste}; +use crossterm::event::{ + DisableBracketedPaste, EnableBracketedPaste, KeyboardEnhancementFlags, + PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags, +}; use crossterm::style::{PrintStyledContent, StyledContent}; use crossterm::terminal::{Clear, ClearType, EnterAlternateScreen, LeaveAlternateScreen}; use crossterm::{ExecutableCommand, QueueableCommand}; @@ -50,7 +53,10 @@ impl Terminal { crossterm::terminal::disable_raw_mode()?; self.out.execute(LeaveAlternateScreen)?; #[cfg(not(windows))] - self.out.execute(DisableBracketedPaste)?; + { + self.out.execute(DisableBracketedPaste)?; + self.out.execute(PopKeyboardEnhancementFlags)?; + } self.out.execute(Show)?; Ok(()) } @@ -59,7 +65,12 @@ impl Terminal { crossterm::terminal::enable_raw_mode()?; self.out.execute(EnterAlternateScreen)?; #[cfg(not(windows))] - self.out.execute(EnableBracketedPaste)?; + { + self.out.execute(EnableBracketedPaste)?; + self.out.execute(PushKeyboardEnhancementFlags( + KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES, + ))?; + } self.full_redraw = true; Ok(()) }