From cbf972007a0e175a7c63a5d9fd98ae82a3bab7f9 Mon Sep 17 00:00:00 2001 From: aibrahim-oai Date: Wed, 13 Aug 2025 15:50:50 -0700 Subject: [PATCH] use modifier dim instead of gray and .dim (#2273) gray color doesn't work very well with white terminals. `.dim` doesn't have an effect for some reason. after: image Before image --- codex-rs/tui/src/bottom_pane/chat_composer.rs | 12 ++++---- .../src/bottom_pane/selection_popup_common.rs | 6 ++-- codex-rs/tui/src/history_cell.rs | 26 ++++++++--------- codex-rs/tui/src/shimmer.rs | 14 +++++----- codex-rs/tui/src/status_indicator_widget.rs | 28 +++++++++---------- codex-rs/tui/src/user_approval_widget.rs | 4 +-- 6 files changed, 42 insertions(+), 48 deletions(-) diff --git a/codex-rs/tui/src/bottom_pane/chat_composer.rs b/codex-rs/tui/src/bottom_pane/chat_composer.rs index 78506f57..f93878f4 100644 --- a/codex-rs/tui/src/bottom_pane/chat_composer.rs +++ b/codex-rs/tui/src/bottom_pane/chat_composer.rs @@ -731,15 +731,15 @@ impl WidgetRef for &ChatComposer { .render_ref(bottom_line_rect, buf); } } + let border_style = if self.has_focus { + Style::default().fg(Color::Cyan) + } else { + Style::default().add_modifier(Modifier::DIM) + }; Block::default() - .border_style(Style::default().dim()) .borders(Borders::LEFT) .border_type(BorderType::QuadrantOutside) - .border_style(Style::default().fg(if self.has_focus { - Color::Cyan - } else { - Color::Gray - })) + .border_style(border_style) .render_ref( Rect::new(textarea_rect.x, textarea_rect.y, 1, textarea_rect.height), buf, diff --git a/codex-rs/tui/src/bottom_pane/selection_popup_common.rs b/codex-rs/tui/src/bottom_pane/selection_popup_common.rs index 1a31115d..0a0574c6 100644 --- a/codex-rs/tui/src/bottom_pane/selection_popup_common.rs +++ b/codex-rs/tui/src/bottom_pane/selection_popup_common.rs @@ -93,9 +93,7 @@ pub(crate) fn render_rows( spans.push(Span::raw(" ")); spans.push(Span::styled( desc.clone(), - Style::default() - .fg(Color::DarkGray) - .add_modifier(Modifier::DIM), + Style::default().add_modifier(Modifier::DIM), )); } @@ -118,7 +116,7 @@ pub(crate) fn render_rows( Block::default() .borders(Borders::LEFT) .border_type(BorderType::QuadrantOutside) - .border_style(Style::default().fg(Color::DarkGray)), + .border_style(Style::default().add_modifier(Modifier::DIM)), ) .widths([Constraint::Percentage(100)]); diff --git a/codex-rs/tui/src/history_cell.rs b/codex-rs/tui/src/history_cell.rs index ffbc96c1..0fa400ca 100644 --- a/codex-rs/tui/src/history_cell.rs +++ b/codex-rs/tui/src/history_cell.rs @@ -483,7 +483,7 @@ impl HistoryCell { } else { status_str.red() }, - format!(", duration: {duration}").gray(), + format!(", duration: {duration}").dim(), ]); let mut lines: Vec> = Vec::new(); @@ -526,7 +526,10 @@ impl HistoryCell { format!("link: {uri}") } }; - lines.push(Line::styled(line_text, Style::default().fg(Color::Gray))); + lines.push(Line::styled( + line_text, + Style::default().add_modifier(Modifier::DIM), + )); } } @@ -755,7 +758,7 @@ impl HistoryCell { if empty > 0 { header.push(Span::styled( "░".repeat(empty), - Style::default().fg(Color::Gray), + Style::default().add_modifier(Modifier::DIM), )); } header.push(Span::raw("] ")); @@ -767,15 +770,15 @@ impl HistoryCell { let t = s.trim().to_string(); if t.is_empty() { None } else { Some(t) } }) { - lines.push(Line::from("note".gray().italic())); + lines.push(Line::from("note".dim().italic())); for l in expl.lines() { - lines.push(Line::from(l.to_string()).gray()); + lines.push(Line::from(l.to_string()).dim()); } } // Steps styled as checkbox items if plan.is_empty() { - lines.push(Line::from("(no steps provided)".gray().italic())); + lines.push(Line::from("(no steps provided)".dim().italic())); } else { for (idx, PlanItemArg { step, status }) in plan.into_iter().enumerate() { let (box_span, text_span) = match status { @@ -783,9 +786,7 @@ impl HistoryCell { Span::styled("✔", Style::default().fg(Color::Green)), Span::styled( step, - Style::default() - .fg(Color::Gray) - .add_modifier(Modifier::CROSSED_OUT | Modifier::DIM), + Style::default().add_modifier(Modifier::CROSSED_OUT | Modifier::DIM), ), ), StepStatus::InProgress => ( @@ -799,10 +800,7 @@ impl HistoryCell { ), StepStatus::Pending => ( Span::raw("□"), - Span::styled( - step, - Style::default().fg(Color::Gray).add_modifier(Modifier::DIM), - ), + Span::styled(step, Style::default().add_modifier(Modifier::DIM)), ), }; let prefix = if idx == 0 { @@ -997,7 +995,7 @@ fn format_mcp_invocation<'a>(invocation: McpInvocation) -> Line<'a> { Span::raw("."), Span::styled(invocation.tool.clone(), Style::default().fg(Color::Blue)), Span::raw("("), - Span::styled(args_str, Style::default().fg(Color::Gray)), + Span::styled(args_str, Style::default().add_modifier(Modifier::DIM)), Span::raw(")"), ]; Line::from(invocation_spans) diff --git a/codex-rs/tui/src/shimmer.rs b/codex-rs/tui/src/shimmer.rs index 9d28b732..7e0d9f57 100644 --- a/codex-rs/tui/src/shimmer.rs +++ b/codex-rs/tui/src/shimmer.rs @@ -66,19 +66,19 @@ pub(crate) fn shimmer_spans(text: &str, frame_idx: usize) -> Vec> .fg(Color::Rgb(level, level, level)) .add_modifier(Modifier::BOLD) } else { - Style::default().fg(color_for_level(level)) + color_for_level(level) }; spans.push(Span::styled(ch.to_string(), style)); } spans } -fn color_for_level(level: u8) -> Color { - if level < 128 { - Color::DarkGray - } else if level < 192 { - Color::Gray +fn color_for_level(level: u8) -> Style { + if level < 144 { + Style::default().add_modifier(Modifier::DIM) + } else if level < 208 { + Style::default() } else { - Color::White + Style::default().add_modifier(Modifier::BOLD) } } diff --git a/codex-rs/tui/src/status_indicator_widget.rs b/codex-rs/tui/src/status_indicator_widget.rs index b686f45d..65cba425 100644 --- a/codex-rs/tui/src/status_indicator_widget.rs +++ b/codex-rs/tui/src/status_indicator_widget.rs @@ -205,7 +205,7 @@ impl WidgetRef for StatusIndicatorWidget { .fg(Color::Rgb(level, level, level)) .add_modifier(Modifier::BOLD) } else { - Style::default().fg(color_for_level(level)) + color_for_level(level) }; animated_spans.push(Span::styled(ch.to_string(), style)); @@ -223,7 +223,7 @@ impl WidgetRef for StatusIndicatorWidget { let spinner_ch = spinner_frames[(idx / SPINNER_SLOWDOWN) % spinner_frames.len()]; spans.push(Span::styled( spinner_ch.to_string(), - Style::default().fg(Color::DarkGray), + Style::default().add_modifier(Modifier::DIM), )); spans.push(Span::raw(" ")); @@ -236,27 +236,25 @@ impl WidgetRef for StatusIndicatorWidget { let bracket_prefix = format!("({elapsed}s • "); spans.push(Span::styled( bracket_prefix, - Style::default().fg(Color::Gray).add_modifier(Modifier::DIM), + Style::default().add_modifier(Modifier::DIM), )); spans.push(Span::styled( "Esc", - Style::default() - .fg(Color::Gray) - .add_modifier(Modifier::DIM | Modifier::BOLD), + Style::default().add_modifier(Modifier::DIM | Modifier::BOLD), )); spans.push(Span::styled( " to interrupt)", - Style::default().fg(Color::Gray).add_modifier(Modifier::DIM), + Style::default().add_modifier(Modifier::DIM), )); // Add a space and then the log text (not animated by the gradient) if !status_prefix.is_empty() { spans.push(Span::styled( " ", - Style::default().fg(Color::Gray).add_modifier(Modifier::DIM), + Style::default().add_modifier(Modifier::DIM), )); spans.push(Span::styled( status_prefix, - Style::default().fg(Color::Gray).add_modifier(Modifier::DIM), + Style::default().add_modifier(Modifier::DIM), )); } @@ -281,13 +279,13 @@ impl WidgetRef for StatusIndicatorWidget { } } -fn color_for_level(level: u8) -> Color { - if level < 128 { - Color::DarkGray - } else if level < 192 { - Color::Gray +fn color_for_level(level: u8) -> Style { + if level < 144 { + Style::default().add_modifier(Modifier::DIM) + } else if level < 208 { + Style::default() } else { - Color::White + Style::default().add_modifier(Modifier::BOLD) } } diff --git a/codex-rs/tui/src/user_approval_widget.rs b/codex-rs/tui/src/user_approval_widget.rs index 049497f3..78ece561 100644 --- a/codex-rs/tui/src/user_approval_widget.rs +++ b/codex-rs/tui/src/user_approval_widget.rs @@ -340,7 +340,7 @@ impl WidgetRef for &UserApprovalWidget<'_> { let style = if idx == self.selected_option { Style::new().bg(Color::Cyan).fg(Color::Black) } else { - Style::new().bg(Color::DarkGray) + Style::new().add_modifier(Modifier::DIM) }; opt.label.clone().alignment(Alignment::Center).style(style) }) @@ -372,7 +372,7 @@ impl WidgetRef for &UserApprovalWidget<'_> { } Line::from(self.select_options[self.selected_option].description) - .style(Style::new().italic().fg(Color::DarkGray)) + .style(Style::new().italic().add_modifier(Modifier::DIM)) .render(description_area.inner(Margin::new(1, 0)), buf); Block::bordered()