summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEllie Huxtable <ellie@elliehuxtable.com>2024-01-05 13:15:28 +0000
committerGitHub <noreply@github.com>2024-01-05 13:15:28 +0000
commite129f7a93eb1bc595201a6ec57ba586b3d9d4419 (patch)
treee4f223a1d628b29e173a199a51f8f1528490e4cb
parent951aafa414c438553438a8e713f8e951e9ffc902 (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.rs11
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();