From 6d87707ecf0be28dce862be3e6a38ddabaaad47a Mon Sep 17 00:00:00 2001 From: filipriec Date: Thu, 20 Mar 2025 22:09:04 +0100 Subject: [PATCH] terminal cleanup --- client/src/tui/terminal.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/client/src/tui/terminal.rs b/client/src/tui/terminal.rs index 9cf09eb..5fa539d 100644 --- a/client/src/tui/terminal.rs +++ b/client/src/tui/terminal.rs @@ -2,12 +2,13 @@ use crossterm::event::{self, Event}; use crossterm::{ execute, - terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, + terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen}, }; use crossterm::cursor::{SetCursorStyle, EnableBlinking}; use ratatui::{backend::CrosstermBackend, Terminal}; use std::io::{self, stdout}; use tonic::transport::Channel; +use ratatui::backend::Backend; // Import the correct clients and proto messages from their respective modules use common::proto::multieko2::adresar::adresar_client::AdresarClient; @@ -22,6 +23,12 @@ pub struct AppTerminal { table_structure_client: TableStructureServiceClient, } +impl Drop for AppTerminal { + fn drop(&mut self) { + let _ = self.cleanup(); // Best-effort cleanup during drop + } +} + impl AppTerminal { pub fn set_cursor_style( &mut self, @@ -66,8 +73,20 @@ impl AppTerminal { } pub fn cleanup(&mut self) -> Result<(), Box> { - disable_raw_mode()?; - execute!(self.terminal.backend_mut(), LeaveAlternateScreen)?; + // Disable raw mode first + let _ = disable_raw_mode(); // Ignore errors as we're cleaning up + + // Execute cleanup commands + execute!( + self.terminal.backend_mut(), + crossterm::terminal::LeaveAlternateScreen, + crossterm::cursor::SetCursorStyle::DefaultUserShape, + crossterm::cursor::Show, + )?; + + // Ensure all commands are flushed using the Backend trait's flush + self.terminal.backend_mut().flush()?; + Ok(()) }