From ffb6e28ca7ea6dbaaf5bdf3e0f71b45565cb7b67 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Wed, 28 May 2025 00:27:33 +0900 Subject: [PATCH] Allow customizing --ghost color via '--color ghost' Examples: # Dimmed red fzf --ghost booya --color ghost:red # Regular red fzf --ghost booya --color ghost:red:regular Close #4398 --- man/man1/fzf.1 | 1 + src/options.go | 2 ++ src/terminal.go | 2 +- src/tui/tui.go | 9 +++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/man/man1/fzf.1 b/man/man1/fzf.1 index d41fa170..a07222e1 100644 --- a/man/man1/fzf.1 +++ b/man/man1/fzf.1 @@ -272,6 +272,7 @@ color mappings. Each entry is separated by a comma and/or whitespaces. \fBcurrent\-hl (hl+) \fRHighlighted substrings (current line) \fBalt\-bg \fRAlternate background color to create striped lines \fBquery (input\-fg) \fRQuery string + \fBghost \fRGhost text (\fB\-\-ghost\fR, \fBdim\fR applied by default) \fBdisabled \fRQuery string when search is disabled (\fB\-\-disabled\fR) \fBinfo \fRInfo line (match counters) \fBborder \fRBorder around the window (\fB\-\-border\fR and \fB\-\-preview\fR) diff --git a/src/options.go b/src/options.go index 030368fa..3def3395 100644 --- a/src/options.go +++ b/src/options.go @@ -1282,6 +1282,8 @@ func parseTheme(defaultTheme *tui.ColorTheme, str string) (*tui.ColorTheme, erro switch components[0] { case "query", "input", "input-fg": mergeAttr(&theme.Input) + case "ghost": + mergeAttr(&theme.Ghost) case "disabled": mergeAttr(&theme.Disabled) case "fg": diff --git a/src/terminal.go b/src/terminal.go index 094d3c91..9bf469ce 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -2386,7 +2386,7 @@ func (t *Terminal) printPrompt() { before, after := t.updatePromptOffset() if len(before) == 0 && len(after) == 0 && len(t.ghost) > 0 { - w.CPrint(tui.ColInput.WithAttr(tui.Dim), t.ghost) + w.CPrint(tui.ColGhost, t.ghost) return } diff --git a/src/tui/tui.go b/src/tui/tui.go index ac83110f..06dbccb0 100644 --- a/src/tui/tui.go +++ b/src/tui/tui.go @@ -329,6 +329,7 @@ func (p ColorPair) MergeNonDefault(other ColorPair) ColorPair { type ColorTheme struct { Colored bool Input ColorAttr + Ghost ColorAttr Disabled ColorAttr Fg ColorAttr Bg ColorAttr @@ -701,6 +702,7 @@ var ( ColNormal ColorPair ColInput ColorPair ColDisabled ColorPair + ColGhost ColorPair ColMatch ColorPair ColCursor ColorPair ColCursorEmpty ColorPair @@ -760,6 +762,7 @@ func EmptyTheme() *ColorTheme { BorderLabel: ColorAttr{colUndefined, AttrUndefined}, ListLabel: ColorAttr{colUndefined, AttrUndefined}, ListBorder: ColorAttr{colUndefined, AttrUndefined}, + Ghost: ColorAttr{colUndefined, Dim}, Disabled: ColorAttr{colUndefined, AttrUndefined}, PreviewFg: ColorAttr{colUndefined, AttrUndefined}, PreviewBg: ColorAttr{colUndefined, AttrUndefined}, @@ -804,6 +807,7 @@ func NoColorTheme() *ColorTheme { Header: ColorAttr{colDefault, AttrUndefined}, Border: ColorAttr{colDefault, AttrUndefined}, BorderLabel: ColorAttr{colDefault, AttrUndefined}, + Ghost: ColorAttr{colDefault, Dim}, Disabled: ColorAttr{colDefault, AttrUndefined}, PreviewFg: ColorAttr{colDefault, AttrUndefined}, PreviewBg: ColorAttr{colDefault, AttrUndefined}, @@ -850,6 +854,7 @@ func init() { Header: ColorAttr{colCyan, AttrUndefined}, Border: ColorAttr{colBlack, AttrUndefined}, BorderLabel: ColorAttr{colWhite, AttrUndefined}, + Ghost: ColorAttr{colUndefined, Dim}, Disabled: ColorAttr{colUndefined, AttrUndefined}, PreviewFg: ColorAttr{colUndefined, AttrUndefined}, PreviewBg: ColorAttr{colUndefined, AttrUndefined}, @@ -890,6 +895,7 @@ func init() { Header: ColorAttr{109, AttrUndefined}, Border: ColorAttr{59, AttrUndefined}, BorderLabel: ColorAttr{145, AttrUndefined}, + Ghost: ColorAttr{colUndefined, Dim}, Disabled: ColorAttr{colUndefined, AttrUndefined}, PreviewFg: ColorAttr{colUndefined, AttrUndefined}, PreviewBg: ColorAttr{colUndefined, AttrUndefined}, @@ -930,6 +936,7 @@ func init() { Header: ColorAttr{31, AttrUndefined}, Border: ColorAttr{145, AttrUndefined}, BorderLabel: ColorAttr{59, AttrUndefined}, + Ghost: ColorAttr{colUndefined, Dim}, Disabled: ColorAttr{colUndefined, AttrUndefined}, PreviewFg: ColorAttr{colUndefined, AttrUndefined}, PreviewBg: ColorAttr{colUndefined, AttrUndefined}, @@ -995,6 +1002,7 @@ func InitTheme(theme *ColorTheme, baseTheme *ColorTheme, forceBlack bool, hasInp theme.SelectedFg = o(theme.ListFg, theme.SelectedFg) theme.SelectedBg = o(theme.ListBg, theme.SelectedBg) theme.SelectedMatch = o(theme.Match, theme.SelectedMatch) + theme.Ghost = o(theme.Input, theme.Ghost) theme.Disabled = o(theme.Input, theme.Disabled) theme.Gutter = o(theme.DarkBg, theme.Gutter) theme.PreviewFg = o(theme.Fg, theme.PreviewFg) @@ -1051,6 +1059,7 @@ func initPalette(theme *ColorTheme) { ColNormal = pair(theme.ListFg, theme.ListBg) ColSelected = pair(theme.SelectedFg, theme.SelectedBg) ColInput = pair(theme.Input, theme.InputBg) + ColGhost = pair(theme.Ghost, theme.InputBg) ColDisabled = pair(theme.Disabled, theme.InputBg) ColMatch = pair(theme.Match, theme.ListBg) ColSelectedMatch = pair(theme.SelectedMatch, theme.SelectedBg)