diff options
| author | mo8it <mo8it@proton.me> | 2024-08-17 16:49:07 +0200 |
|---|---|---|
| committer | mo8it <mo8it@proton.me> | 2024-08-17 16:49:07 +0200 |
| commit | 3eaccbb61a730e0735ac151266e15fae79353f9d (patch) | |
| tree | c9dcbf8185c0b928be991cbc5380fb542e049f5e /src | |
| parent | b678bd8ed2659d699bc2b73aee23162e9941c2d8 (diff) | |
Restore the terminal after an error in the list
Diffstat (limited to 'src')
| -rw-r--r-- | src/list.rs | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/list.rs b/src/list.rs index 74ae0a2..f28230e 100644 --- a/src/list.rs +++ b/src/list.rs @@ -8,7 +8,7 @@ use ratatui::{ }, Terminal, }; -use std::io::{self, Write}; +use std::io::{self, StdoutLock, Write}; use crate::app_state::AppState; @@ -16,15 +16,8 @@ use self::state::{Filter, UiState}; mod state; -pub fn list(app_state: &mut AppState) -> Result<()> { - let mut stdout = io::stdout().lock(); - stdout - .queue(EnterAlternateScreen)? - .queue(EnableMouseCapture)? - .flush()?; - enable_raw_mode()?; - - let mut terminal = Terminal::new(CrosstermBackend::new(&mut stdout))?; +fn handle_list(app_state: &mut AppState, stdout: &mut StdoutLock) -> Result<()> { + let mut terminal = Terminal::new(CrosstermBackend::new(stdout))?; terminal.clear()?; let mut ui_state = UiState::new(app_state); @@ -88,12 +81,25 @@ pub fn list(app_state: &mut AppState) -> Result<()> { } } - drop(terminal); + Ok(()) +} + +pub fn list(app_state: &mut AppState) -> Result<()> { + let mut stdout = io::stdout().lock(); + stdout + .queue(EnterAlternateScreen)? + .queue(EnableMouseCapture)? + .flush()?; + enable_raw_mode()?; + + let res = handle_list(app_state, &mut stdout); + + // Restore the terminal even if we got an error. stdout .queue(LeaveAlternateScreen)? .queue(DisableMouseCapture)? .flush()?; disable_raw_mode()?; - Ok(()) + res } |
