From fba040c668d775d7a79a413541312d22864b0a69 Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Fri, 21 Aug 2026 10:48:34 -0600 Subject: [PATCH] fix: render .list macros as a comfy-table instead of fixed-width columns Hand-rolled {:<24} padding broke alignment as soon as a macro name exceeded the column width. Reuse the comfy-table UTF8_FULL preset with dynamic content arrangement, matching the markdown renderer's tables. --- src/config/request_context.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/config/request_context.rs b/src/config/request_context.rs index be8daf2..7f19ad1 100644 --- a/src/config/request_context.rs +++ b/src/config/request_context.rs @@ -33,6 +33,7 @@ use crate::utils::{ AbortSignal, abortable_run_with_spinner, edit_file, fuzzy_filter, get_env_name, list_file_names, now, render_prompt, temp_file, }; +use comfy_table::{ContentArrangement, Table, presets::UTF8_FULL}; use super::instructions; use super::memory::{ @@ -2592,12 +2593,10 @@ impl RequestContext { return Ok(()); } - println!("Macros:"); - let header = format!( - " {:<24} {:<10} {:<9} {:<40} {}", - "name", "source", "isolated", "state", "description" - ); - println!("{header}"); + let mut table = Table::new(); + table.load_preset(UTF8_FULL); + table.set_content_arrangement(ContentArrangement::Dynamic); + table.set_header(vec!["name", "source", "isolated", "state", "description"]); for row in &policy.macros { let source = macro_source_display(row.source); @@ -2608,13 +2607,17 @@ impl RequestContext { }; let state = macro_state_display(row, |level| self.macro_lock_owner(level)); let description = row.description.as_deref().unwrap_or_default(); - let line = format!( - " {:<24} {:<10} {:<9} {:<40} {}", - row.name, source, isolated, state, description - ); - println!("{}", line.trim_end()); + table.add_row(vec![ + row.name.as_str(), + &source, + isolated, + &state, + description, + ]); } + println!("Macros:"); + println!("{table}"); Ok(()) } "agents" => {