diff options
author | Ellie Huxtable <ellie@elliehuxtable.com> | 2024-01-05 13:15:28 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-05 13:15:28 +0000 |
commit | e129f7a93eb1bc595201a6ec57ba586b3d9d4419 (patch) | |
tree | e4f223a1d628b29e173a199a51f8f1528490e4cb | |
parent | 951aafa414c438553438a8e713f8e951e9ffc902 (diff) |
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
-rw-r--r-- | atuin/src/command/client/search/interactive.rs | 11 |
1 files changed, 10 insertions, 1 deletions
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<Self> { 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(); |