mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 01:16:18 +04:00
tui: Handle keyboard enhancement check failure (#6438)
If the terminal doesn't send the primary device attributes response to the query, the `terminal::supports_keyboard_enhancement` function from crossterm may timeout and return an Err. We should interpret this error to mean that the terminal doesn't support the keyboard enhancement protocol rather than an error in claiming the terminal.
This commit is contained in:
parent
6a323c0b1b
commit
bbcdcd04a5
@ -78,21 +78,20 @@ pub fn new(buffer: W, config: &EditorConfig) -> CrosstermBackend<W> {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn supports_keyboard_enhancement_protocol(&self) -> io::Result<bool> {
|
||||
self.supports_keyboard_enhancement_protocol
|
||||
.get_or_try_init(|| {
|
||||
fn supports_keyboard_enhancement_protocol(&self) -> bool {
|
||||
*self.supports_keyboard_enhancement_protocol
|
||||
.get_or_init(|| {
|
||||
use std::time::Instant;
|
||||
|
||||
let now = Instant::now();
|
||||
let support = terminal::supports_keyboard_enhancement();
|
||||
let supported = matches!(terminal::supports_keyboard_enhancement(), Ok(true));
|
||||
log::debug!(
|
||||
"The keyboard enhancement protocol is {}supported in this terminal (checked in {:?})",
|
||||
if matches!(support, Ok(true)) { "" } else { "not " },
|
||||
if supported { "" } else { "not " },
|
||||
Instant::now().duration_since(now)
|
||||
);
|
||||
support
|
||||
supported
|
||||
})
|
||||
.copied()
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,7 +124,7 @@ fn claim(&mut self, config: Config) -> io::Result<()> {
|
||||
if config.enable_mouse_capture {
|
||||
execute!(self.buffer, EnableMouseCapture)?;
|
||||
}
|
||||
if self.supports_keyboard_enhancement_protocol()? {
|
||||
if self.supports_keyboard_enhancement_protocol() {
|
||||
execute!(
|
||||
self.buffer,
|
||||
PushKeyboardEnhancementFlags(
|
||||
@ -143,7 +142,7 @@ fn restore(&mut self, config: Config) -> io::Result<()> {
|
||||
if config.enable_mouse_capture {
|
||||
execute!(self.buffer, DisableMouseCapture)?;
|
||||
}
|
||||
if self.supports_keyboard_enhancement_protocol()? {
|
||||
if self.supports_keyboard_enhancement_protocol() {
|
||||
execute!(self.buffer, PopKeyboardEnhancementFlags)?;
|
||||
}
|
||||
execute!(
|
||||
|
Loading…
Reference in New Issue
Block a user