From b6a6c88327fbe70ba8aab115cab551a73b7fa3c2 Mon Sep 17 00:00:00 2001 From: wangfeng Date: Mon, 4 May 2026 18:21:15 -0700 Subject: [PATCH] fix(tui): replace hardcoded colors with Color::Reset for terminal compatibility (closes #666) --- config.example.toml | 1 + crates/tui/src/config.rs | 3 +++ crates/tui/src/tui/pager.rs | 2 +- crates/tui/src/tui/widgets/mod.rs | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/config.example.toml b/config.example.toml index 280f0520..c044c2aa 100644 --- a/config.example.toml +++ b/config.example.toml @@ -196,6 +196,7 @@ alternate_screen = "auto" # auto | always | never mouse_capture = true # true copies only transcript user/assistant text; false uses raw terminal selection/copy terminal_probe_timeout_ms = 500 # optional startup terminal-mode timeout (100-5000ms) osc8_links = true # emit OSC 8 escapes around URLs (Cmd+click in iTerm2/Ghostty/Kitty/WezTerm/Terminal.app 13+); set false for terminals that misrender +# use_terminal_colors = false # set true to let your terminal's color scheme take full control # ───────────────────────────────────────────────────────────────────────────────── # Feature Flags diff --git a/crates/tui/src/config.rs b/crates/tui/src/config.rs index a57d27d9..5f4d1d38 100644 --- a/crates/tui/src/config.rs +++ b/crates/tui/src/config.rs @@ -343,6 +343,9 @@ pub struct TuiConfig { /// label and ignore the escape. Defaults to `true`; set `false` for /// terminals that misrender the sequence. pub osc8_links: Option, + /// When true, TUI uses Color::Reset everywhere and defers all color decisions + /// to the terminal emulator. Useful for terminals with custom color schemes. + pub use_terminal_colors: Option, } /// Notification delivery method (mirrors `tui::notifications::Method`). diff --git a/crates/tui/src/tui/pager.rs b/crates/tui/src/tui/pager.rs index 266e0c68..21be0d4e 100644 --- a/crates/tui/src/tui/pager.rs +++ b/crates/tui/src/tui/pager.rs @@ -385,7 +385,7 @@ impl ModalView for PagerView { Color::DarkGray }; let fg = if is_current { - Color::Black + Color::Reset } else { Color::Yellow }; diff --git a/crates/tui/src/tui/widgets/mod.rs b/crates/tui/src/tui/widgets/mod.rs index 35c738c7..1c4d4249 100644 --- a/crates/tui/src/tui/widgets/mod.rs +++ b/crates/tui/src/tui/widgets/mod.rs @@ -1363,7 +1363,7 @@ fn apply_detail_target_highlight( target_cell: usize, line_meta: &[TranscriptLineMeta], ) { - let highlight_bg = Color::Rgb(18, 29, 39); + let highlight_bg = Color::Reset; for (idx, line) in lines.iter_mut().enumerate() { let line_index = top + idx; if let Some(TranscriptLineMeta::CellLine { cell_index, .. }) = line_meta.get(line_index)