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_yaml;
use std::env;
use std::io::{stdout, IsTerminal};
use termsize;
#[derive(Serialize, Deserialize)]
struct ListItem {
@@ -61,13 +63,26 @@ pub fn mode_list(
}
// Get terminal width once, default to 80 if not available
let columns_env = env::var("COLUMNS").ok();
debug!("COLUMNS environment variable: {:?}", columns_env);
let term_width = columns_env
.as_ref()
.and_then(|w| w.parse::<usize>().ok())
.unwrap_or(80);
let term_width = if let Ok(columns_env) = env::var("COLUMNS") {
debug!("COLUMNS environment variable: {:?}", columns_env);
columns_env.parse::<usize>().unwrap_or(80)
} else if stdout().is_terminal() {
// Try to get terminal size using termsize
match termsize::get() {
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);