diff --git a/crates/tui/src/tui/work_surface/model.rs b/crates/tui/src/tui/work_surface/model.rs index a162664bd1..39f223fd31 100644 --- a/crates/tui/src/tui/work_surface/model.rs +++ b/crates/tui/src/tui/work_surface/model.rs @@ -1114,7 +1114,7 @@ fn finished_shell_outcome(locale: Locale, entry: &TaskPanelEntry) -> String { } /// Row ids of the plan-step (to-do) nodes in the cached graph. -fn plan_step_row_ids(app: &App) -> HashSet { +pub(super) fn plan_step_row_ids(app: &App) -> HashSet { app.work_surface .cached_graph .as_ref() diff --git a/crates/tui/src/tui/work_surface/render/mod.rs b/crates/tui/src/tui/work_surface/render/mod.rs index 7f4300c55f..2c300f6ae2 100644 --- a/crates/tui/src/tui/work_surface/render/mod.rs +++ b/crates/tui/src/tui/work_surface/render/mod.rs @@ -30,7 +30,7 @@ use codewhale_palette::{ChromeInk, chrome_style}; use super::model::{ DockTabHitbox, DockTabTarget, RailPanel, WorkHitbox, WorkRow, WorkSurfacePlacement, WorkTone, - visible_rows_for, visible_rows_for_panel, + plan_step_row_ids, visible_rows_for, visible_rows_for_panel, }; mod layout; @@ -121,6 +121,7 @@ pub fn render(frame: &mut Frame, area: Rect, app: &mut App) { HashMap::new() }; let ordinal_width = todo_ordinals.len().max(1).to_string().len(); + let todo_ids = plan_step_row_ids(app); let goal_title = placement.is_strip().then(|| top_goal_title(app)).flatten(); let todo_progress = placement .is_strip() @@ -357,7 +358,13 @@ pub fn render(frame: &mut Frame, area: Rect, app: &mut App) { }; let prefix_width = UnicodeWidthStr::width(prefix.as_str()); let row_width = usize::from(content_area.width); - let label_budget = row_width.saturating_sub(prefix_width).max(1); + let detail_room = if todo_ids.contains(&row.id.0) { + UnicodeWidthStr::width(detail_candidate.as_str()) + .min(row_width.saturating_sub(prefix_width) / 2) + } else { + 0 + }; + let label_budget = row_width.saturating_sub(prefix_width + detail_room).max(1); let label = truncate_line_to_width(&row.label, label_budget); let detail_budget = row_width.saturating_sub(prefix_width + UnicodeWidthStr::width(label.as_str()));