From db808bb794714fa066e8f4cd3b69ec74391234c8 Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Sat, 16 Aug 2025 13:43:55 -0300 Subject: [PATCH] fix: add align field to ColumnConfig and fix cell creation functions Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) --- src/config.rs | 10 ++-- src/modes/list.rs | 142 ++++++++++++++++++++++++++++------------------ 2 files changed, 91 insertions(+), 61 deletions(-) diff --git a/src/config.rs b/src/config.rs index 0d3677d..ac88990 100644 --- a/src/config.rs +++ b/src/config.rs @@ -197,11 +197,11 @@ impl Settings { if settings.list_format.is_empty() { debug!("CONFIG: Setting default list_format"); settings.list_format = vec![ - ColumnConfig { name: "id".to_string(), label: "id".to_string() }, - ColumnConfig { name: "time".to_string(), label: "time".to_string() }, - ColumnConfig { name: "size".to_string(), label: "size".to_string() }, - ColumnConfig { name: "tags".to_string(), label: "tags".to_string() }, - ColumnConfig { name: "meta:hostname".to_string(), label: "hostname".to_string() }, + ColumnConfig { name: "id".to_string(), label: "id".to_string(), align: ColumnAlignment::Left }, + ColumnConfig { name: "time".to_string(), label: "time".to_string(), align: ColumnAlignment::Left }, + ColumnConfig { name: "size".to_string(), label: "size".to_string(), align: ColumnAlignment::Left }, + ColumnConfig { name: "tags".to_string(), label: "tags".to_string(), align: ColumnAlignment::Left }, + ColumnConfig { name: "meta:hostname".to_string(), label: "hostname".to_string(), align: ColumnAlignment::Left }, ]; } diff --git a/src/modes/list.rs b/src/modes/list.rs index 59be6b0..11b1881 100644 --- a/src/modes/list.rs +++ b/src/modes/list.rs @@ -120,91 +120,121 @@ pub fn mode_list( let cell = match column_type { ColumnType::Id => { - let cell = Cell::new(&string_column(item.id.unwrap_or(0).to_string(), column_width)); match column.align { - crate::config::ColumnAlignment::Right => cell.align(Alignment::RIGHT), - crate::config::ColumnAlignment::Left => cell.align(Alignment::LEFT), + crate::config::ColumnAlignment::Right => Cell::new(&string_column(item.id.unwrap_or(0).to_string(), column_width)).align(Alignment::RIGHT), + crate::config::ColumnAlignment::Left => Cell::new(&string_column(item.id.unwrap_or(0).to_string(), column_width)).align(Alignment::LEFT), } }, ColumnType::Time => { - let cell = Cell::new(&string_column( - item.ts - .with_timezone(&chrono::Local) - .format("%F %T") - .to_string(), - column_width, - )); match column.align { - crate::config::ColumnAlignment::Right => cell.align(Alignment::RIGHT), - crate::config::ColumnAlignment::Left => cell.align(Alignment::LEFT), + crate::config::ColumnAlignment::Right => Cell::new(&string_column( + item.ts + .with_timezone(&chrono::Local) + .format("%F %T") + .to_string(), + column_width, + )).align(Alignment::RIGHT), + crate::config::ColumnAlignment::Left => Cell::new(&string_column( + item.ts + .with_timezone(&chrono::Local) + .format("%F %T") + .to_string(), + column_width, + )).align(Alignment::LEFT), } }, ColumnType::Size => { - let cell = match item.size { - Some(size) => Cell::new(&size_column(size as u64, settings.human_readable, column_width)), - None => match item_path.metadata() { - Ok(_) => Cell::new("Unknown") - .with_style(Attr::ForegroundColor(color::YELLOW)) - .with_style(Attr::Bold), - Err(_) => Cell::new("Missing") - .with_style(Attr::ForegroundColor(color::RED)) - .with_style(Attr::Bold), - }, - }; match column.align { - crate::config::ColumnAlignment::Right => cell.align(Alignment::RIGHT), - crate::config::ColumnAlignment::Left => cell.align(Alignment::LEFT), + crate::config::ColumnAlignment::Right => match item.size { + Some(size) => Cell::new(&size_column(size as u64, settings.human_readable, column_width)).align(Alignment::RIGHT), + None => match item_path.metadata() { + Ok(_) => Cell::new("Unknown") + .with_style(Attr::ForegroundColor(color::YELLOW)) + .with_style(Attr::Bold) + .align(Alignment::RIGHT), + Err(_) => Cell::new("Missing") + .with_style(Attr::ForegroundColor(color::RED)) + .with_style(Attr::Bold) + .align(Alignment::RIGHT), + }, + }, + crate::config::ColumnAlignment::Left => match item.size { + Some(size) => Cell::new(&size_column(size as u64, settings.human_readable, column_width)).align(Alignment::LEFT), + None => match item_path.metadata() { + Ok(_) => Cell::new("Unknown") + .with_style(Attr::ForegroundColor(color::YELLOW)) + .with_style(Attr::Bold) + .align(Alignment::LEFT), + Err(_) => Cell::new("Missing") + .with_style(Attr::ForegroundColor(color::RED)) + .with_style(Attr::Bold) + .align(Alignment::LEFT), + }, + }, } }, ColumnType::Compression => { - let cell = Cell::new(&string_column(item.compression.to_string(), column_width)); match column.align { - crate::config::ColumnAlignment::Right => cell.align(Alignment::RIGHT), - crate::config::ColumnAlignment::Left => cell.align(Alignment::LEFT), + crate::config::ColumnAlignment::Right => Cell::new(&string_column(item.compression.to_string(), column_width)).align(Alignment::RIGHT), + crate::config::ColumnAlignment::Left => Cell::new(&string_column(item.compression.to_string(), column_width)).align(Alignment::LEFT), } }, ColumnType::FileSize => { - let cell = match item_path.metadata() { - Ok(metadata) => Cell::new(&size_column(metadata.len(), settings.human_readable, column_width)), - Err(_) => Cell::new("Missing") - .with_style(Attr::ForegroundColor(color::RED)) - .with_style(Attr::Bold), - }; match column.align { - crate::config::ColumnAlignment::Right => cell.align(Alignment::RIGHT), - crate::config::ColumnAlignment::Left => cell.align(Alignment::LEFT), + crate::config::ColumnAlignment::Right => match item_path.metadata() { + Ok(metadata) => Cell::new(&size_column(metadata.len(), settings.human_readable, column_width)).align(Alignment::RIGHT), + Err(_) => Cell::new("Missing") + .with_style(Attr::ForegroundColor(color::RED)) + .with_style(Attr::Bold) + .align(Alignment::RIGHT), + }, + crate::config::ColumnAlignment::Left => match item_path.metadata() { + Ok(metadata) => Cell::new(&size_column(metadata.len(), settings.human_readable, column_width)).align(Alignment::LEFT), + Err(_) => Cell::new("Missing") + .with_style(Attr::ForegroundColor(color::RED)) + .with_style(Attr::Bold) + .align(Alignment::LEFT), + }, } }, ColumnType::FilePath => { - let cell = Cell::new(&string_column( - item_path.clone().into_os_string().into_string().unwrap(), - column_width, - )); match column.align { - crate::config::ColumnAlignment::Right => cell.align(Alignment::RIGHT), - crate::config::ColumnAlignment::Left => cell.align(Alignment::LEFT), + crate::config::ColumnAlignment::Right => Cell::new(&string_column( + item_path.clone().into_os_string().into_string().unwrap(), + column_width, + )).align(Alignment::RIGHT), + crate::config::ColumnAlignment::Left => Cell::new(&string_column( + item_path.clone().into_os_string().into_string().unwrap(), + column_width, + )).align(Alignment::LEFT), } }, ColumnType::Tags => { - let cell = Cell::new(&string_column(tags.join(" "), column_width)); match column.align { - crate::config::ColumnAlignment::Right => cell.align(Alignment::RIGHT), - crate::config::ColumnAlignment::Left => cell.align(Alignment::LEFT), + crate::config::ColumnAlignment::Right => Cell::new(&string_column(tags.join(" "), column_width)).align(Alignment::RIGHT), + crate::config::ColumnAlignment::Left => Cell::new(&string_column(tags.join(" "), column_width)).align(Alignment::LEFT), } }, ColumnType::Meta => { - let cell = match meta_name { - Some(meta_name) => match meta.get(meta_name) { - Some(meta_value) => { - Cell::new(&string_column(meta_value.to_string(), column_width)) - } - None => Cell::new(""), - }, - None => Cell::new(""), - }; match column.align { - crate::config::ColumnAlignment::Right => cell.align(Alignment::RIGHT), - crate::config::ColumnAlignment::Left => cell.align(Alignment::LEFT), + crate::config::ColumnAlignment::Right => match meta_name { + Some(meta_name) => match meta.get(meta_name) { + Some(meta_value) => { + Cell::new(&string_column(meta_value.to_string(), column_width)).align(Alignment::RIGHT) + } + None => Cell::new("").align(Alignment::RIGHT), + }, + None => Cell::new("").align(Alignment::RIGHT), + }, + crate::config::ColumnAlignment::Left => match meta_name { + Some(meta_name) => match meta.get(meta_name) { + Some(meta_value) => { + Cell::new(&string_column(meta_value.to_string(), column_width)).align(Alignment::LEFT) + } + None => Cell::new("").align(Alignment::LEFT), + }, + None => Cell::new("").align(Alignment::LEFT), + }, } }, };