From 1d798a80b4f957a454060d9533c94afbf33e0d9e Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Fri, 18 Nov 2022 10:56:32 +0100 Subject: [PATCH] Fix issues with incorrect terminal width For some reason, the terminal width isn't always valid, and then ends up returning `80`. Signed-off-by: Alexis Sellier --- radicle-cli/src/terminal/io.rs | 7 ++++--- radicle-cli/src/terminal/table.rs | 9 ++++++++- radicle-cli/src/terminal/textbox.rs | 6 ++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/radicle-cli/src/terminal/io.rs b/radicle-cli/src/terminal/io.rs index ca566c7d..aea6269f 100644 --- a/radicle-cli/src/terminal/io.rs +++ b/radicle-cli/src/terminal/io.rs @@ -56,9 +56,10 @@ pub fn tip_args(args: fmt::Arguments) { ); } -pub fn width() -> usize { - let (_, rows) = console::Term::stdout().size(); - rows as usize +pub fn width() -> Option { + console::Term::stdout() + .size_checked() + .map(|(_, cols)| cols as usize) } pub fn headline(headline: &str) { diff --git a/radicle-cli/src/terminal/table.rs b/radicle-cli/src/terminal/table.rs index eabff7c0..91ffacf4 100644 --- a/radicle-cli/src/terminal/table.rs +++ b/radicle-cli/src/terminal/table.rs @@ -57,7 +57,14 @@ impl Table { .ok(); } } - println!("{}", console::truncate_str(&output, width - 1, "…")); + println!( + "{}", + if let Some(width) = width { + console::truncate_str(&output, width - 1, "…") + } else { + output.into() + } + ); } } diff --git a/radicle-cli/src/terminal/textbox.rs b/radicle-cli/src/terminal/textbox.rs index 0d947265..002ecf33 100644 --- a/radicle-cli/src/terminal/textbox.rs +++ b/radicle-cli/src/terminal/textbox.rs @@ -39,8 +39,10 @@ impl fmt::Display for TextBox { .max() .unwrap_or(0) + 2; - if term::width() < width + 2 { - width = term::width() - 2 + if let Some(max) = term::width() { + if max < width + 2 { + width = max - 2 + } } let (connector, header_width) = if !self.first {