diff options
Diffstat (limited to 'helix-tui/src/backend/crossterm.rs')
-rw-r--r-- | helix-tui/src/backend/crossterm.rs | 23 |
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() } |