Skip to content

Commit d127a1c

Browse files
committed
feat: 0-255 color support in custom themes
1 parent c9cca48 commit d127a1c

File tree

2 files changed

+75
-2
lines changed

2 files changed

+75
-2
lines changed

internal/tui/theme/manager.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,54 @@ func LoadCustomTheme(customTheme map[string]any) (Theme, error) {
202202
theme.DiffAddedLineNumberBgColor = adaptiveColor
203203
case "diffremovedlinenumberbg":
204204
theme.DiffRemovedLineNumberBgColor = adaptiveColor
205+
case "syntaxcomment":
206+
theme.SyntaxCommentColor = adaptiveColor
207+
case "syntaxkeyword":
208+
theme.SyntaxKeywordColor = adaptiveColor
209+
case "syntaxfunction":
210+
theme.SyntaxFunctionColor = adaptiveColor
211+
case "syntaxvariable":
212+
theme.SyntaxVariableColor = adaptiveColor
213+
case "syntaxstring":
214+
theme.SyntaxStringColor = adaptiveColor
215+
case "syntaxnumber":
216+
theme.SyntaxNumberColor = adaptiveColor
217+
case "syntaxtype":
218+
theme.SyntaxTypeColor = adaptiveColor
219+
case "syntaxoperator":
220+
theme.SyntaxOperatorColor = adaptiveColor
221+
case "syntaxpunctuation":
222+
theme.SyntaxPunctuationColor = adaptiveColor
223+
case "markdowntext":
224+
theme.MarkdownTextColor = adaptiveColor
225+
case "markdownheading":
226+
theme.MarkdownHeadingColor = adaptiveColor
227+
case "markdownlink":
228+
theme.MarkdownLinkColor = adaptiveColor
229+
case "markdownlinktext":
230+
theme.MarkdownLinkTextColor = adaptiveColor
231+
case "markdowncode":
232+
theme.MarkdownCodeColor = adaptiveColor
233+
case "markdownblockquote":
234+
theme.MarkdownBlockQuoteColor = adaptiveColor
235+
case "markdownemph":
236+
theme.MarkdownEmphColor = adaptiveColor
237+
case "markdownstrong":
238+
theme.MarkdownStrongColor = adaptiveColor
239+
case "markdownhorizontalrule":
240+
theme.MarkdownHorizontalRuleColor = adaptiveColor
241+
case "markdownlistitem":
242+
theme.MarkdownListItemColor = adaptiveColor
243+
case "markdownlistitemenum":
244+
theme.MarkdownListEnumerationColor = adaptiveColor
245+
case "markdownimage":
246+
theme.MarkdownImageColor = adaptiveColor
247+
case "markdownimagetext":
248+
theme.MarkdownImageTextColor = adaptiveColor
249+
case "markdowncodeblock":
250+
theme.MarkdownCodeBlockColor = adaptiveColor
251+
case "markdownlistenumeration":
252+
theme.MarkdownListEnumerationColor = adaptiveColor
205253
default:
206254
slog.Warn("Unknown color key in custom theme", "key", key)
207255
}

internal/tui/theme/theme.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,19 @@ func ParseAdaptiveColor(value any) (lipgloss.AdaptiveColor, error) {
235235
}, nil
236236
}
237237

238-
// Case 2: Map with dark and light keys
238+
// Case 2: Int value between 0 and 255
239+
if numericVal, ok := value.(float64); ok {
240+
intVal := int(numericVal)
241+
if intVal < 0 || intVal > 255 {
242+
return lipgloss.AdaptiveColor{}, fmt.Errorf("invalid int color value (must be between 0 and 255): %d", intVal)
243+
}
244+
return lipgloss.AdaptiveColor{
245+
Dark: fmt.Sprintf("%d", intVal),
246+
Light: fmt.Sprintf("%d", intVal),
247+
}, nil
248+
}
249+
250+
// Case 3: Map with dark and light keys
239251
if colorMap, ok := value.(map[string]any); ok {
240252
darkVal, darkOk := colorMap["dark"]
241253
lightVal, lightOk := colorMap["light"]
@@ -248,7 +260,20 @@ func ParseAdaptiveColor(value any) (lipgloss.AdaptiveColor, error) {
248260
lightHex, lightIsString := lightVal.(string)
249261

250262
if !darkIsString || !lightIsString {
251-
return lipgloss.AdaptiveColor{}, fmt.Errorf("color values must be strings")
263+
darkVal, darkIsNumber := darkVal.(float64)
264+
lightVal, lightIsNumber := lightVal.(float64)
265+
266+
if !darkIsNumber || !lightIsNumber {
267+
return lipgloss.AdaptiveColor{}, fmt.Errorf("color map values must be strings or ints")
268+
}
269+
270+
darkInt := int(darkVal)
271+
lightInt := int(lightVal)
272+
273+
return lipgloss.AdaptiveColor{
274+
Dark: fmt.Sprintf("%d", darkInt),
275+
Light: fmt.Sprintf("%d", lightInt),
276+
}, nil
252277
}
253278

254279
if !hexColorRegex.MatchString(darkHex) || !hexColorRegex.MatchString(lightHex) {

0 commit comments

Comments
 (0)