From 9d812580557cdc343378816cd65678b8aa75d944 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Thu, 12 Mar 2026 15:54:59 +0800 Subject: Add lang field to command context and reorganize utils modules --- utils/src/display/pager.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 utils/src/display/pager.rs (limited to 'utils/src/display/pager.rs') diff --git a/utils/src/display/pager.rs b/utils/src/display/pager.rs new file mode 100644 index 0000000..79c2ccb --- /dev/null +++ b/utils/src/display/pager.rs @@ -0,0 +1,37 @@ +use crate::env::pager::get_default_pager; +use tokio::{fs, process::Command}; + +/// 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 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?; + + // Get the default pager + let pager_cmd = get_default_pager().await; + + // Try to use the pager + let status = Command::new(&pager_cmd).arg(cache_path).status().await; + + match status { + Ok(status) if status.success() => Ok(()), + _ => { + // If pager 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