mirror of
https://github.com/junegunn/fzf.git
synced 2025-08-14 19:55:49 -07:00
104
src/options.go
104
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
|
||||
|
Reference in New Issue
Block a user