diff --git a/Cargo.lock b/Cargo.lock
index 23127395..a03f9c92 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1202,6 +1202,7 @@ dependencies = [
  "helix-core",
  "helix-view",
  "log",
+ "once_cell",
  "serde",
  "termini",
  "unicode-segmentation",
diff --git a/helix-tui/Cargo.toml b/helix-tui/Cargo.toml
index 3ca7e044..8a6d5367 100644
--- a/helix-tui/Cargo.toml
+++ b/helix-tui/Cargo.toml
@@ -22,6 +22,7 @@ unicode-segmentation = "1.10"
 crossterm = { version = "0.26", optional = true }
 termini = "0.1"
 serde = { version = "1", "optional" = true, features = ["derive"]}
+once_cell = "1.17"
 log = "~0.4"
 helix-view = { version = "0.6", path = "../helix-view", features = ["term"] }
 helix-core = { version = "0.6", path = "../helix-core" }
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!(