Skip to content

Commit bbc1f42

Browse files
committed
fix(term): fall back to hardcoded diff colors for themes without diff scopes
theme.get() returns Style::default() when a scope is absent, which has no fg and no bg. fg_to_bg then returns Style::default() unchanged, and renderer.set_style with an all-None style is a no-op on cell backgrounds. Switch to theme.try_get() so themes that define no diff scopes at all receive hardcoded fallback colors instead of invisible highlights.
1 parent 707b1ff commit bbc1f42

1 file changed

Lines changed: 20 additions & 4 deletions

File tree

helix-term/src/ui/editor.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,9 @@ impl EditorView {
123123
if let Some((side, ref hunks, _, _)) = diff_view_info {
124124
let hunks = Arc::clone(hunks);
125125

126-
// Use diff theme fg as bg (most themes only set fg for diff.plus/delta/minus).
126+
// Use diff theme bg as line background; fall back to fg if no bg is set
127+
// (many themes only define fg on diff scopes). If neither is set,
128+
// Style::default() is returned, which is a no-op on cell backgrounds.
127129
let fg_to_bg = |style: Style| -> Style {
128130
if let Some(bg) = style.bg {
129131
Style::default().bg(bg)
@@ -133,9 +135,23 @@ impl EditorView {
133135
style
134136
}
135137
};
136-
let style_deleted = fg_to_bg(theme.get("diff.minus"));
137-
let style_added = fg_to_bg(theme.get("diff.plus"));
138-
let style_modified = fg_to_bg(theme.get("diff.delta"));
138+
// Fall back to the default theme's diff colors when the active theme
139+
// does not define these scopes at all.
140+
let style_deleted = fg_to_bg(
141+
theme
142+
.try_get("diff.minus")
143+
.unwrap_or_else(|| Style::default().fg(Color::Rgb(242, 44, 134))),
144+
);
145+
let style_added = fg_to_bg(
146+
theme
147+
.try_get("diff.plus")
148+
.unwrap_or_else(|| Style::default().fg(Color::Rgb(53, 191, 134))),
149+
);
150+
let style_modified = fg_to_bg(
151+
theme
152+
.try_get("diff.delta")
153+
.unwrap_or_else(|| Style::default().fg(Color::Rgb(111, 68, 240))),
154+
);
139155

140156
let mut cursor: usize = 0;
141157
let line_decoration = move |renderer: &mut TextRenderer, pos: LinePos| {

0 commit comments

Comments
 (0)