@ -79,6 +79,7 @@ pub struct CrosstermBackend<W: Write> {
capabilities : Capabilities ,
capabilities : Capabilities ,
supports_keyboard_enhancement_protocol : OnceCell < bool > ,
supports_keyboard_enhancement_protocol : OnceCell < bool > ,
mouse_capture_enabled : bool ,
mouse_capture_enabled : bool ,
supports_bracketed_paste : bool ,
}
}
impl < W > CrosstermBackend < W >
impl < W > CrosstermBackend < W >
@ -91,6 +92,7 @@ where
capabilities : Capabilities ::from_env_or_default ( config ) ,
capabilities : Capabilities ::from_env_or_default ( config ) ,
supports_keyboard_enhancement_protocol : OnceCell ::new ( ) ,
supports_keyboard_enhancement_protocol : OnceCell ::new ( ) ,
mouse_capture_enabled : false ,
mouse_capture_enabled : false ,
supports_bracketed_paste : true ,
}
}
}
}
@ -134,9 +136,16 @@ where
execute ! (
execute ! (
self . buffer ,
self . buffer ,
terminal ::EnterAlternateScreen ,
terminal ::EnterAlternateScreen ,
EnableBracketedPaste ,
EnableFocusChange
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 ) ) ? ;
execute ! ( self . buffer , terminal ::Clear ( terminal ::ClearType ::All ) ) ? ;
if config . enable_mouse_capture {
if config . enable_mouse_capture {
execute ! ( self . buffer , EnableMouseCapture ) ? ;
execute ! ( self . buffer , EnableMouseCapture ) ? ;
@ -177,9 +186,11 @@ where
if self . supports_keyboard_enhancement_protocol ( ) {
if self . supports_keyboard_enhancement_protocol ( ) {
execute ! ( self . buffer , PopKeyboardEnhancementFlags ) ? ;
execute ! ( self . buffer , PopKeyboardEnhancementFlags ) ? ;
}
}
if self . supports_bracketed_paste {
execute ! ( self . buffer , DisableBracketedPaste , ) ? ;
}
execute ! (
execute ! (
self . buffer ,
self . buffer ,
DisableBracketedPaste ,
DisableFocusChange ,
DisableFocusChange ,
terminal ::LeaveAlternateScreen
terminal ::LeaveAlternateScreen
) ? ;
) ? ;
@ -195,12 +206,8 @@ where
// disable without calling enable previously
// disable without calling enable previously
let _ = execute ! ( stdout , DisableMouseCapture ) ;
let _ = execute ! ( stdout , DisableMouseCapture ) ;
let _ = execute ! ( stdout , PopKeyboardEnhancementFlags ) ;
let _ = execute ! ( stdout , PopKeyboardEnhancementFlags ) ;
execute ! (
let _ = execute ! ( stdout , DisableBracketedPaste ) ;
stdout ,
execute ! ( stdout , DisableFocusChange , terminal ::LeaveAlternateScreen ) ? ;
DisableBracketedPaste ,
DisableFocusChange ,
terminal ::LeaveAlternateScreen
) ? ;
terminal ::disable_raw_mode ( )
terminal ::disable_raw_mode ( )
}
}