From e129f7a93eb1bc595201a6ec57ba586b3d9d4419 Mon Sep 17 00:00:00 2001 From: Ellie Huxtable Date: Fri, 5 Jan 2024 13:15:28 +0000 Subject: [PATCH] feat: enable enhanced keyboard mode (#1505) This enabled the Kitty Keyboard Protocol Read more here: https://sw.kovidgoyal.net/kitty/keyboard-protocol/ No change on unsupported terminals, but means in the future we can be more creative with keybinding depending on terminal. Tested on Alacritty and events come through with all modifiers supported. Will be useful for #193 --- atuin/src/command/client/search/interactive.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/atuin/src/command/client/search/interactive.rs b/atuin/src/command/client/search/interactive.rs index 3cc53da2..14b80f78 100644 --- a/atuin/src/command/client/search/interactive.rs +++ b/atuin/src/command/client/search/interactive.rs @@ -7,7 +7,8 @@ use atuin_common::utils; use crossterm::{ event::{ self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEvent, KeyModifiers, - MouseEvent, + KeyboardEnhancementFlags, MouseEvent, PopKeyboardEnhancementFlags, + PushKeyboardEnhancementFlags, }, execute, terminal, }; @@ -562,14 +563,21 @@ impl Stdout { pub fn new(inline_mode: bool) -> std::io::Result { terminal::enable_raw_mode()?; let mut stdout = stdout(); + if !inline_mode { execute!(stdout, terminal::EnterAlternateScreen)?; } + execute!( stdout, event::EnableMouseCapture, event::EnableBracketedPaste, + PushKeyboardEnhancementFlags( + KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES + | KeyboardEnhancementFlags::REPORT_ALL_KEYS_AS_ESCAPE_CODES + ), )?; + Ok(Self { stdout, inline_mode, @@ -586,6 +594,7 @@ impl Drop for Stdout { self.stdout, event::DisableMouseCapture, event::DisableBracketedPaste, + PopKeyboardEnhancementFlags ) .unwrap(); terminal::disable_raw_mode().unwrap();