summaryrefslogtreecommitdiffstats
path: root/src/options.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/options.go')
-rw-r--r--src/options.go104
1 files changed, 71 insertions, 33 deletions
diff --git a/src/options.go b/src/options.go
index ea6e420e..ce000a03 100644
--- a/src/options.go
+++ b/src/options.go
@@ -590,11 +590,8 @@ func parseTiebreak(str string) []criterion {
}
func dupeTheme(theme *tui.ColorTheme) *tui.ColorTheme {
- if theme != nil {
- dupe := *theme
- return &dupe
- }
- return nil
+ dupe := *theme
+ return &dupe
}
func parseTheme(defaultTheme *tui.ColorTheme, str string) *tui.ColorTheme {
@@ -619,54 +616,76 @@ func parseTheme(defaultTheme *tui.ColorTheme, str string) *tui.ColorTheme {
continue
}
- pair := strings.Split(str, ":")
- if len(pair) != 2 {
+ components := strings.Split(str, ":")
+ if len(components) < 2 {
fail()
}
- var ansi tui.Color
- if rrggbb.MatchString(pair[1]) {
- ansi = tui.HexToColor(pair[1])
- } else {
- ansi32, err := strconv.Atoi(pair[1])
- if err != nil || ansi32 < -1 || ansi32 > 255 {
- fail()
+ cattr := tui.NewColorAttr()
+ for _, component := range components[1:] {
+ switch component {
+ case "regular":
+ cattr.Attr = tui.AttrRegular
+ case "bold", "strong":
+ cattr.Attr |= tui.Bold
+ case "dim":
+ cattr.Attr |= tui.Dim
+ case "italic":
+ cattr.Attr |= tui.Italic
+ case "underline":
+ cattr.Attr |= tui.Underline
+ case "blink":
+ cattr.Attr |= tui.Blink
+ case "reverse":
+ cattr.Attr |= tui.Reverse
+ case "":
+ default:
+ if rrggbb.MatchString(component) {
+ cattr.Color = tui.HexToColor(component)
+ } else {
+ ansi32, err := strconv.Atoi(component)
+ if err != nil || ansi32 < -1 || ansi32 > 255 {
+ fail()
+ }
+ cattr.Color = tui.Color(ansi32)
+ }
}
- ansi = tui.Color(ansi32)
}
- switch pair[0] {
+ switch components[0] {
+ case "input":
+ theme.Input = cattr
case "fg":
- theme.Fg = ansi
+ theme.Fg = cattr
case "bg":
- theme.Bg = ansi
+ theme.Bg = cattr
case "preview-fg":
- theme.PreviewFg = ansi
+ theme.PreviewFg = cattr
case "preview-bg":
- theme.PreviewBg = ansi
+ theme.PreviewBg = cattr
case "fg+":
- theme.Current = ansi
+ theme.Current = cattr
case "bg+":
- theme.DarkBg = ansi
+ theme.DarkBg = cattr
case "gutter":
- theme.Gutter = ansi
+ theme.Gutter = cattr
case "hl":
- theme.Match = ansi
+ theme.Match = cattr
case "hl+":
- theme.CurrentMatch = ansi
+ theme.CurrentMatch = cattr
case "border":
- theme.Border = ansi
+ theme.Border = cattr
case "prompt":
- theme.Prompt = ansi
+ theme.Prompt = cattr
case "spinner":
- theme.Spinner = ansi
+ theme.Spinner = cattr
case "info":
- theme.Info = ansi
+ theme.Info = cattr
case "pointer":
- theme.Cursor = ansi
+ theme.Cursor = cattr
case "marker":
- theme.Selected = ansi
+ theme.Selected = cattr
case "header":
- theme.Header = ansi
+ theme.Header = cattr
default:
fail()
}
@@ -1180,7 +1199,7 @@ func parseOptions(opts *Options, allArgs []string) {
case "--no-mouse":
opts.Mouse = false
case "+c", "--no-color":
- opts.Theme = nil
+ opts.Theme = tui.NoColorTheme()
case "+2", "--no-256":
opts.Theme = tui.Default16
case "--black":
@@ -1478,6 +1497,25 @@ func postProcessOptions(opts *Options) {
}
}
}
+
+ if opts.Bold {
+ theme := opts.Theme
+ boldify := func(c tui.ColorAttr) tui.ColorAttr {
+ dup := c
+ if !theme.Colored {
+ dup.Attr |= tui.Bold
+ } else if (c.Attr & tui.AttrRegular) == 0 {
+ dup.Attr |= tui.Bold
+ }
+ return dup
+ }
+ theme.Current = boldify(theme.Current)
+ theme.CurrentMatch = boldify(theme.CurrentMatch)
+ theme.Prompt = boldify(theme.Prompt)
+ theme.Input = boldify(theme.Input)
+ theme.Cursor = boldify(theme.Cursor)
+ theme.Spinner = boldify(theme.Spinner)
+ }
}
// ParseOptions parses command-line options