This repository has been archived on 2026-10-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
submarine/internal/tui/theme/theme.go
T
simonfrankenandClaude Opus 5.5 2b6b781826 Add switch branch (b): stage the tip and restore to it
b opens a centered popup with a search line and the local and remote
branches of the selection. Enter stages the branch tip as the pin of a
submodule, restores it (and everything below) to it, and puts HEAD on the
branch; a remote branch gets a local tracking branch unless one exists
elsewhere. Works on the superproject too. Losses are asked like restore.
The backdrop behind the popup is dimmed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:18:49 +02:00

71 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package theme holds the colors, glyphs and shared styles for the TUI.
package theme
import (
"os"
"github.com/charmbracelet/lipgloss"
)
// Theme uses the 16 ANSI colors for everything that carries meaning, so
// the TUI follows the user's terminal color scheme. Only background shades
// and the dimmed backdrop, which have no ANSI equivalent, use adaptive
// 256-color values.
type Theme struct {
Primary lipgloss.TerminalColor // accent: branch names, commit hashes
Info lipgloss.TerminalColor
Added lipgloss.TerminalColor // added lines and files
Warn lipgloss.TerminalColor
Danger lipgloss.TerminalColor
Muted lipgloss.TerminalColor
Text lipgloss.TerminalColor
Border lipgloss.TerminalColor // pane separators, help separators
Bar lipgloss.TerminalColor // background of the header bar
Selected lipgloss.TerminalColor // background of the selected row
Backdrop lipgloss.TerminalColor // the screen behind a popup, dimmed
Glyphs Glyphs
}
func Default() Theme {
g := Unicode()
if os.Getenv("SUBMARINE_ASCII") != "" {
g = ASCII()
}
return Theme{
Primary: lipgloss.Color("6"), // cyan
Info: lipgloss.Color("4"), // blue
Added: lipgloss.Color("2"), // green
Warn: lipgloss.Color("3"), // yellow
Danger: lipgloss.Color("1"), // red
Muted: lipgloss.Color("8"), // bright black / grey
Text: lipgloss.NoColor{}, // terminal default foreground
Border: lipgloss.Color("8"),
Bar: lipgloss.AdaptiveColor{Light: "254", Dark: "235"},
Selected: lipgloss.AdaptiveColor{Light: "253", Dark: "237"},
Backdrop: lipgloss.AdaptiveColor{Light: "252", Dark: "238"},
Glyphs: g,
}
}
// Fg returns a style with the given foreground color.
func Fg(c lipgloss.TerminalColor) lipgloss.Style {
return lipgloss.NewStyle().Foreground(c)
}
// Glyphs are the few symbols used next to the state words.
type Glyphs struct {
Staged, Ahead, Behind, Collapsed, Expanded, Problems, Minus, From, Rule string
}
func Unicode() Glyphs {
return Glyphs{
Staged: "●", Ahead: "↑", Behind: "↓", Collapsed: "▸", Expanded: "▾", Problems: "·", Minus: "−", From: "←", Rule: "─",
}
}
func ASCII() Glyphs {
return Glyphs{
Staged: "*", Ahead: "^", Behind: "v", Collapsed: ">", Expanded: "v", Problems: ".", Minus: "-", From: "<-", Rule: "-",
}
}