diff --git a/src/screen/alternate.rs b/src/screen/alternate.rs index 4296fc4..12c83cc 100644 --- a/src/screen/alternate.rs +++ b/src/screen/alternate.rs @@ -52,18 +52,18 @@ impl AlternateScreen { command.enable()?; + let mut alternate = AlternateScreen { + command, + _raw_screen: None, + }; + if raw_mode { - let raw_screen = RawScreen::into_raw_mode()?; - return Ok(AlternateScreen { - command, - _raw_screen: Some(raw_screen), - }); + // If into_raw_mode fails, alternate will be dropped and + // we'll switch back to the main screen. + alternate._raw_screen = Some(RawScreen::into_raw_mode()?); } - Ok(AlternateScreen { - command, - _raw_screen: None, - }) + Ok(alternate) } /// Switch the alternate screen back to the main screen.