From 991289fe977f37d3c965538b371846f89f9c2f3e Mon Sep 17 00:00:00 2001 From: eatradish Date: Tue, 7 May 2024 16:01:54 +0800 Subject: [PATCH] fix: try to fix terminal nothing after `oma history` exit --- src/main.rs | 15 ++++++++++++++- src/table.rs | 1 - 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 0577866b..b4933cec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use std::ffi::CString; -use std::io; +use std::io::{self, stdout, Write}; use std::path::PathBuf; use std::process::{exit, Command}; @@ -18,6 +18,7 @@ mod egg; use anyhow::anyhow; use clap::ArgMatches; +use crossterm::terminal::disable_raw_mode; use error::OutputError; use oma_console::writer::{writeln_inner, MessageType, Writer}; use oma_console::WRITER; @@ -544,6 +545,12 @@ async fn find_another_oma_inner() -> Result<(), OutputError> { Ok(()) } +#[macro_export] +#[doc(hidden)] +macro_rules! csi { + ($( $l:expr ),*) => { concat!("\x1B[", $( $l ),*) }; +} + fn single_handler() { // Kill subprocess let subprocess_pid = SUBPROCESS.load(Ordering::Relaxed); @@ -559,6 +566,12 @@ fn single_handler() { unlock_oma().expect("Failed to unlock instance."); } + // 该终端安全退出方法来自 ratatui `restore_terminal` + disable_raw_mode().ok(); + let mut f = stdout(); + f.write_all(csi!("?1049l").as_bytes()).ok(); + f.flush().ok(); + // Show cursor before exiting. // This is not a big deal so we won't panic on this. let _ = WRITER.show_cursor(); diff --git a/src/table.rs b/src/table.rs index 547f716a..f62b32ed 100644 --- a/src/table.rs +++ b/src/table.rs @@ -422,7 +422,6 @@ fn review_msg(printer: &mut PagerPrinter, pager_name: Option<&str>) printer.print("").ok(); printer.print(format!("{}\n", fl!("review-msg"))).ok(); - // let _ = writeln!(out, "{}\n", fl!("review-msg")); printer .print(format!( "{}\n",