From 4e8e3081dbeca88f5d6eddb93671ab5f6f257b96 Mon Sep 17 00:00:00 2001 From: Ahmed Hagi Date: Tue, 16 Jan 2024 18:21:39 +0000 Subject: [PATCH 1/4] match instead of crash --- helix-tui/src/backend/crossterm.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/helix-tui/src/backend/crossterm.rs b/helix-tui/src/backend/crossterm.rs index c55ab6bbd0bd..ba3beea4b307 100644 --- a/helix-tui/src/backend/crossterm.rs +++ b/helix-tui/src/backend/crossterm.rs @@ -131,12 +131,22 @@ where { fn claim(&mut self, config: Config) -> io::Result<()> { terminal::enable_raw_mode()?; - execute!( + match execute!( self.buffer, terminal::EnterAlternateScreen, EnableBracketedPaste, EnableFocusChange - )?; + ) { + Ok(_) => {} + Err(e) => match e.kind() { + io::ErrorKind::Unsupported => { + log::error!("Bracketed paste is not supported on this terminal.") + } + _ => { + return Err(e); + } + }, + }; execute!(self.buffer, terminal::Clear(terminal::ClearType::All))?; if config.enable_mouse_capture { execute!(self.buffer, EnableMouseCapture)?; From 8aa8155ca8d85d4c4454772cbe75f8bd6ff7df44 Mon Sep 17 00:00:00 2001 From: Ahmed Hagi Date: Tue, 16 Jan 2024 19:19:59 +0000 Subject: [PATCH 2/4] pulling bracketedpaste out, refactor, tracking for bracketed paste --- helix-tui/src/backend/crossterm.rs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/helix-tui/src/backend/crossterm.rs b/helix-tui/src/backend/crossterm.rs index ba3beea4b307..267b68e3086c 100644 --- a/helix-tui/src/backend/crossterm.rs +++ b/helix-tui/src/backend/crossterm.rs @@ -79,6 +79,7 @@ pub struct CrosstermBackend { capabilities: Capabilities, supports_keyboard_enhancement_protocol: OnceCell, mouse_capture_enabled: bool, + supports_bracketed_paste: bool, } impl CrosstermBackend @@ -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, } } @@ -131,21 +133,18 @@ where { fn claim(&mut self, config: Config) -> io::Result<()> { terminal::enable_raw_mode()?; - match execute!( + execute!( self.buffer, terminal::EnterAlternateScreen, - EnableBracketedPaste, EnableFocusChange - ) { - Ok(_) => {} - Err(e) => match e.kind() { - io::ErrorKind::Unsupported => { - log::error!("Bracketed paste is not supported on this terminal.") - } - _ => { - return Err(e); - } - }, + )?; + 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 { From 030f0070935371fc30431972f4234b9f1ad68215 Mon Sep 17 00:00:00 2001 From: Ahmed Hagi Date: Tue, 16 Jan 2024 19:30:29 +0000 Subject: [PATCH 3/4] sending disable bracketed paste only when supports true --- helix-tui/src/backend/crossterm.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/helix-tui/src/backend/crossterm.rs b/helix-tui/src/backend/crossterm.rs index 267b68e3086c..3b830e9b8973 100644 --- a/helix-tui/src/backend/crossterm.rs +++ b/helix-tui/src/backend/crossterm.rs @@ -186,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 )?; From 9e64db077ac7070de0b093d7093cf0310bbe46b9 Mon Sep 17 00:00:00 2001 From: Ahmed Hagi Date: Tue, 16 Jan 2024 20:30:55 +0000 Subject: [PATCH 4/4] move disable bracketed paste to throwaway --- helix-tui/src/backend/crossterm.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/helix-tui/src/backend/crossterm.rs b/helix-tui/src/backend/crossterm.rs index 3b830e9b8973..88e70f32e684 100644 --- a/helix-tui/src/backend/crossterm.rs +++ b/helix-tui/src/backend/crossterm.rs @@ -206,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() }