From b5d8849c06de3d0ea410e0ba03e66b101b1ec626 Mon Sep 17 00:00:00 2001 From: Elwardi Date: Sat, 7 Aug 2021 16:06:36 +0100 Subject: [PATCH] Support match colors in `labelFormat` entry in menuFromCommand prompts --- docs/Custom_Command_Keybindings.md | 8 +++++--- pkg/gui/custom_commands.go | 7 ++++++- pkg/gui/style/basic_styles.go | 15 +++++++++++++++ pkg/theme/style.go | 19 +++---------------- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/docs/Custom_Command_Keybindings.md b/docs/Custom_Command_Keybindings.md index c48442362..8b0c769c2 100644 --- a/docs/Custom_Command_Keybindings.md +++ b/docs/Custom_Command_Keybindings.md @@ -48,7 +48,7 @@ customCommands: command: 'git branch -r --list {{index .PromptResponses 0}}/*' filter: '.*{{index .PromptResponses 0}}/(?P.*)' valueFormat: '{{ .branch }}' - labelFormat: '' + labelFormat: '{{ .branch | green }}' ``` Looking at the command assigned to the 'n' key, here's what the result looks like: @@ -110,8 +110,10 @@ The permitted prompt fields are: | | PS: named groups keep first match only | | | labelFormat | (only applicable to 'menuFromCommand' prompts) how to format matched groups from | no | | | the filter to construct the item's label (What's shown on screen). You can use | | -| | named groups, or `{{ .group_GROUPID }}`. If this is not specified, `valueFormat` | | -| | is shown instead. | | +| | named groups, or `{{ .group_GROUPID }}`. You can also color each match with | | +| | `{{ .group_GROUPID | colorname }}` (Color names from | | +| | [here](https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md)) | | +| | If `labelFormat` is not specified, `valueFormat` is shown instead. | | | | PS: named groups keep first match only | | The permitted option fields are: diff --git a/pkg/gui/custom_commands.go b/pkg/gui/custom_commands.go index a9795f7b6..d43f028cb 100644 --- a/pkg/gui/custom_commands.go +++ b/pkg/gui/custom_commands.go @@ -136,7 +136,12 @@ func (gui *Gui) GenerateMenuCandidates(commandOutput, filter, valueFormat, label return nil, gui.surfaceError(errors.New("unable to parse value format, error: " + err.Error())) } - descTemp, err := template.New("format").Parse(labelFormat) + colorFuncMap := template.FuncMap{} + for k, v := range style.ColorMap { + colorFuncMap[k] = v.Foreground.Sprint + } + + descTemp, err := template.New("format").Funcs(colorFuncMap).Parse(labelFormat) if err != nil { return nil, gui.surfaceError(errors.New("unable to parse label format, error: " + err.Error())) } diff --git a/pkg/gui/style/basic_styles.go b/pkg/gui/style/basic_styles.go index ef29904bc..373172a8b 100644 --- a/pkg/gui/style/basic_styles.go +++ b/pkg/gui/style/basic_styles.go @@ -27,6 +27,21 @@ var ( AttrUnderline = New().SetUnderline() AttrBold = New().SetBold() + + ColorMap = map[string]struct { + Foreground TextStyle + Background TextStyle + }{ + "default": {FgWhite, BgBlack}, + "black": {FgBlack, BgBlack}, + "red": {FgRed, BgRed}, + "green": {FgGreen, BgGreen}, + "yellow": {FgYellow, BgYellow}, + "blue": {FgBlue, BgBlue}, + "magenta": {FgMagenta, BgMagenta}, + "cyan": {FgCyan, BgCyan}, + "white": {FgWhite, BgWhite}, + } ) func FromBasicFg(fg color.Color) TextStyle { diff --git a/pkg/theme/style.go b/pkg/theme/style.go index ba014681a..8f607256d 100644 --- a/pkg/theme/style.go +++ b/pkg/theme/style.go @@ -6,20 +6,7 @@ import ( "github.com/jesseduffield/lazygit/pkg/utils" ) -var colorMap = map[string]struct { - foreground style.TextStyle - background style.TextStyle -}{ - "default": {style.FgWhite, style.BgBlack}, - "black": {style.FgBlack, style.BgBlack}, - "red": {style.FgRed, style.BgRed}, - "green": {style.FgGreen, style.BgGreen}, - "yellow": {style.FgYellow, style.BgYellow}, - "blue": {style.FgBlue, style.BgBlue}, - "magenta": {style.FgMagenta, style.BgMagenta}, - "cyan": {style.FgCyan, style.BgCyan}, - "white": {style.FgWhite, style.BgWhite}, -} +var colorMap = style.ColorMap func GetTextStyle(keys []string, background bool) style.TextStyle { s := style.New() @@ -37,9 +24,9 @@ func GetTextStyle(keys []string, background bool) style.TextStyle { if present { var c style.TextStyle if background { - c = value.background + c = value.Background } else { - c = value.foreground + c = value.Foreground } s = s.MergeStyle(c) } else if utils.IsValidHexValue(key) {