Skip to content

Commit 9c56afe

Browse files
authored
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
1 parent 1bc7aac commit 9c56afe

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

helix-tui/src/backend/crossterm.rs

+15-8
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ pub struct CrosstermBackend<W: Write> {
7979
capabilities: Capabilities,
8080
supports_keyboard_enhancement_protocol: OnceCell<bool>,
8181
mouse_capture_enabled: bool,
82+
supports_bracketed_paste: bool,
8283
}
8384

8485
impl<W> CrosstermBackend<W>
@@ -91,6 +92,7 @@ where
9192
capabilities: Capabilities::from_env_or_default(config),
9293
supports_keyboard_enhancement_protocol: OnceCell::new(),
9394
mouse_capture_enabled: false,
95+
supports_bracketed_paste: true,
9496
}
9597
}
9698

@@ -134,9 +136,16 @@ where
134136
execute!(
135137
self.buffer,
136138
terminal::EnterAlternateScreen,
137-
EnableBracketedPaste,
138139
EnableFocusChange
139140
)?;
141+
match execute!(self.buffer, EnableBracketedPaste,) {
142+
Err(err) if err.kind() == io::ErrorKind::Unsupported => {
143+
log::warn!("Bracketed paste is not supported on this terminal.");
144+
self.supports_bracketed_paste = false;
145+
}
146+
Err(err) => return Err(err),
147+
Ok(_) => (),
148+
};
140149
execute!(self.buffer, terminal::Clear(terminal::ClearType::All))?;
141150
if config.enable_mouse_capture {
142151
execute!(self.buffer, EnableMouseCapture)?;
@@ -177,9 +186,11 @@ where
177186
if self.supports_keyboard_enhancement_protocol() {
178187
execute!(self.buffer, PopKeyboardEnhancementFlags)?;
179188
}
189+
if self.supports_bracketed_paste {
190+
execute!(self.buffer, DisableBracketedPaste,)?;
191+
}
180192
execute!(
181193
self.buffer,
182-
DisableBracketedPaste,
183194
DisableFocusChange,
184195
terminal::LeaveAlternateScreen
185196
)?;
@@ -195,12 +206,8 @@ where
195206
// disable without calling enable previously
196207
let _ = execute!(stdout, DisableMouseCapture);
197208
let _ = execute!(stdout, PopKeyboardEnhancementFlags);
198-
execute!(
199-
stdout,
200-
DisableBracketedPaste,
201-
DisableFocusChange,
202-
terminal::LeaveAlternateScreen
203-
)?;
209+
let _ = execute!(stdout, DisableBracketedPaste);
210+
execute!(stdout, DisableFocusChange, terminal::LeaveAlternateScreen)?;
204211
terminal::disable_raw_mode()
205212
}
206213

0 commit comments

Comments
 (0)