summaryrefslogtreecommitdiff
path: root/helix-tui/src/backend/crossterm.rs
diff options
context:
space:
mode:
authorAhmed Hagi2024-01-18 12:34:06 +0000
committerGitHub2024-01-18 12:34:06 +0000
commit9c56afeff36489ff73a9b160fe7d57360a3f9952 (patch)
treeda9a9863b577f541972858bb3f4ad54d739d4bf5 /helix-tui/src/backend/crossterm.rs
parent1bc7aac7805285cea9ef6dc8adcaabf87a18ce67 (diff)
Handle failure when enabling bracketed paste (#9353)
* match instead of crash * pulling bracketedpaste out, refactor, tracking for bracketed paste * sending disable bracketed paste only when supports true * move disable bracketed paste to throwaway
Diffstat (limited to 'helix-tui/src/backend/crossterm.rs')
-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()
}