Unnamed repository; edit this file 'description' to name the repository.
tui: Handle keyboard enhancement check failure (#6438)
If the terminal doesn't send the primary device attributes response to the query, the `terminal::supports_keyboard_enhancement` function from crossterm may timeout and return an Err. We should interpret this error to mean that the terminal doesn't support the keyboard enhancement protocol rather than an error in claiming the terminal.
Michael Davis 2023-03-29
parent 6a323c0 · commit bbcdcd0
-rw-r--r--helix-tui/src/backend/crossterm.rs17
1 files changed, 8 insertions, 9 deletions
diff --git a/helix-tui/src/backend/crossterm.rs b/helix-tui/src/backend/crossterm.rs
index 4b230f53..4d44f187 100644
--- a/helix-tui/src/backend/crossterm.rs
+++ b/helix-tui/src/backend/crossterm.rs
@@ -78,21 +78,20 @@ where
}
#[inline]
- fn supports_keyboard_enhancement_protocol(&self) -> io::Result<bool> {
- self.supports_keyboard_enhancement_protocol
- .get_or_try_init(|| {
+ fn supports_keyboard_enhancement_protocol(&self) -> bool {
+ *self.supports_keyboard_enhancement_protocol
+ .get_or_init(|| {
use std::time::Instant;
let now = Instant::now();
- let support = terminal::supports_keyboard_enhancement();
+ let supported = matches!(terminal::supports_keyboard_enhancement(), Ok(true));
log::debug!(
"The keyboard enhancement protocol is {}supported in this terminal (checked in {:?})",
- if matches!(support, Ok(true)) { "" } else { "not " },
+ if supported { "" } else { "not " },
Instant::now().duration_since(now)
);
- support
+ supported
})
- .copied()
}
}
@@ -125,7 +124,7 @@ where
if config.enable_mouse_capture {
execute!(self.buffer, EnableMouseCapture)?;
}
- if self.supports_keyboard_enhancement_protocol()? {
+ if self.supports_keyboard_enhancement_protocol() {
execute!(
self.buffer,
PushKeyboardEnhancementFlags(
@@ -143,7 +142,7 @@ where
if config.enable_mouse_capture {
execute!(self.buffer, DisableMouseCapture)?;
}
- if self.supports_keyboard_enhancement_protocol()? {
+ if self.supports_keyboard_enhancement_protocol() {
execute!(self.buffer, PopKeyboardEnhancementFlags)?;
}
execute!(