aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-tui/src/backend/crossterm.rs23
1 files changed, 15 insertions, 8 deletions
diff --git a/helix-tui/src/backend/crossterm.rs b/helix-tui/src/backend/crossterm.rs
index c55ab6bb..88e70f32 100644
--- a/helix-tui/src/backend/crossterm.rs
+++ b/helix-tui/src/backend/crossterm.rs
@@ -79,6 +79,7 @@ pub struct CrosstermBackend<W: Write> {
capabilities: Capabilities,
supports_keyboard_enhancement_protocol: OnceCell<bool>,
mouse_capture_enabled: bool,
+ supports_bracketed_paste: bool,
}
impl<W> CrosstermBackend<W>
@@ -91,6 +92,7 @@ where
capabilities: Capabilities::from_env_or_default(config),
supports_keyboard_enhancement_protocol: OnceCell::new(),
mouse_capture_enabled: false,
+ supports_bracketed_paste: true,
}
}
@@ -134,9 +136,16 @@ where
execute!(
self.buffer,
terminal::EnterAlternateScreen,
- EnableBracketedPaste,
EnableFocusChange
)?;
+ match execute!(self.buffer, EnableBracketedPaste,) {
+ Err(err) if err.kind() == io::ErrorKind::Unsupported => {
+ log::warn!("Bracketed paste is not supported on this terminal.");
+ self.supports_bracketed_paste = false;
+ }
+ Err(err) => return Err(err),
+ Ok(_) => (),
+ };
execute!(self.buffer, terminal::Clear(terminal::ClearType::All))?;
if config.enable_mouse_capture {
execute!(self.buffer, EnableMouseCapture)?;
@@ -177,9 +186,11 @@ where
if self.supports_keyboard_enhancement_protocol() {
execute!(self.buffer, PopKeyboardEnhancementFlags)?;
}
+ if self.supports_bracketed_paste {
+ execute!(self.buffer, DisableBracketedPaste,)?;
+ }
execute!(
self.buffer,
- DisableBracketedPaste,
DisableFocusChange,
terminal::LeaveAlternateScreen
)?;
@@ -195,12 +206,8 @@ where
// disable without calling enable previously
let _ = execute!(stdout, DisableMouseCapture);
let _ = execute!(stdout, PopKeyboardEnhancementFlags);
- execute!(
- stdout,
- DisableBracketedPaste,
- DisableFocusChange,
- terminal::LeaveAlternateScreen
- )?;
+ let _ = execute!(stdout, DisableBracketedPaste);
+ execute!(stdout, DisableFocusChange, terminal::LeaveAlternateScreen)?;
terminal::disable_raw_mode()
}