From 4ff9bba7501b9d15b79f78ce6a10b7f7eb706d1a Mon Sep 17 00:00:00 2001 From: Hunter Bown Date: Mon, 1 Jun 2026 14:23:41 -0700 Subject: [PATCH] fix(tui): keep config scope column visible --- crates/tui/src/tui/views/mod.rs | 58 ++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/crates/tui/src/tui/views/mod.rs b/crates/tui/src/tui/views/mod.rs index 3ca08584..616eef6f 100644 --- a/crates/tui/src/tui/views/mod.rs +++ b/crates/tui/src/tui/views/mod.rs @@ -582,6 +582,10 @@ pub struct ConfigView { const CONFIG_MIN_KEY_COLUMN_WIDTH: usize = 19; const CONFIG_VALUE_COLUMN_WIDTH: usize = 44; +const CONFIG_MIN_VALUE_COLUMN_WIDTH: usize = 10; +const CONFIG_SCOPE_COLUMN_WIDTH: usize = 7; +const CONFIG_ROW_PREFIX_WIDTH: usize = 2; +const CONFIG_COLUMN_GAPS_WIDTH: usize = 2; impl ConfigView { pub fn new_for_app(app: &App) -> Self { @@ -911,6 +915,27 @@ impl ConfigView { .max(CONFIG_MIN_KEY_COLUMN_WIDTH) } + fn table_column_widths(&self, content_width: usize) -> (usize, usize, usize) { + let fixed_width = + CONFIG_ROW_PREFIX_WIDTH + CONFIG_COLUMN_GAPS_WIDTH + CONFIG_SCOPE_COLUMN_WIDTH; + let key_value_width = content_width.saturating_sub(fixed_width); + let desired_key_width = self.key_column_width(); + + if key_value_width == 0 { + return (0, 0, CONFIG_SCOPE_COLUMN_WIDTH); + } + + let minimum_key_width = CONFIG_MIN_KEY_COLUMN_WIDTH.min(key_value_width); + let key_width = desired_key_width + .min(key_value_width.saturating_sub(CONFIG_MIN_VALUE_COLUMN_WIDTH)) + .max(minimum_key_width); + let value_width = key_value_width + .saturating_sub(key_width) + .min(CONFIG_VALUE_COLUMN_WIDTH); + + (key_width, value_width, CONFIG_SCOPE_COLUMN_WIDTH) + } + fn selected_row_index(&self) -> Option { let selected = self.selected; self.matching_row_indices() @@ -1439,7 +1464,8 @@ impl ModalView for ConfigView { self.filter.clone() }; - let key_column_width = self.key_column_width(); + let (key_column_width, value_column_width, scope_column_width) = + self.table_column_widths(usize::from(inner.width)); let mut lines: Vec = vec![ Line::from(vec![Span::styled( self.tr(MessageId::ConfigTitle), @@ -1455,15 +1481,22 @@ impl ModalView for ConfigView { ]), Line::from(""), Line::from(format!( - " {: