aboutsummaryrefslogtreecommitdiff
path: root/helix-tui/src
diff options
context:
space:
mode:
Diffstat (limited to 'helix-tui/src')
-rw-r--r--helix-tui/src/backend/crossterm.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/helix-tui/src/backend/crossterm.rs b/helix-tui/src/backend/crossterm.rs
index e81c1e00..7c512ce3 100644
--- a/helix-tui/src/backend/crossterm.rs
+++ b/helix-tui/src/backend/crossterm.rs
@@ -15,6 +15,7 @@ use crossterm::{
Command,
};
use helix_view::graphics::{Color, CursorKind, Modifier, Rect, UnderlineStyle};
+use once_cell::sync::OnceCell;
use std::{
fmt,
io::{self, Write},
@@ -57,6 +58,7 @@ impl Capabilities {
pub struct CrosstermBackend<W: Write> {
buffer: W,
capabilities: Capabilities,
+ supports_keyboard_enhancement_protocol: OnceCell<bool>,
}
impl<W> CrosstermBackend<W>
@@ -67,8 +69,16 @@ where
CrosstermBackend {
buffer,
capabilities: Capabilities::from_env_or_default(),
+ supports_keyboard_enhancement_protocol: OnceCell::new(),
}
}
+
+ #[inline]
+ fn supports_keyboard_enhancement_protocol(&self) -> io::Result<bool> {
+ self.supports_keyboard_enhancement_protocol
+ .get_or_try_init(terminal::supports_keyboard_enhancement)
+ .copied()
+ }
}
impl<W> Write for CrosstermBackend<W>
@@ -100,7 +110,7 @@ where
if config.enable_mouse_capture {
execute!(self.buffer, EnableMouseCapture)?;
}
- if matches!(terminal::supports_keyboard_enhancement(), Ok(true)) {
+ if self.supports_keyboard_enhancement_protocol()? {
log::debug!("The enhanced keyboard protocol is supported on this terminal");
execute!(
self.buffer,
@@ -121,7 +131,7 @@ where
if config.enable_mouse_capture {
execute!(self.buffer, DisableMouseCapture)?;
}
- if matches!(terminal::supports_keyboard_enhancement(), Ok(true)) {
+ if self.supports_keyboard_enhancement_protocol()? {
execute!(self.buffer, PopKeyboardEnhancementFlags)?;
}
execute!(