From eb80614a7c6a83abb7f03e5cb45f98d0b75ff343 Mon Sep 17 00:00:00 2001 From: Ed Bayes Date: Thu, 7 Aug 2025 00:46:45 -0700 Subject: [PATCH] Tint chat composer background (#1921) ## Summary - give the chat composer a subtle custom background and apply it across the full area drawn composer-bg - update turn interrupted to be more human readable CleanShot 2025-08-06 at 22 44 47@2x ## Testing - `cargo test --all-features` *(fails: `let` expressions in `core/src/client.rs` require newer rustc)* - `just fix` *(fails: `let` expressions in `core/src/client.rs` require newer rustc)* ------ https://chatgpt.com/codex/tasks/task_i_68941f32c1008322bbcc39ee1d29a526 --- codex-rs/core/src/codex.rs | 2 +- codex-rs/tui/src/bottom_pane/chat_composer.rs | 6 ++++++ codex-rs/tui/src/history_cell.rs | 6 ++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index 4a4faa84..eb1bc4f9 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -688,7 +688,7 @@ impl AgentTask { let event = Event { id: self.sub_id, msg: EventMsg::Error(ErrorEvent { - message: "Turn interrupted".to_string(), + message: " Turn interrupted".to_string(), }), }; let tx_event = self.sess.tx_event.clone(); diff --git a/codex-rs/tui/src/bottom_pane/chat_composer.rs b/codex-rs/tui/src/bottom_pane/chat_composer.rs index ea3a4edd..e53fe036 100644 --- a/codex-rs/tui/src/bottom_pane/chat_composer.rs +++ b/codex-rs/tui/src/bottom_pane/chat_composer.rs @@ -35,6 +35,8 @@ const BASE_PLACEHOLDER_TEXT: &str = "..."; /// If the pasted content exceeds this number of characters, replace it with a /// placeholder in the UI. const LARGE_PASTE_CHAR_THRESHOLD: usize = 1000; +/// Background color used for the chat composer area. +const COMPOSER_BG_COLOR: Color = Color::Black; /// Result returned when the user interacts with the text area. pub enum InputResult { @@ -735,6 +737,10 @@ impl WidgetRef for &ChatComposer { let mut textarea_rect = textarea_rect; textarea_rect.width = textarea_rect.width.saturating_sub(1); textarea_rect.x += 1; + + // Fill only the textarea content region with a subtle background so it + // doesn't affect the hint line or popups and remains behind the text. + buf.set_style(textarea_rect, Style::default().bg(COMPOSER_BG_COLOR)); let mut state = self.textarea_state.borrow_mut(); StatefulWidgetRef::render_ref(&(&self.textarea), textarea_rect, buf, &mut state); if self.textarea.text().is_empty() { diff --git a/codex-rs/tui/src/history_cell.rs b/codex-rs/tui/src/history_cell.rs index be96a9e9..8df5340f 100644 --- a/codex-rs/tui/src/history_cell.rs +++ b/codex-rs/tui/src/history_cell.rs @@ -504,10 +504,8 @@ impl HistoryCell { } pub(crate) fn new_error_event(message: String) -> Self { - let lines: Vec> = vec![ - vec!["ERROR: ".red().bold(), message.into()].into(), - "".into(), - ]; + let lines: Vec> = + vec![vec!["🖐 ".red().bold(), message.into()].into(), "".into()]; HistoryCell::ErrorEvent { view: TextBlock::new(lines), }