From 34abfcdc8e148c047ebb2e06539036e514df7046 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Thu, 20 Nov 2025 17:44:49 +0800 Subject: add: utility functions for table and pager - Add insert_item method to SimpleTable for flexible row insertion - Add show_in_pager function for system pager support --- src/utils/input.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/utils/input.rs') diff --git a/src/utils/input.rs b/src/utils/input.rs index a728c77..219fe1b 100644 --- a/src/utils/input.rs +++ b/src/utils/input.rs @@ -103,3 +103,35 @@ pub async fn input_with_editor( Ok(processed_content) } + +/// Show text using the system pager (less) +/// Opens the system pager (less) with the given text content written to the specified file +/// If less is not found, directly outputs the content to stdout +pub async fn show_in_pager( + content: impl AsRef, + cache_file: impl AsRef, +) -> Result<(), std::io::Error> { + let content_str = content.as_ref(); + let cache_path = cache_file.as_ref(); + + // Write content to cache file + fs::write(cache_path, content_str).await?; + + // Try to use less first + let status = Command::new("less").arg(cache_path).status().await; + + match status { + Ok(status) if status.success() => Ok(()), + _ => { + // If less failed, output directly to stdout + use tokio::io::{self, AsyncWriteExt}; + let mut stdout = io::stdout(); + stdout + .write_all(content_str.as_bytes()) + .await + .expect("Failed to write content"); + stdout.flush().await.expect("Failed to flush stdout"); + Ok(()) + } + } +} -- cgit