feat: add terminal width detection using termsize

Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-08-25 22:22:00 -03:00
parent 689f377865
commit 9e133d9527

View File

@@ -11,6 +11,8 @@ use serde::{Deserialize, Serialize};
use serde_json; use serde_json;
use serde_yaml; use serde_yaml;
use std::env; use std::env;
use std::io::{stdout, IsTerminal};
use termsize;
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
struct ListItem { struct ListItem {
@@ -61,13 +63,26 @@ pub fn mode_list(
} }
// Get terminal width once, default to 80 if not available // Get terminal width once, default to 80 if not available
let columns_env = env::var("COLUMNS").ok(); let term_width = if let Ok(columns_env) = env::var("COLUMNS") {
debug!("COLUMNS environment variable: {:?}", columns_env); debug!("COLUMNS environment variable: {:?}", columns_env);
columns_env.parse::<usize>().unwrap_or(80)
let term_width = columns_env } else if stdout().is_terminal() {
.as_ref() // Try to get terminal size using termsize
.and_then(|w| w.parse::<usize>().ok()) match termsize::get() {
.unwrap_or(80); Some(size) => {
let width = size.cols as usize;
debug!("Terminal size detected: {} columns", width);
width
}
None => {
debug!("Failed to get terminal size, defaulting to 80");
80
}
}
} else {
debug!("Not a terminal, defaulting to 80");
80
};
debug!("Terminal width: {}", term_width); debug!("Terminal width: {}", term_width);