From 1e1835636f0f43ad4a703b7d5098ccb21e4d3e31 Mon Sep 17 00:00:00 2001
From: Daan Boerlage <d@boerlage.me>
Date: Wed, 22 Jan 2025 04:10:27 +0100
Subject: [PATCH] Make the title headers on the view command always as big as
 the terminal width

---
 crates/jirac/src/cmd/view.rs | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/crates/jirac/src/cmd/view.rs b/crates/jirac/src/cmd/view.rs
index 3b2f1a1..8f81498 100644
--- a/crates/jirac/src/cmd/view.rs
+++ b/crates/jirac/src/cmd/view.rs
@@ -2,20 +2,28 @@ use crate::cli::FormatMode;
 use crate::jira_config::JiraConfig;
 use crate::renderer::{hyperlink, render_doc};
 use crossterm::style::{Color, Stylize};
+use crossterm::terminal;
 use libjirac::client::commands::IssueGetCommand;
 use libjirac::client::JiraClient;
 use libjirac::entities::issue::{Description, JiraIssue};
 use std::io::Write;
 
+fn print_header(title: &str, columns: usize) {
+    let padding = columns - (title.len() + 4);
+    println!("\n== {} {:=<width$}", title, "", width = padding);
+}
+
 fn pretty_print(config: &JiraConfig, issue: &JiraIssue) -> Result<(), Box<dyn std::error::Error>> {
-    println!("\n== Title {:=<71}", "");
+    let (columns, _) = terminal::size()?;
+
+    print_header("Title", columns.into());
     println!(
         "{}: {}",
         issue.key.clone().green(),
         issue.fields.summary.clone().bold().green()
     );
 
-    println!("\n== Details {:=<69}", "");
+    print_header("Details", columns.into());
     let mut tw = tabwriter::TabWriter::new(vec![]);
     writeln!(tw, "{}:\t{}", "Priority".blue(), issue.fields.priority.name)?;
     writeln!(tw, "{}:\t{}", "Status".blue(), issue.fields.status.name)?;
@@ -63,7 +71,7 @@ fn pretty_print(config: &JiraConfig, issue: &JiraIssue) -> Result<(), Box<dyn st
 
     let written = String::from_utf8(tw.into_inner().unwrap()).unwrap();
     print!("{}", written);
-    println!("\n== Description {:=<65}", "");
+    print_header("Description", columns.into());
     match issue.fields.description.clone() {
         Some(x) => match x {
             Description::Doc(doc) => render_doc(doc)?,
@@ -71,7 +79,7 @@ fn pretty_print(config: &JiraConfig, issue: &JiraIssue) -> Result<(), Box<dyn st
         None => println!("(Issue does not have a description)"),
     }
 
-    println!("\n== Comments {:=<68}", "");
+    print_header("Comments", columns.into());
     for comment in issue.fields.comment.clone().unwrap_or_default().comments {
         println!(
             "{} at {}",
@@ -80,7 +88,8 @@ fn pretty_print(config: &JiraConfig, issue: &JiraIssue) -> Result<(), Box<dyn st
         );
         render_doc(comment.body)?;
     }
-    println!("\n== Actions {:=<69}", "");
+
+    print_header("Actions", columns.into());
     println!(
         "{}",
         hyperlink(